Hallo Karim,
eine Frage hierzu: Soll es eine Checkbox geben für die komplette Untertabelle oder möchtest du das Ganze zeilenweise steuern? Sprich in jeder Untertabellenzeile eine Checkbox und davon in Abhängigkeit die Spalte?
Viele Grüße
Jan
Hallo Jan, das Erstere. Eine Checkbox, deren Auswahl dann die gesamte Untertabelle steuern soll.
Viele Grüße,
Karim
Hallo Jan, Hallo Dominic,
wow, einfach Klasse - so lob ich mir ein Forum; daran sollte sich die JR Academy ein Beispiel nehmen.
Vielen lieben Dank an euch beide!! Sowohl für die schnelle Unterstützung als auch die ausführlichen Erklärungen :) Beide Antworten funktionieren einwandfrei; auch wenn der mitgelieferte JobRouter Code Editor erst versucht hat mir etwas anderes weis zu machen haha.. (Unexpected 'const'.)
Damit habt ihr mir nicht nur sehr in diesem konkreten Fall geholfen, sondern durch eure Beispiele konnte ich nun die nötige Struktur hinter den Untertabellen verstehen und kann dies in Zukunft für ähnliche Anforderungen anwenden – auch dafür Danke!
Ich wünsche euch frohe und besinnliche Weihnachten, schöne Feiertage und einen guten Rutsch ins Neue Jahr :)
Beste Grüße, Karim
Der editor von JR kennt nur ES5?. Zu der Zeit gab es noch kein const
man könne const
auch einfach in var
ändern dann würde er das zumindest nicht anmeckern :D. Wenn aber keine veralteten Browser genutzt werden sollte es kein Problem sein.
so schlecht sieht das ja nicht aus, dir fehlt ja nur die id
id für Untertabellenzellen setzt sich aus
const columnId = `${subtable}_${column}_${rowId}`;
zusammen.jr_hide_subtable_column
/jr_show_subtable_column
solltest du natürlich nicht im loop aufrufen, das reicht auch einmalig
Hier dein Beispiel entsprehend abgeändert
function Test() {
const checked = jr_get_value('checkbox');
if (checked) {
jr_show_subtable_column('SUBVName', 'SUBV_Column');
} else {
jr_hide_subtable_column('SUBVName', 'SUBV_Column');
}
jr_loop_table('SUBVName', function (subtable, rowId) {
const columnId = `${subtable}_SUBV_Column_${rowId}`;
if (checked) {
jr_set_disabled(columnId, false);
} else {
jr_set_subtable_value(subtable, rowId, 'SUBV_Column', '');
jr_set_disabled(columnId, true);
}
});
}
besser wäre natürlich die funktion gleich so aufzubauen, so dass man sie auch wiederverwenden kann
function ShowOrHideSubtableColumn(subtable, column, hide = false) {
if (hide) {
jr_hide_subtable_column(subtable, column);
} else {
jr_show_subtable_column(subtable, column);
}
const rowIds = jr_get_subtable_row_ids(subtable);
rowIds.forEach(rowId => {
const columnId = `${subtable}_${column}_${rowId}`;
jr_set_disabled(columnId, hide);
if (hide) {
jr_set_subtable_value(subtable, rowId, column, '');
}
});
}
aufrufen könntest du dies dann mit
ShowOrHideSubtableColumn("SUBVName", "SUBV_Column", jr_get_value("checkbox"));
oder indem du
ShowOrHideSubtableColumn("subview", "testField", true);
in das OnChecked
und
ShowOrHideSubtableColumn("subview", "testField", false);
in das OnUnChecked
Skipting Feld der Checkbox einfügst
Hallo Karim,
anbei eine Funktion die deine Anforderung abdecken sollte. Einfach dann bei der Checkbox als OnChecked und OnUnchecked die Funktion subtableControl('show') bzw subtableControl('hide') ausführen und im Skript den SubtableView Namen und den Spaltennamen ändern :-)
function subtableControl(action)
{
const subtableView = 'Z_JM_TEST_STV'; // Name der Untertabellenansicht, nicht des Dialogelements
const subtableColumn = 'txbColumn2'; // Spalte, welche ein und ausgeblendet werden soll
const subtableViewIds = jr_get_subtable_row_ids(subtableView); // Sämtliche IDs der Untertabellenansicht ermitteln
const fieldCount = subtableViewIds.length; // Anzahl der IDs für for-Schleife
if(action == 'show')
{
jr_show_subtable_column(subtableView, subtableColumn); // Zeige die Untertabellenspalte
for(let i = 0; i < fieldCount; i++)
{
jr_set_disabled(subtableView + '_' + subtableColumn + '_' + subtableViewIds[i], false); // Aktiviere die Untertabellenspalte
}
}
if(action == 'hide')
{
jr_hide_subtable_column(subtableView, subtableColumn); // Blende die Untertabellenspalten aus
for(let i = 0; i < fieldCount; i++)
{
jr_reset_value(subtableView + '_' + subtableColumn + '_' + subtableViewIds[i]); // Setze den Wert in der Spalte in jeder Zeile zurück
jr_set_disabled(subtableView + '_' + subtableColumn + '_' + subtableViewIds[i]); // Deaktiviere die Untertabellenspalte
}
}
}
Viele Grüße
Jan