Come fare in modo che le caselle di controllo vengano modificate (o diventino visibili o attive) in base a una selezione precedente in una finestra modale?Nel seguente script, vorrei fare quanto segue:
In base alla selezione di TestTech, desidero che venga visualizzato l'elenco delle caselle di controllo TestStage appropriato ( apparire è preferibile, altrimenti diventare attivo se tutte le opzioni devono essere visibili).COSÌ,
- se Tech1 è selezionato, tutti i TestSage con _Tech1 dovrebbero essere disponibili all'utente per la selezione
- se Tech2 è selezionato, tutti i TestSage con _Tech2 dovrebbero essere disponibili all'utente per la selezione. Questo elenco è commentato di seguito
- se Tech3 è selezionato, tutti i TestSage con _Tech3 dovrebbero essere disponibili all'utente per la selezione. Questo elenco è commentato di seguito e così via.
Vorrei anche che l'opzione "Seleziona tutto" fosse disponibile in ciascun elenco.
Come fare questo?
Names Default To Here( 1 );
Clear Log ();
listInd = {};
returned2 = {};
win = New Window( "Select Tech & TestStage", << modal,
V List Box (
tb1=Text Box("Select Tech", << set font style("bold")),
cb1 = List Box(
{"Tech1", "Tech2", "Tech3"},
returned1 = (cb1 << Get Selected());
listInd= cb1 << Get Selected Indices;
),
tb1=Text Box("Select one or more TestStage", << set font style("bold")),
cb2 = Check Box(
{"Sage1_Tech1", "Sage2_Tech1", "Sage3_Tech1", "Sage4_Tech1", "Sage5_Tech1", "Sage6_Tech1"},
//{"Sage1_Tech2", "Sage2_Tech2", "Sage3_Tech2", "Sage4_Tech2", "Sage5_Tech2", "Sage6_Tech2"},
//{"Sage1_Tech3", "Sage2_Tech3", "Sage3_Tech3", "Sage4_Tech3", "Sage5_Tech3", "Sage6_Tech3"},
returned2 = (cb2 << Get Selected());
),
tb3=Text Box("Query TestDate (last 6 months selected by default)", << set font style("bold")),
end_date = Today();
start_date = Date Increment(end_date, "month", -6, "actual");
cb3 = H List Box(
Text Box("From:"),
scal = Number Edit Box(
start_date,
<<SET format=""></SET>
Automazione e scriptingfinestreRi: Come fare in modo che le caselle di controllo vengano modificate (o diventino visibili o attive) in base a una selezione precedente in una finestra modale?Questo potrebbe darti qualche idea su cosa potresti fare
Names Default To Here(1);
lb_values = {"Tech1", "Tech2", "Tech3"};
cb_values = {"Sage1_Tech1", "Sage2_Tech1", "Sage3_Tech1", "Sage4_Tech1", "Sage5_Tech1", "Sage6_Tech1",
"Sage1_Tech2", "Sage2_Tech2", "Sage3_Tech2", "Sage4_Tech2", "Sage5_Tech2", "Sage6_Tech2",
"Sage1_Tech3", "Sage2_Tech3", "Sage3_Tech3", "Sage4_Tech3", "Sage5_Tech3", "Sage6_Tech3"
};
expr_update_cb = Expr(
cur_sel = lb << get selected;
If(N Items(cur_sel),
cur_cb_values = Filter Each({val}, cb_values,
cur_tech = Word(2, val, "_");
Contains(cur_sel, cur_tech);
);
,
cur_cb_values = cb_values;
);
cb2 << Set items(cur_cb_values);
);
win = New Window("Select Tech & TestStage", <<MODAL></MODAL>Ri: Come fare in modo che le caselle di controllo vengano modificate (o diventino visibili o attive) in base a una selezione precedente in una finestra modale?@jthi Grazie. L'esecuzione dello script inizia mostrando tutto TestStages Sotto TestStage per impostazione predefinita (incollato sotto) e poi una volta a Tecnologia è selezionato, si comporta come necessario.
Lo script potrebbe essere modificato per non mostrare nulla prima sotto TestStage testo di selezione e poi una volta Tecnologia è selezionato, mostrare i TestStages appropriati/disponibili?

Ri: Come fare in modo che le caselle di controllo vengano modificate (o diventino visibili o attive) in base a una selezione precedente in una finestra modale?Potresti inizializzare la casella di controllo con un elenco vuoto invece di cb_values.
Ri: Come fare in modo che le caselle di controllo vengano modificate (o diventino visibili o attive) in base a una selezione precedente in una finestra modale?@jthi Ho già provato con
cb_values = {};ma penso di non averlo posizionato correttamente. Dove dovrebbe andare questa affermazione?
Ri: Come fare in modo che le caselle di controllo vengano modificate (o diventino visibili o attive) in base a una selezione precedente in una finestra modale?Questo è il luogo in cui imposti questi valori la prima volta

inoltre se vuoi che sia sempre vuoto quando non vengono effettuate selezioni dovrai anche apportare una piccola modifica a expr_update_cb
Ri: Come fare in modo che le caselle di controllo vengano modificate (o diventino visibili o attive) in base a una selezione precedente in una finestra modale?@jthi . In quel caso ho inserito il file
cb_values = {};correttamente, ma non ha apportato la piccola modifica expr_update_cb.Basta posizionare la riga precedente prima di cb2= Check Box(... non fa ciò che è necessario una volta Tecnologia è selezionato. Pensiero.......
Ri: Come fare in modo che le caselle di controllo vengano modificate (o diventino visibili o attive) in base a una selezione precedente in una finestra modale?Inizializza la casella di controllo con un elenco vuoto e non cb_values (sono cose diverse).
All'interno dell'espressione questa è la parte che devi considerare (e capire)

Perché viene utilizzata l'istruzione if qui? Cosa accadrebbe se andassimo altrove? Cosa accadrebbe se non lo avessimo, avessimo un elenco vuoto e andassimo su Filtra ciascuno?
Ri: Come fare in modo che le caselle di controllo vengano modificate (o diventino visibili o attive) in base a una selezione precedente in una finestra modale?@jthi Grazie per le indicazioni, ho provato ieri sera ma finora senza successo.
Ecco come interpreto il requisito, se nessuno degli elementi è selezionato di seguito libbre Poi cb2 non dovrebbe mostrare. cb2 dovrebbe essere visualizzato solo quando N Items(cur_sel) ≥1.
Tuttavia, expr_update_cb si attiva solo quando vengono selezionati uno o più elementi libbre.
Non mi è chiaro come modificare expr_update_cb da eseguire quando non è selezionato nulla sotto libbre.
Dovrebbe essere richiesto di non mostrare nulla di seguito cb2 essere gestito con un'istruzione if/else in giro libbre cioè se non è selezionato nulla sotto lb, non mostrare CB2?
Ri: Come fare in modo che le caselle di controllo vengano modificate (o diventino visibili o attive) in base a una selezione precedente in una finestra modale?Names Default To Here(1);
lb_values = {"Tech1", "Tech2", "Tech3"};
cb_values = {"Sage1_Tech1", "Sage2_Tech1", "Sage3_Tech1", "Sage4_Tech1", "Sage5_Tech1", "Sage6_Tech1",
"Sage1_Tech2", "Sage2_Tech2", "Sage3_Tech2", "Sage4_Tech2", "Sage5_Tech2", "Sage6_Tech2",
"Sage1_Tech3", "Sage2_Tech3", "Sage3_Tech3", "Sage4_Tech3", "Sage5_Tech3", "Sage6_Tech3"
};
expr_update_cb = Expr(
cur_sel = lb << get selected;
If(N Items(cur_sel),
cur_cb_values = Filter Each({val}, cb_values,
cur_tech = Word(2, val, "_");
Contains(cur_sel, cur_tech);
);
,
cur_cb_values = cb_values;
);
cb2 << Set items(cur_cb_values);
);
win = New Window("Select Tech & TestStage", <<MODAL></MODAL>Ri: Come fare in modo che le caselle di controllo vengano modificate (o diventino visibili o attive) in base a una selezione precedente in una finestra modale?@jthi Non sono sicuro del motivo per cui hai ripetuto di aver pubblicato la tua sceneggiatura originale, ma è qui che sono arrivato, ancora non funziona come necessario, forse la fine sembra vicina
?
Names Default To Here(1);
clear log ();
listInd = {}; p = N Items (listInd);
lb_values = {"Tech1", "Tech2", "Tech3"};
cb_values = {"Sage1_Tech1", "Sage2_Tech1", "Sage3_Tech1", "Sage4_Tech1", "Sage5_Tech1", "Sage6_Tech1",
"Sage1_Tech2", "Sage2_Tech2", "Sage3_Tech2", "Sage4_Tech2", "Sage5_Tech2", "Sage6_Tech2",
"Sage1_Tech3", "Sage2_Tech3", "Sage3_Tech3", "Sage4_Tech3", "Sage5_Tech3", "Sage6_Tech3"
};
expr_update_cb = Expr(
cur_sel = lb << get selected;
If(N Items(cur_sel), cur_cb_values = Filter Each({val}, cb_values, cur_tech = Word(2, val, "_"); Contains(cur_sel, cur_tech))
,
cur_cb_values = cb_values;
);
p = N Items(cur_sel);
cb2 << Set items(cur_cb_values); show (cur_cb_values);
);
win = New Window("Select Tech & TestStage", <<MODAL></MODAL>
Ri: Come fare in modo che le caselle di controllo vengano modificate (o diventino visibili o attive) in base a una selezione precedente in una finestra modale?Molto probabilmente il mio ctrl rotto non mi ha permesso di copiare lo script corretto e ho pubblicato troppo velocemente. Dovrebbe essere risolto ora.
Ri: Come fare in modo che le caselle di controllo vengano modificate (o diventino visibili o attive) in base a una selezione precedente in una finestra modale?@jthi Grazie. Il tuo script aggiornato da oggi funziona. Sarei interessato a sapere se il modo in cui lo stavo facendo oggi (la mia sceneggiatura di oggi) è un approccio errato.
Inoltre, perché la query sulla data non viene visualizzata se inserisco tb3 E cb3 sezioni in alto cioè sopra tb1?
(l'idea è di far sì che l'utente scelga le date prima di ogni altra cosa)
Ri: Come fare in modo che le caselle di controllo vengano modificate (o diventino visibili o attive) in base a una selezione precedente in una finestra modale?La mia ipotesi è che ti manchi "," o che tu abbia ";" nel posto sbagliato
Ri: Come fare in modo che le caselle di controllo vengano modificate (o diventino visibili o attive) in base a una selezione precedente in una finestra modale?@jthi Mio "," il posizionamento sembra corretto ma non riesco ancora a far funzionare la query sulla data quando viene posizionata in alto.
Inoltre, come restituire il valore selezionato da " seleziona tutto "? Il mio posizionamento originale per restituito2 sembra funzionare solo per la selezione manuale.
Ri: Come fare in modo che le caselle di controllo vengano modificate (o diventino visibili o attive) in base a una selezione precedente in una finestra modale?Vorrei semplicemente inserire tutti i valori nelle variabili quando l'utente preme OK, non quando l'utente modifica le proprie selezioni.
Ri: Come fare in modo che le caselle di controllo vengano modificate (o diventino visibili o attive) in base a una selezione precedente in una finestra modale?@jthi Grazie, ma posso solo risintonizzare le selezioni manuali con il mio posizionamento di restituito2 dentro il cb2=Casella di controllo (.. .
Per favore, potresti indicarmi dove posizionarlo cb2 << Ottieni selezionato(); per attivarsi solo quando l'utente preme OK.
Ri: Come fare in modo che le caselle di controllo vengano modificate (o diventino visibili o attive) in base a una selezione precedente in una finestra modale?Guida allo scripting > Alberi di visualizzazione > Finestre modali in JSL > Costruisci una finestra modale fornisce spiegazioni sulle nuove finestre utilizzando modale. E questo dovrebbe fornire un esempio su dove inserire i comandi per inserire valori nelle variabili
Names Default To Here(1);
nw = New Window("Example", <<MODAL></MODAL>
Potresti anche inserirlo in << Alla convalida o << Alla chiusura (vedi Indice di scripting per esempio e qualche spiegazione) ma di solito li inserisco all'interno del pulsante OK.
Ri: Come fare in modo che le caselle di controllo vengano modificate (o diventino visibili o attive) in base a una selezione precedente in una finestra modale?@jthi , Grazie.
show(cb_sel);
lavori.
Ri: Come fare in modo che le caselle di controllo vengano modificate (o diventino visibili o attive) in base a una selezione precedente in una finestra modale?@jthi Mentre sono su questo argomento (e non sto creando un nuovo thread per porre una domanda nuova ma correlata), mi chiedo se sia possibile mostrare un testo che mostri all'utente cosa ha fatto ciascuna fase di test quando l'utente la seleziona. Esempio incollato di seguito.Il testo viene visualizzato solo quando viene effettuata la selezione e rimane finché non viene deselezionato.

Ri: Come fare in modo che le caselle di controllo vengano modificate (o diventino visibili o attive) in base a una selezione precedente in una finestra modale?È sicuramente possibile, ma come renderlo robusto e facile da usare può essere una cosa diversa. Di seguito è riportata una rapida opzione che mi è venuta in mente (molto probabilmente ci sono opzioni migliori)
Names Default To Here(1);
cb_sel = {};
nw = New Window("Example", <<MODAL></MODAL>Ri: Come fare in modo che le caselle di controllo vengano modificate (o diventino visibili o attive) in base a una selezione precedente in una finestra modale?@jthi Grazie. Questo è esattamente ciò che serve, ma avrei difficoltà ad adattarlo al mio esempio originale in questo thread (il mio primo post, con lo script Tech e TestStage). Se potessi mostrarlo per una/due selezioni, dovrei essere in grado di fare il resto.
Vedo che il testo per ciascuna fase del test deve essere predefinito.
Ri: Come fare in modo che le caselle di controllo vengano modificate (o diventino visibili o attive) in base a una selezione precedente in una finestra modale?Se lo scrivessi per una o due selezioni, sostanzialmente riscriverei l'intera sceneggiatura poiché ci sarebbero molti aspetti di cui tenere conto. Inoltre, non è necessario predefinirli se è possibile determinare quali dovrebbero essere in qualche altro modo.
Ri: Come fare in modo che le caselle di controllo vengano modificate (o diventino visibili o attive) in base a una selezione precedente in una finestra modale?@jthi Nessun problema. Grazie per il tuo aiuto finora su questo argomento. Lo script che hai utilizzato per la demo sembra richiedere che ciascuna casella di controllo venga gestita individualmente per il testo aggiuntivo, mentre nel mio caso originale tutte le opzioni sono presenti in un unico elenco.
Potresti per favore darmi alcune indicazioni in modo che io possa iniziare con il mio script originale/primo in questo post?
Proverò a farlo da solo e poi tornerò con domande specifiche.
Inoltre, nel mio caso, il testo per ciascuna fase di test selezionata sarebbe un elenco di parametri testati predefiniti. Ad esempio, per la prima fase del test {A, B}, per la seconda, {A, B, C, L,M}.
Ri: Come fare in modo che le caselle di controllo vengano modificate (o diventino visibili o attive) in base a una selezione precedente in una finestra modale?Utilizza l'array associativo per memorizzare i tuoi diversi elenchi, crea espressioni/funzioni per creare un raccoglitore per caselle di controllo e ifbox.
Questo non utilizza la finestra modale, poiché è molto più semplice da sviluppare quando non ne usi una poiché puoi facilmente testare get diversi e simili dall'editor di script
Names Default To Here(1);
tech_options = {"Tech1", "Tech2"};
stages_tech1 = {"Sage1_Tech1", "Sage2_Tech1"};
stages_tech1_text = {"First Level Tech1", "Second Level Tech1"};
stages_tech2 = {"Sage1_Tech2", "Sage2_Tech2"};
stages_tech2_text = {"First Level Tech2", "Second Level Tech2"};
aa_tech = Associative Array();
aa_tech["Tech1"] = Associative Array(stages_tech1, stages_tech1_text);
aa_tech["Tech2"] = Associative Array(stages_tech2, stages_tech2_text);
get_cbs = Expr(
cbs = cb_lub << XPath("//CheckBoxBox");
);
update_checkboxes = Expr(
tech_selections = lb << get selected;
cb_lub = Lineup Box(N Col(2));
For Each({tech_selection}, tech_selections,
For Each({{stage, text}}, aa_tech[tech_selection],
cb_lub << Append(Check Box(stage, << Set Function(function({this},
(this << sib) << Set(this << get);
))));
cb_lub << Append(IfBox(0, Text Box(text)))
);
);
Try((cb_collector << child) << Delete Box());
cb_collector << Append(cb_lub);
);
win = New Window("Select Tech & TestStage",
V List Box(
H List Box(
Spacer Box(Size(0, 300)), // to force height
V List Box(
Spacer Box(Size(300, 0)), // to force width
tb1 = Text Box("Select Tech", <<SET font="" style=""></SET>
