Comment empêcher Run in Fit Model de produire un rapport?J'écris un script qui fait ce qui suit:
- Ouvre une fenêtre Ajuster le modèle,
- Permet à l'utilisateur de le remplir à l'aide des macros et d'autres fonctionnalités de la fenêtre Ajuster le modèle,
- Permet à l'utilisateur de cliquer sur Exécuter, à quel point un calcul potentiellement chronophage est effectué et un rapport est produit.
Le calcul effectué lorsque vous cliquez sur Exécuter est produit par un script stocké dans le bouton Exécuter.Ce script produit un rapport, qui est ce que l'utilisateur devrait voir.Cependant, comme le script est ajouté au bouton Exécuter, ce rapport souhaité apparaît, mais est ensuite suivi du rapport Ajuster les moindres carrés que Exécuter produit seul.Le rapport Ajuster les moindres carrés n'a aucun sens pour l'utilisateur.
Le script ci-dessous illustre le problème. Dans ce script, l'expression du bouton Exécuter, "runExpr", crée simplement une table de données clonée; c'est pour simplifier l'illustration.Dans le script réel, cette expression (runExpr) effectue de nombreuses analyses en fonction des effets saisis dans la fenêtre Ajuster le modèle. De plus, dans le script réel, l'utilisateur remplit la fenêtre Ajuster le modèle de manière interactive; J'ai rempli la fenêtre Fit Model dans le script ci-dessous pour plus de commodité.
Names Default To Here( 1 );
runExpr = Expr(
// Creates a clone data table for illustration;
dt << Subset( Output Table( "Clone Table" ), All rows );
);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
fmSLS = Fit Model(
Y( :weight ),
Effects( :age, :height, :age * :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
);
r = fmSLS << Report;
r[Button Box( 9 )] << Set Script( runExpr);
Lorsque vous cliquez sur Exécuter, comme le ferait un utilisateur, la table de clonage apparaît, mais la fenêtre en haut est le rapport Ajuster les moindres carrés produit par la commande Exécuter.Je voudrais empêcher ce rapport de paraître.
À cette fin:
- J'ai essayé d'utiliser Throw () et Stop () dans runExpr, mais en vain.
- J'ai envisagé d'utiliser une fenêtre modale, mais j'ai besoin de la fonctionnalité Macro dans la fenêtre Ajuster le modèle et je ne vois pas comment créer une fenêtre modale.
- La seule façon dont je peux penser, même pour traiter le rapport Fit Least Squares, est d'ajouter une boucle de synchronisation au script, comme illustré ci-dessous. Mais cela comporte de nombreux dangers.Il n'y a aucun moyen de savoir combien de temps il faudra pour que runExpr se termine, et si l'utilisateur décide de ne pas cliquer sur Exécuter, le script continue de s'exécuter jusqu'à ce qu'il expire.
Toute pensée ou aide serait grandement appréciée!
Names Default To Here( 1 );
runExpr = Expr(
// Creates a clone data table for illustration;
dt << Subset( Output Table( "Clone Table" ), All rows );
fm_Flag = 1
);
fm_Flag = 0; // Sets flag for timing
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
fmSLS = Fit Model(
Y( :weight ),
Effects( :age, :height, :age * :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
);
r = fmSLS << Report;
r[Button Box( 9 )] << Set Script( runExpr; fm_Flag = 1 );
For( i = 1, i <= 100, i++,
If(fm_Flag < 1, Wait(0.5), windowsopen = Get Window List(); windowsopen[nItems(windowsopen)] << Close Window; Stop() )
);
ScriptingRe: Comment empêcher Run in Fit Model de produire un rapport?Je ne vois pas comment modifier le script que vous attachez à la zone du bouton Exécuter, mais vous pouvez trouver et fermer la fenêtre par la suite. Voir cette illustration:
fm = Current data Table() << Fit Model(
Y( :weight ),
Effects( :age, :sex, :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Leverage" )
);
fls = fm << Run;
window = Get Window List();
For( w = 1, w <= N Items( window ), w++,
If( Contains( window[w] << Get Window Title, "Fit Least Squares" ),
window[w] << Close Window;
Break();
);
);
Re: Comment empêcher Run in Fit Model de produire un rapport?Mark, merci, mais je ne pense pas que cela fonctionne pour ma situation.L'utilisateur doit remplir la fenêtre Ajuster le modèle.Si j'ajoute votre composant de fenêtre à mon script, il s'exécute avant que l'utilisateur n'ait rempli la fenêtre Ajuster le modèle.Ainsi, lorsque l'utilisateur clique sur Exécuter, cette partie du script est "disparue".Veuillez consulter le deuxième script de mon article pour voir ma solution de contournement très inélégante dans le sens que vous proposez.Il faut tenir compte du temps nécessaire à l'utilisateur pour remplir Fit Model, puis du temps nécessaire pour exécuter le script dans le bouton Exécuter.
Re: Comment empêcher Run in Fit Model de produire un rapport?Vous avez raison. J'ai essayé de modifier mon illustration mais le script qui est attaché à la boîte de boutons est évalué avant la création du rapport Ajuster les moindres carrés, il est donc inefficace.
Names Default to Here( 1 );
run expr = Expr(
// desired report
personality = Report( fm )[ComboBox(1)] << Get Selected;
Show( personality );
// undesired report
window = Get Window List();
For( w = 1, w <= N Items( window ), w++,
If( Contains( window[w] << Get Window Title, "Fit Least Squares" ),
window[w] << Close Window;
Break();
);
);
);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
fm = dt << Fit Model(
Y( :weight ),
Effects( :age, :sex, :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" )
);
Report( fm )[ButtonBox(9)] << Set Script( run expr );
// nothing after this point
Re: Comment empêcher Run in Fit Model de produire un rapport?À droite, il semble que le script dans la boîte de boutons soit exécuté avant que le comportement intégré du bouton Exécuter ne soit exécuté.
Ce petit problème est épineux! Il doit y avoir un moyen de suspendre l'exécution du script jusqu'à ce qu'une action (comme appuyer sur le bouton Exécuter) se produise. Ou, pour empêcher l'exécution du comportement intégré (mais comme je l'ai dit, placer Throw et Stop dans runExpr ne fonctionnait pas).
Merci d'avoir essayé de vous aider, Mark.Re: Comment empêcher Run in Fit Model de produire un rapport?De quelle partie de la boîte de dialogue Spécification du modèle avez-vous besoin? Je ne peux pas m'empêcher de penser que vous seriez mieux servi en remplaçant cette étape par une nouvelle fenêtre répondant exactement à vos besoins.Les exemples de cet article peuvent aider:
https://community.jmp.com/t5/JMPer-Cable/Prompting-for-columns-totally-modally/ba-p/189647
Si vous souhaitez utiliser la fenêtre de spécification du modèle, vous pouvez donner à l'utilisateur un nouveau bouton sur lequel cliquer:
Names Default to Here( 1 );
run expr = Expr(
// desired report
personality = Report( fm )[ComboBox(1)] << Get Selected;
Show( personality );
);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
fm = dt << Fit Model(
Y( :weight ),
Effects( :age, :sex, :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" )
);
// Show error if user clicks the wrong button
(fm << XPath("//ButtonBox[@title='Run']"))[1] << Set Script( New Window( "Use other bottom",
Text Box("Woops...\!n\!nPlease use the button at the bottom of the fit model dialog to launch this script.")));
// Button the user should click on
(fm << XPath("//OutlineBox"))[1] << Append(Button Box("Launch custom script", run expr; fm << Close Window;));<BR />
Re: Comment empêcher Run in Fit Model de produire un rapport?Pourquoi utilisez-vous la boîte de dialogue Ajuster le modèle si vous ne voulez pas de la plate-forme Ajuster les moindres carrés? Il peut y avoir une autre façon de réaliser ce que vous voulez