Come impedire a Run in Fit Model di produrre un report?Sto scrivendo uno script che fa quanto segue:
- Apre una finestra Adatta modello,
- Consente all'utente di popolarlo utilizzando le macro e altre funzionalità nella finestra Adatta modello,
- Consente all'utente di fare clic su Esegui, a quel punto viene eseguito un calcolo che potrebbe richiedere molto tempo e viene prodotto un rapporto.
Il calcolo che viene eseguito quando si fa clic su Esegui viene prodotto da uno script memorizzato nel pulsante Esegui.Questo script produce un report, che è ciò che l'utente dovrebbero vedere.Tuttavia, poiché lo script viene aggiunto al pulsante Esegui, viene visualizzato il report desiderato, seguito dal report Adatta ai minimi quadrati che Run produce da solo.Il report Fit Least Squares non ha significato per l'utente.
Lo script seguente illustra il problema. In quello script, l'espressione nel pulsante Esegui, "runExpr", crea semplicemente una tabella dati clone; questo per semplificare l'illustrazione.Nello script effettivo, quell'espressione (runExpr) esegue molte analisi in base agli effetti immessi nella finestra Adatta modello. Inoltre, nello script attuale, l'utente popola la finestra Adatta modello in modo interattivo; Ho popolato la finestra Adatta modello nello script seguente per comodità.
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);
Quando si fa clic su Esegui, come farebbe un utente, viene visualizzata la tabella di clonazione, ma la finestra in alto è il rapporto Adatta ai minimi quadrati prodotto dal comando Esegui.Vorrei impedire che tale rapporto appaia.
A quello scopo:
- Ho provato a usare Throw () e Stop () in runExpr, ma senza alcun risultato.
- Ho considerato l'utilizzo di una finestra modale, ma ho bisogno della funzionalità Macro nella finestra Adatta modello e non riesco a vedere come creare una finestra modale di aiuto.
- L'unico modo in cui riesco a pensare anche di affrontare il rapporto Fit Least Squares è aggiungere un ciclo di temporizzazione allo script come illustrato di seguito. Ma questo è irto di pericoli.Non c'è modo di sapere quanto tempo ci vorrà per il completamento di runExpr e se l'utente decide di non fare clic su Esegui, lo script continua a funzionare finché non scade.
Qualsiasi pensiero o aiuto sarebbe molto apprezzato!
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() )
);
ScriptingRi: Come impedire a Run in Fit Model di produrre un report?Non vedo come modificare lo script che alleghi alla casella del pulsante Esegui, ma puoi trovare e chiudere la finestra in seguito. Vedi questa illustrazione:
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();
);
);
Ri: Come impedire a Run in Fit Model di produrre un report?Mark, grazie, ma non credo che questo funzioni per la mia situazione.L'utente deve popolare la finestra Adatta modello.Se aggiungo il componente della finestra al mio script, viene eseguito prima che l'utente abbia popolato la finestra Adatta modello.Quindi, quando l'utente fa clic su Esegui, quella parte dello script è "sparita".Si prega di vedere il secondo script nel mio post per vedere la mia soluzione alternativa molto inelegante lungo le linee che stai proponendo.Si deve tenere conto del tempo che l'utente impiega per popolare Fit Model, e quindi del tempo necessario per eseguire lo script nel pulsante Esegui.
Ri: Come impedire a Run in Fit Model di produrre un report?Hai ragione. Ho provato a modificare la mia illustrazione, ma lo script allegato alla casella del pulsante viene valutato prima della creazione del report Adatta ai minimi quadrati, quindi è 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
Ri: Come impedire a Run in Fit Model di produrre un report?Bene, sembra che lo script nella casella del pulsante venga eseguito prima che venga eseguito il comportamento integrato del pulsante Esegui.
Questo piccolo problema è fastidioso! Ci deve essere un modo per trattenere l'esecuzione dello script fino a quando non si verifica un'azione (come premere il pulsante Esegui). Oppure, per impedire l'esecuzione del comportamento integrato (ma come ho detto, posizionare Throw e Stop in runExpr non ha funzionato).
Grazie per aver cercato di aiutare, Mark.Ri: Come impedire a Run in Fit Model di produrre un report?Di quanta parte della finestra di dialogo Specifica modello hai bisogno? Non posso fare a meno di pensare che saresti servito meglio sostituendo quel passaggio con una nuova finestra adatta alle tue esatte esigenze.Gli esempi in questo post potrebbero aiutare:
https://community.jmp.com/t5/JMPer-Cable/Prompting-for-columns-totally-modally/ba-p/189647
Se si desidera utilizzare la finestra Specifica modello, è possibile fornire all'utente un nuovo pulsante su cui fare clic:
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 />
Ri: Come impedire a Run in Fit Model di produrre un report?Perché stai utilizzando la finestra di dialogo Adatta modello se non desideri la piattaforma Adatta ai minimi quadrati? Potrebbe esserci un altro modo per ottenere ciò che desideri.