Utilisation de JSL dans JMP ver. 15.2.0. Le code JSL est intégré dans le tableau joint avec le nom du script = 'Control Charts'.
J'ai du mal avec le comportement dans les boucles imbriquées lorsque j'essaie d'ajouter des limites de spécification (LSL, Target, USL) via un script graphique personnalisé pour un nombre variable de groupes de phases et de conditions "où".Mes boucles imbriquées entraînent actuellement l'application de limites de spécification pour le dernier graphique à toutes les cartes de contrôle créées, au lieu que chaque graphique/phase/condition où reçoive ses limites respectives.
Un grand merci d'avance pour un coup de pouce dans la bonne direction !
Todd
Todd, JMP / JSL est un peu bizarre par rapport aux langages de programmation plus typiques - en particulier, vous devez à peu près faire vous-même tout le contrôle de portée.
J'ai ici un exemple qui illustre ce à quoi vous avez affaire - on pourrait penser que le script ci-dessous créera un "Rouge" alors "Bleu" triangle dans le script graphique, mais à la place, seuls deux triangles bleus sont créés.
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = Bivariate( Y( :weight ), X( :height ), FitLine );
rbiv = biv << report;
framebox = rbiv[frame box( 1 )];
/**** Make a red triangle??? ****/
color = "Red";
framebox << Add Graphics Script(
Transparency( 0.5 );
Fill Color( color );
Polygon( [60, 72, 57], [75, 120, 120] );
);
/**** Make a blue triangle??? ****/
color = "Blue";
framebox << Add Graphics Script(
Transparency( 0.5 );
Fill Color( color );
Polygon( [60, 72, 57], [85, 130, 130] );
);
Cela se produit à cause de la façon dont JSL gère la portée - lorsque vous utilisez le <<AJOUTER un="" script="" graphique=""> fonction alors il est ajouté comme un ensemble d'instructions non évaluées (en fait c'est une fonction non évaluée<CODE class=" language-jsl"> La colle() une fonction). Toute variable qui existe dans le <<AJOUTER un="" script="" graphique=""> le script sera évalué<EM> uniquement pendant l'exécution</EM> du scénario.Lorsque le script graphique est en cours d'exécution (rappelez-vous qu'il est attaché au<CODE class=" language-jsl"> Cadre Boîte qui est embarqué dans l'arbre d'affichage de la fenêtre) il devra résoudre chaque variable.Les règles de résolution de la portée dictent qu'il examinera la Local portée (si elle existe), la Ici portée (si elle existe), alors le Mondial portée - s'il ne peut pas les trouver dans l'une de ces portées, il sera remplacé par un Vider() valeur.
Ainsi, les scripts sont ajoutés au Cadre Boîte à l'intérieur du script principal, mais seulement exécuté plus tard.À ce stade ultérieur, la variable de couleur est "Bleu" , donc les deux triangles sont bleus.
La façon de résoudre ce problème est de résoudre toutes les variables d'intérêt lors de l'ajout le script graphique, pas lors de son exécution.Pour ce faire, utilisez le Eval( Eval Expr() ) méthodologie, comme indiqué ici.
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = Bivariate( Y( :weight ), X( :height ), FitLine );
rbiv = biv << report;
framebox = rbiv[frame box( 1 )];
/**** Make a red triangle!!! ****/
color = "Red";
Eval( Eval Expr(
framebox << Add Graphics Script(
Transparency( 0.5 );
Fill Color( Expr( color ) );
Polygon( [60, 72, 57], [75, 120, 120] );
);
) );
/**** Make a blue triangle!!! ****/
color = "Blue";
Eval( Eval Expr(
framebox << Add Graphics Script(
Transparency( 0.5 );
Fill Color( Expr( color ) );
Polygon( [60, 72, 57], [85, 130, 130] );
);
) );
Vous devez utiliser cette méthode pour toutes vos variables dans le <<AJOUTER un="" script="" graphique=""> fonction afin qu'ils conservent la valeur au moment où<CODE class=" language-jsl"> <<AJOUTER un="" script="" graphique=""> a été appelé.</AJOUTER>