Comment faire en sorte que les cases à cocher soient modifiées (ou deviennent visibles ou actives) en fonction d'une sélection précédente dans une fenêtre modale ?Dans le script suivant, je voudrais faire ce qui suit :
En fonction de la sélection de TestTech, je souhaite que la liste des cases à cocher TestStage appropriée apparaisse ( apparaître est préférable, sinon devenir actif si toutes les options doivent être visibles).Donc,
- si Tech1 est sélectionné, tous les TestSages avec _Tech1 doivent être disponibles pour la sélection de l'utilisateur
- si Tech2 est sélectionné, tous les TestSages avec _Tech2 doivent être disponibles pour la sélection de l'utilisateur. Cette liste est commentée ci-dessous
- si Tech3 est sélectionné, tous les TestSages avec _Tech3 doivent être disponibles pour la sélection par l'utilisateur. Cette liste est commentée ci-dessous, et ainsi de suite.
J'aimerais également que l'option "Sélectionner tout" soit disponible sous chaque liste.
Comment faire cela ?
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>
Automatisation et scriptsles fenêtresRe : Comment faire en sorte que les cases à cocher soient modifiées (ou deviennent visibles ou actives) en fonction d'une sélection précédente dans une fenêtre modale ?Cela pourrait vous donner quelques idées sur ce que vous pourriez faire
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>Re : Comment faire en sorte que les cases à cocher soient modifiées (ou deviennent visibles ou actives) en fonction d'une sélection précédente dans une fenêtre modale ?@jthi Merci. L'exécution de votre script commence par afficher tout Étapes de test sous Étape de test par défaut (collé ci-dessous) puis une fois par jour Technologie est sélectionné, il se comporte selon les besoins.
Le script pourrait-il être modifié pour ne rien afficher en premier sous Étape de test texte de sélection puis une fois le Technologie est sélectionné, afficher les étapes de test appropriées/disponibles ?

Re : Comment faire en sorte que les cases à cocher soient modifiées (ou deviennent visibles ou actives) en fonction d'une sélection précédente dans une fenêtre modale ?Vous pouvez initialiser la case à cocher avec une liste vide au lieu de cb_values.
Re : Comment faire en sorte que les cases à cocher soient modifiées (ou deviennent visibles ou actives) en fonction d'une sélection précédente dans une fenêtre modale ?@jthi j'ai déjà essayé avec
cb_values = {};mais je pense que je ne place pas cela correctement. Où doit aller cette déclaration ?
Re : Comment faire en sorte que les cases à cocher soient modifiées (ou deviennent visibles ou actives) en fonction d'une sélection précédente dans une fenêtre modale ?C'est l'endroit où vous définissez ces valeurs pour la première fois

aussi si vous voulez qu'il soit toujours vide lorsqu'aucune sélection n'est effectuée, vous devrez également apporter de petites modifications à expr_update_cb
Re : Comment faire en sorte que les cases à cocher soient modifiées (ou deviennent visibles ou actives) en fonction d'une sélection précédente dans une fenêtre modale ?@jthi . Dans ce cas, j'ai placé le
cb_values = {};correctement, mais je n'ai pas apporté la petite modification à expr_update_cb.Il suffit de placer la ligne ci-dessus avant cb2= Check Box(... ne fait pas ce qui est nécessaire une fois Technologie est sélectionné. Pensée.......
Re : Comment faire en sorte que les cases à cocher soient modifiées (ou deviennent visibles ou actives) en fonction d'une sélection précédente dans une fenêtre modale ?Initialisez la case à cocher avec une liste vide et non cb_values (ce sont des choses différentes).
Dans l'expression, c'est la partie que vous devez considérer (et comprendre)

Pourquoi l'instruction if est-elle utilisée ici ? Que se passerait-il si nous allions ailleurs ? Que se passerait-il si nous ne l'avons pas, si nous avons une liste vide et si nous allons dans Filtrer chacun ?
Re : Comment faire en sorte que les cases à cocher soient modifiées (ou deviennent visibles ou actives) en fonction d'une sélection précédente dans une fenêtre modale ?@jthi Merci pour les conseils, j'ai essayé hier soir mais sans succès jusqu'à présent.
C'est ainsi que je comprends l'exigence, si aucun des éléments n'est sélectionné sous kg alors cb2 ne devrait pas apparaître. cb2 ne devrait s'afficher que lorsque N éléments (cur_sel) ≥1.
Cependant, expr_update_cb se déclenche uniquement lorsqu'un ou plusieurs éléments sont sélectionnés dans kg.
Je ne sais pas comment modifier expr_update_cb à exécuter lorsque rien n'est sélectionné sous kg.
L'exigence de ne rien montrer en vertu de cb2 être traité avec une instruction if/else autour kg c'est-à-dire que si rien n'est sélectionné sous lb, ne pas afficher cb2 ?
Re : Comment faire en sorte que les cases à cocher soient modifiées (ou deviennent visibles ou actives) en fonction d'une sélection précédente dans une fenêtre 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>Re : Comment faire en sorte que les cases à cocher soient modifiées (ou deviennent visibles ou actives) en fonction d'une sélection précédente dans une fenêtre modale ?@jthi Je ne sais pas pourquoi vous avez publié à nouveau votre script original, mais c'est là que j'en suis arrivé, je ne fonctionne toujours pas comme nécessaire, peut-être que la fin semble proche
?
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>
Re : Comment faire en sorte que les cases à cocher soient modifiées (ou deviennent visibles ou actives) en fonction d'une sélection précédente dans une fenêtre modale ?Très probablement, mon ctrl cassé ne m'a pas permis de copier le script correct et j'ai posté trop rapidement. Cela devrait être corrigé maintenant.
Re : Comment faire en sorte que les cases à cocher soient modifiées (ou deviennent visibles ou actives) en fonction d'une sélection précédente dans une fenêtre modale ?@jthi Merci. Votre script mis à jour à partir d'aujourd'hui fonctionne. Je serais intéressé de savoir si la façon dont je le faisais aujourd'hui (mon script d'aujourd'hui) est une approche incorrecte.
Aussi, pourquoi la requête de date ne s'affiche-t-elle pas si je mets tb3 et cb3 sections en haut, c'est-à-dire au-dessus tuberculose 1 ?
(l'idée est d'amener l'utilisateur à choisir les dates avant toute autre chose)
Re : Comment faire en sorte que les cases à cocher soient modifiées (ou deviennent visibles ou actives) en fonction d'une sélection précédente dans une fenêtre modale ?Je suppose qu'il vous manque "," ou que vous avez ";" au mauvais endroit
Re : Comment faire en sorte que les cases à cocher soient modifiées (ou deviennent visibles ou actives) en fonction d'une sélection précédente dans une fenêtre modale ?@jthi mon "," le placement semble correct mais je n'arrive toujours pas à faire fonctionner la requête de date lorsqu'elle est placée en haut.
Aussi, comment renvoyer la valeur sélectionnée par " tout sélectionner " ? Mon emplacement d'origine pour retourné2 ne semble fonctionner que pour la sélection manuelle.
Re : Comment faire en sorte que les cases à cocher soient modifiées (ou deviennent visibles ou actives) en fonction d'une sélection précédente dans une fenêtre modale ?J'obtiendrais simplement toutes les valeurs dans les variables lorsque l'utilisateur appuie sur OK et non lorsque l'utilisateur modifie ses sélections.
Re : Comment faire en sorte que les cases à cocher soient modifiées (ou deviennent visibles ou actives) en fonction d'une sélection précédente dans une fenêtre modale ?@jthi Merci, mais je ne peux réajuster les sélections manuelles qu'avec mon placement de retourné2 à l'intérieur de cb2=case à cocher (.. .
S'il vous plaît, pourriez-vous m'indiquer où placer cb2 << Obtenir la sélection (); pour tirer uniquement lorsque l'utilisateur appuie sur D'ACCORD.
Re : Comment faire en sorte que les cases à cocher soient modifiées (ou deviennent visibles ou actives) en fonction d'une sélection précédente dans une fenêtre modale ?Guide de script > Afficher les arbres > Fenêtres modales en JSL > Construire une fenêtre modale donne une explication des nouvelles fenêtres en utilisant modal. Et cela devrait donner un exemple où placer les commandes pour obtenir des valeurs dans des variables
Names Default To Here(1);
nw = New Window("Example", <<MODAL></MODAL>
Vous pouvez également le placer sur << On Validate ou << On Close (voir Scripting Index par exemple et quelques explications), mais je les place généralement à l'intérieur du bouton OK.
Re : Comment faire en sorte que les cases à cocher soient modifiées (ou deviennent visibles ou actives) en fonction d'une sélection précédente dans une fenêtre modale ?@jthi , Merci.
show(cb_sel);
travaux.
Re : Comment faire en sorte que les cases à cocher soient modifiées (ou deviennent visibles ou actives) en fonction d'une sélection précédente dans une fenêtre modale ?@jthi Pendant que je suis sur ce sujet (et que je ne crée pas de nouveau fil de discussion posant une question nouvelle mais connexe), je me demande s'il est possible d'afficher un texte montrant à l'utilisateur ce que chaque étape de test a fait lorsqu'il la sélectionne. Exemple collé ci-dessous.Le texte ne s'affiche que lorsque la sélection est effectuée et reste jusqu'à ce qu'il soit décoché.

Re : Comment faire en sorte que les cases à cocher soient modifiées (ou deviennent visibles ou actives) en fonction d'une sélection précédente dans une fenêtre modale ?C’est tout à fait possible, mais comment le rendre robuste et facile à utiliser peut être différent. Vous trouverez ci-dessous une option rapide qui m'est venue à l'esprit (il existe probablement de meilleures options)
Names Default To Here(1);
cb_sel = {};
nw = New Window("Example", <<MODAL></MODAL>Re : Comment faire en sorte que les cases à cocher soient modifiées (ou deviennent visibles ou actives) en fonction d'une sélection précédente dans une fenêtre modale ?@jthi Merci. C'est exactement ce qui est nécessaire mais j'aurais du mal à l'adapter à mon exemple original dans ce fil (mon premier message, avec le script Tech et TestStage). Si vous pouviez le montrer pour une ou deux sélections, je devrais pouvoir faire le reste.
Je peux voir que le texte de chaque étape de test doit être prédéfini.
Re : Comment faire en sorte que les cases à cocher soient modifiées (ou deviennent visibles ou actives) en fonction d'une sélection précédente dans une fenêtre modale ?Si je l'écris pour une ou deux sélections, je réécrirais essentiellement tout le script car il y a beaucoup de choses à prendre en compte. De plus, vous n'avez pas besoin de les prédéfinir si vous pouvez déterminer ce qu'ils devraient être d'une autre manière.
Re : Comment faire en sorte que les cases à cocher soient modifiées (ou deviennent visibles ou actives) en fonction d'une sélection précédente dans une fenêtre modale ?@jthi Aucun problème. Merci pour votre aide jusqu'à présent sur ce sujet. Le script que vous avez utilisé pour la démonstration semble exiger que chaque case à cocher soit traitée individuellement pour le texte supplémentaire, alors que dans mon cas d'origine, toutes les options sont regroupées dans une seule liste.
Pourriez-vous s'il vous plaît me donner quelques conseils afin que je puisse commencer mon script original/premier dans cet article ?
Je vais essayer de le faire moi-même et je reviendrai ensuite avec des questions spécifiques.
De plus, dans mon cas, le texte de chaque étape de test sélectionnée serait une liste de paramètres testés prédéfinis. Par exemple pour la première étape de test {A, B}, pour la seconde, {A, B, C, L,M}.
Re : Comment faire en sorte que les cases à cocher soient modifiées (ou deviennent visibles ou actives) en fonction d'une sélection précédente dans une fenêtre modale ?Utilisez un tableau associatif pour stocker vos différentes listes, créez des expressions/fonctions pour créer un collecteur de cases à cocher et de cases if.
Cela n'utilise pas de fenêtre modale, car il est beaucoup plus facile à développer lorsque vous n'en utilisez pas, car vous pouvez facilement tester différents get et autres à partir de l'éditeur de 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>
