Wie kann verhindert werden, dass Run in Fit Model einen Bericht erstellt?Ich schreibe ein Skript, das Folgendes tut:
- Öffnet ein Fenster "Modell anpassen".
- Ermöglicht dem Benutzer das Auffüllen mithilfe der Makros und anderer Funktionen im Fenster "Modell anpassen".
- Ermöglicht dem Benutzer das Klicken auf Ausführen. Zu diesem Zeitpunkt wird eine möglicherweise zeitintensive Berechnung durchgeführt und ein Bericht erstellt.
Die Berechnung, die ausgeführt wird, wenn auf Ausführen geklickt wird, wird von einem Skript erstellt, das auf der Schaltfläche Ausführen gespeichert ist.Dieses Skript erstellt einen Bericht, den der Benutzer erstellt sollte sehen.Da das Skript jedoch zur Schaltfläche "Ausführen" hinzugefügt wird, wird der gewünschte Bericht angezeigt, gefolgt von dem Bericht "Least Squares anpassen", den Run selbst erstellt.Der Bericht "Least Squares anpassen" ist für den Benutzer bedeutungslos.
Das folgende Skript veranschaulicht das Problem. In diesem Skript erstellt der Ausdruck in der Schaltfläche "Ausführen", "runExpr", einfach eine Klondatentabelle. Dies soll die Darstellung vereinfachen.Im eigentlichen Skript führt dieser Ausdruck (runExpr) eine Vielzahl von Analysen basierend auf den im Fenster "Modell anpassen" eingegebenen Effekten durch. Außerdem füllt der Benutzer im eigentlichen Skript das Fenster "Modell anpassen" interaktiv. Der Einfachheit halber habe ich das Fenster "Modell anpassen" im folgenden Skript ausgefüllt.
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);
Wenn Sie wie ein Benutzer auf Ausführen klicken, wird die Klontabelle angezeigt. Das obere Fenster enthält jedoch den vom Befehl Ausführen erstellten Bericht "Kleinste Quadrate anpassen".Ich möchte verhindern, dass dieser Bericht angezeigt wird.
Zu diesem Zweck:
- Ich habe versucht, Throw () und Stop () in runExpr zu verwenden, aber ohne Erfolg.
- Ich habe überlegt, ein modales Fenster zu verwenden, benötige jedoch die Makrofunktionalität im Fenster "Modell anpassen" und kann nicht sehen, wie ein modales Fenster hilfreich ist.
- Die einzige Möglichkeit, den Fit Least Squares-Bericht überhaupt anzusprechen, besteht darin, dem Skript eine Zeitschleife hinzuzufügen, wie unten dargestellt. Aber das ist voller Gefahren.Es gibt keine Möglichkeit zu wissen, wie lange es dauern wird, bis runExpr abgeschlossen ist. Wenn der Benutzer nicht auf Ausführen klickt, wird das Skript nur so lange ausgeführt, bis das Zeitlimit überschritten wird.
Alle Gedanken oder Hilfe wäre sehr dankbar!
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() )
);
SkriptingBetreff: Wie kann verhindert werden, dass Run in Fit Model einen Bericht erstellt?Ich sehe nicht, wie Sie das Skript ändern können, das Sie an die Schaltfläche Ausführen anhängen, aber Sie können das Fenster danach finden und schließen. Siehe diese Abbildung:
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();
);
);
Betreff: Wie kann verhindert werden, dass Run in Fit Model einen Bericht erstellt?Mark, danke, aber ich glaube nicht, dass dies für meine Situation funktioniert.Der Benutzer muss das Fenster Modell anpassen ausfüllen.Wenn ich Ihre Fensterkomponente zu meinem Skript hinzufüge, wird sie ausgeführt, bevor der Benutzer das Fenster "Modell anpassen" ausgefüllt hat.Wenn der Benutzer auf Ausführen klickt, ist dieser Teil des Skripts "weg".Bitte lesen Sie das zweite Skript in meinem Beitrag, um meine sehr unelegante Problemumgehung in der von Ihnen vorgeschlagenen Richtung zu sehen.Man muss die Zeit berücksichtigen, die der Benutzer benötigt, um das Fit-Modell zu füllen, und dann die Zeit, die benötigt wird, um das Skript über die Schaltfläche Ausführen auszuführen.
Betreff: Wie kann verhindert werden, dass Run in Fit Model einen Bericht erstellt?Du hast Recht. Ich habe versucht, meine Abbildung zu ändern, aber das an das Schaltflächenfeld angehängte Skript wird ausgewertet, bevor der Bericht "Kleinste Quadrate anpassen" erstellt wird. Daher ist es unwirksam.
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
Betreff: Wie kann verhindert werden, dass Run in Fit Model einen Bericht erstellt?Richtig, es scheint, dass das Skript im Schaltflächenfeld ausgeführt wird, bevor das integrierte Verhalten der Schaltfläche Ausführen ausgeführt wird.
Dieses kleine Problem ist ärgerlich! Es muss eine Möglichkeit geben, die Ausführung des Skripts anzuhalten, bis eine Aktion (wie das Drücken der Schaltfläche Ausführen) ausgeführt wird. Oder um die Ausführung des integrierten Verhaltens zu verhindern (aber wie gesagt, das Platzieren von Throw and Stop in runExpr hat nicht funktioniert).
Danke, dass du versucht hast zu helfen, Mark.Betreff: Wie kann verhindert werden, dass Run in Fit Model einen Bericht erstellt?Wie viel des Dialogfelds Modellspezifikation benötigen Sie? Ich kann nicht anders, als zu glauben, dass Sie diesen Schritt besser durch ein neues Fenster ersetzen sollten, das genau Ihren Anforderungen entspricht.Beispiele in diesem Beitrag könnten helfen:
https://community.jmp.com/t5/JMPer-Cable/Prompting-for-columns-totally-modally/ba-p/189647
Wenn Sie das Fenster Modellspezifikation verwenden möchten, können Sie dem Benutzer eine neue Schaltfläche zum Klicken geben:
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 />
Betreff: Wie kann verhindert werden, dass Run in Fit Model einen Bericht erstellt?Warum verwenden Sie das Dialogfeld "Modell anpassen", wenn Sie die Plattform "Least Squares anpassen" nicht möchten? Es könnte einen anderen Weg geben, um das zu erreichen, was Sie wollen.