Skriptausführung verzögern, bis eine Benutzereingabe erfolgt?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Der erste Teil meines Skripts fordert den Benutzer auf, die Variablen „Y“ und „By“ auszuwählen.Anschließend wird eine Datentabelle ausgegeben (nennen wir sie „dt2“).
Die zweite Hälfte des Codes basiert auf der Datentabelle (dt2), die generiert wurde, nachdem der Benutzer die Auswahl getroffen und auf „OK“ geklickt hat.
Das Problem, das ich habe, ist, dass der Code weiter ausgeführt wird, sobald das Fenster erscheint, und auf die Benutzereingabe wartet. Die zweite Hälfte des Codes verfügt also über keine zu verwendende Datentabelle (dt2) und gibt daher nichts aus. .
Ich habe gesehen, dass ich wait( ) verwenden kann, aber dies basiert auf einem Zeitwert (in Sekunden), und ich würde dies gerne skripten, damit es nicht fortgesetzt wird, bis die Benutzereingabe in der ersten Hälfte des Codes erfolgt (wodurch das Notwendige generiert wird). datierbar für die zweite Hälfte des auszuführenden Codes).
Vielen Dank im Voraus für jede Hilfe/Rat!!
Betreff: Skriptausführung verzögern, bis eine Benutzereingabe erfolgt?Es gibt mehrere Möglichkeiten, das nichtmodale Windows-Verhalten zu steuern:
1. Fügen Sie die Aufgaben, die Sie mit der Schaltfläche „OK“ ausführen möchten, in einen Ausdruck weiter oben im Code ein.Wenn der Benutzer dann auf „OK“ klickt, geben Sie einfach den Ausdruck ein.
ok_expr = Ausdruck (
Benutzereingabe = user_teb << Text bekommen () ;
drucken ( „Benutzer eingegeben“ || Benutzereingabe ) ;
meinwin << Fenster schließen ;
) ;
Benutzereingabe = „“ ;
meinwin = neues Fenster ( „Benutzereingaben abrufen“ ,
hlistbox (
Textfeld ( „Geben Sie einen Text ein:“ ) ,
user_teb = Textbearbeitungsfeld () ,
) ,
Knopffeld ( "OK" , ok_expr ) ,
Knopffeld ( "Stornieren" , meinwin << Fenster schließen ; ) ,
) ;
2. Platzieren Sie die OK-Aufgaben in einer separaten JSL-Datei und verwenden Sie die include()-Anweisung, um die gewünschten Befehle auszuführen:
// ok_commands.jsl
Benutzereingabe = user_teb << Text bekommen () ;
drucken ( „Benutzer eingegeben“ || Benutzereingabe ) ;
meinwin << Fenster schließen ;
// Hier sind die Dialogfeldbefehle, d na separate Datei
Benutzereingabe = „“ ;
meinwin = neues Fenster ( „Benutzereingaben abrufen“ ,
hlistbox (
Textfeld ( „Geben Sie einen Text ein:“ ) ,
user_teb = Textbearbeitungsfeld () ,
) ,
Knopffeld ( "OK" , enthalten ( „ok_commands.jsl“ );) ,
Knopffeld ( "Stornieren" , meinwin << Fenster schließen ; ) ,
) ;
Betreff: Skriptausführung verzögern, bis eine Benutzereingabe erfolgt?Wenn die einzufügenden Daten aus JMP stammen oder von JMP als Tabelle geöffnet werden können, könnte das Einfügen in die Datentabelle auch per Skript erfolgen.
Aber wenn in Ihrem Szenario eine manuelle Interaktion unvermeidlich ist, weil eine subjektive Entscheidung getroffen werden muss, würde ich ein nichtmodales Fenster mit einer Schaltfläche „Start“ und einer Schaltfläche „Fertig stellen“ (oder ähnlich) verwenden, das die Aktionen in 1 und 1 konkurriert 2 bzw.
Betreff: Skriptausführung verzögern, bis eine Benutzereingabe erfolgt?Danke für deine Antwort.
Tatsächlich war dies sehr nützlich für ein anderes Problem, das ich habe, und das habe ich auch vor
Probieren Sie Ihre Lösung aus, um Daten vom Benutzer abzurufen, um das Problem zu lösen.
In diesem speziellen Fall muss der Benutzer höchstwahrscheinlich eine Menge einfügen
Daten und die Idee ist, dass er sie in das DT einfügen sollte.
Derzeit führt meine Lösung die Skripte in zwei Teilen aus:
1. Alle erforderlichen Aktionen, bevor der Benutzer zum Eingeben von Daten aufgefordert wird
(Daten werden in das DT eingefügt)
2. Alle nach dem Einfügen der Daten erforderlichen Aktionen.
Aber wir verstehen beide, dass dies keine Arbeitsweise ist, und ich kann den Benutzer auch nicht darum bitten
Alle Daten manuell einzugeben ist zu zeitaufwändig und ineffizient.
Haben Sie weitere Ideen?
Danke,
Mischa
Betreff: Skriptausführung verzögern, bis eine Benutzereingabe erfolgt?Ich glaube nicht, dass man einen modalen Dialog umgehen kann. Sie können den Benutzer jedoch die Grenzwerte im modalen Fenster eingeben lassen, die beim Klicken auf „OK“ in die Datentabelle übertragen werden.
Hier ist ein Beispiel:
dt = Neuer Tisch ( "prüfen" , Neue Spalte ( "Daten" , numerisch ) ) ;
Neues Fenster ( „Grenzen setzen“ ,
<< modal ,
Tischbox ( String-Col-Box ( „“ , { „Durchschnitt“ , „LCL“ , „UCL“ } ) , ncb = Bearbeitungsfeld für die Nummernspalte ( „Grenzen“ , [ . , . , . ] ) ) ,
Button-Box ( "OK" ,
L = ncb << erhalten ;
Bewertung (
Evaluierungsexpr (
Spalte ( dt , "Daten" ) << Eigenschaft festlegen ( „Kontrollgrenzen“ , { Xbar ( Durchschn ( Ausdruck ( L [ 1 ] ) ) , LCL ( Ausdruck ( L [ 2 ] ) ) , UCL ( Ausdruck ( L [ 3 ] )) )})))
)
) ;
// Überprüfen Sie, ob es funktioniert hat
Zeigen ( L ) ;
dt : Daten << Holen Sie sich Eigentum ( „Kontrollgrenzen“ ) ;
Betreff: Skriptausführung verzögern, bis eine Benutzereingabe erfolgt?Ich mache etwas Ähnliches und leide unter dem gleichen Problem.
Das modale Fenster war auch meine erste Lösung. Leider funktioniert es nicht.
Wenn das neue Fenster geöffnet wird, verhindert es den Zugriff auf die Datentabellen (es bleibt oben):

Gibt es eine Möglichkeit, die Standardeinstellung oben im modalen Fenster zu umgehen?
Oder eine bessere Idee zur Umsetzung?
Vielen Dank im Voraus.
Betreff: Skriptausführung verzögern, bis eine Benutzereingabe erfolgt?Wenn Sie ein neues Fenster zum Sammeln von Benutzereingaben verwenden, machen Sie es zu einem modalen Dialogfeld mit << modal
meinwin = neues Fenster ( „Beispiel für ein modales Dialogfeld“ , << modal ,
Textfeld ( „Dies ist ein modales Dialogfeld“ ) ,
Knopffeld ( "OK" , which_button = "OK" ) ,
Knopffeld ( "Stornieren" , which_button = "Stornieren" ) ,
) ;
drucken ( „Benutzer hat geklickt“ || which_button ) ;