J'expérimente la création d'un modèle de boîte de dialogue plus convivial pour mes clients. Au lieu d'utiliser des cases d'option ou des cases à cocher, j'utilise des zones de liste de cols pour que l'interface utilisateur ressemble davantage à la boîte de dialogue du modèle d'ajustement. Ce script est censé personnaliser les graphiques et la sortie pour faire gagner du temps à l'utilisateur lors de la production d'une sortie à partir d'un script JSL de table de données pour les PQA d'un produit donné.
Vous trouverez ci-joint un fichier JMP avec un ensemble de données de jouets avec des noms de colonne de base et des scripts JSL joints auxquels je fais référence tout au long de cet article.
J'ai une variable dans laquelle l'utilisateur entre un col appelé set_resultcol. Cette valeur de set_resultcol peut être utilisée avec n'importe quel en-tête de colonne d'ensemble de données (c'est-à-dire qu'un ensemble de données peut avoir « résultat » ou « Résultat » ou « Résultat (N) » ou « Valeur » comme en-tête de la variable numérique continue qui sera modélisée sur l'axe des ordonnées comme variable dépendante.
Cependant, je rencontre des problèmes avec l'expression de la valeur set_resultcol qui n'est pas exprimée dans le changement de nom du script de l'axe y dans l'option de zone de liste col que j'ai utilisée pour rendre l'interface utilisateur plus conviviale, même si j'ai essayé d'obtenir les valeurs de la liste résultante de la zone de liste col avec, par exemple {"Résultat"}[1]. Je suis encore nouveau dans le concept des zones de liste de cols dans la fenêtre modale, j'espère donc que je pourrai avoir des yeux plus expérimentés sur mon code JSL pour m'aider à déterminer ce qui peut être fait.
Lorsque j'ai utilisé des boîtes radio, la valeur résultante pour set_resultcol était une chaîne, qui pouvait être référencée dans le JSL ci-dessous pour renommer l'axe des ordonnées en PQA (attribut de qualité):

Names Default To Here( 1 );
dt = Current Data Table();
//part 1. ask user for column names in a new window nw1
//possible Group column name (should be character)
character_col_names = dt << Get Column names(character, String);
//possible result column name (should be numeric)
numeric_col_names = dt << Get Column names(Numeric, String);
nw1 = New Window("Set group by variable an",
<<MODAL></MODAL>Et le graphique résultant aurait l'étiquette de l'axe des ordonnées "Résultat" (par exemple) renommée "A" (le PQA est appelé "A" par souci de simplicité).

J'ai la boîte de dialogue modale suivante que j'ai créée avec la zone de liste col pour rendre la boîte de dialogue modale plus conviviale et esthétique avec une fonction de glisser-déposer au lieu d'afficher toutes les colonnes en même temps. Sous cette fenêtre, j'ai le code JSL correspondant avec lequel j'ai des problèmes concernant ces zones de liste de cols.

Names Default To Here( 1 );
dt = Current Data Table();
nw1 = New Window("Set variables for stability model",
<<MODAL></MODAL>Cependant, le graphique résultant est le suivant, avec le nom de l'axe des ordonnées, dans ce tableau de données "Résultat" sur l'axe des ordonnées, alors qu'il devrait indiquer "A" pour le PQA "A":

Je sais que la zone de liste col produit des listes de variables, car j'ai des options dans le script JSL qui me disent :
//is this set_resultcol a list? if so, show the contents.
Show(is list(set_resultcol)); // which gives 1 or “true” as shown in the log
Show(set_resultcol[1]); //which gives “Result” as shown in the log

Quel est le problème avec ce script JSL qui ne permet pas de le référencer dans l'ensemble de données ? Que puis-je faire pour résoudre ce problème ?
La seule documentation que je puisse trouver concernant ce problème se trouve dans les pages pdf "JMP 15 Scripting Guide" 524, 527-529 pour les zones de liste de cols et la section sur les listes de ce manuel. J'ai essayé ces exemples, mais ils ne me disent rien que je ne sache déjà.
Je n'utiliserais pas Dispatch pour modifier les rapports si je peux l'éviter. Je préférerais obtenir les références, puis modifier le rapport en fonction de celles-ci. Le script ci-dessous pourrait vous donner quelques idées :
Names Default To Here(1);
dt = Open("$DOWNLOADS/Col List Box Y-axis labeling issue 7_11_2022.jmp");
nw1 = New Window("Set variables for stability model",
<<MODAL>
["LSL" => 0.3, "USL" => 0.9],
"B" =>
["LSL" => 0.5, "USL" => 2],
"C" =>
["LSL" => 4, "USL" => 6]
];
//Response Result outline box references
response_ob_refs = fm << XPath("//OutlineBox[contains(text(), 'Response Result PQA')]");
For Each({ror_list}, response_ob_refs,
ror = ror_list[1];
cur_group = Word(2, ror << get title, "=");
cur_lsl = aa_settings[cur_group]["LSL"];
cur_usl = aa_settings[cur_group]["USL"];
rp_ref = (ror << XPath("//OutlineBox[contains(text(), 'Regression Plot')]"))[1];
// Y-axis
y_axis = rp_ref[Axis Box(1)];
Eval(EvalExpr(
y_axis << Add Ref Line(Expr(cur_lsl), "Solid", Dark Red, Expr(EvalInsert("LSL (^cur_lsl^)")), 1);
y_axis << Add Ref Line(Expr(cur_usl), "Solid", Dark Red, Expr(EvalInsert("USL (^cur_usl^)")), 1);
));
y_axis << RemoveAxisLabel("Result");
y_axis << AddAxisLabel(cur_group);
y_axis << Min(cur_lsl);
y_axis << Max(cur_usl);
f_box = rp_ref[FrameBox(1)];
f_box << Frame Size(600, 400);
// Legend
f_box << Row Legend(
Eval(set_groupby),
Color(1),
Color Theme("JMP Default"),
Marker(0),
Marker Theme(""),
Continuous Scale(0),
Reverse Scale(0),
Excluded Rows(0)
);
);
</MODAL>

Si, pour une raison quelconque, vous voulez vraiment utiliser Dispatch, je vous suggère de vérifier Insérer une expression dans une autre en utilisant Eval Insert, Eval Expr, Parse et Substitute