Wie wird ein modales Fenster angezeigt, in dem nach dem Öffnen ein Skript ausgeführt wird?Ich habe einige Zeit damit verbracht, ein JSL-Skript zu erstellen, das eine Benutzeroberfläche bietet, um einige Kriterien anzugeben und Daten basierend auf Benutzereingaben aus Amazon Redshift abzurufen. Das Skript funktioniert gut, hat aber ein kleines Problem.
Sobald der Benutzer in einem modalen Fenster auf die Abfrageschaltfläche klickt, wird die Variable isValid = 1 gesetzt und das Fenster schließt sich selbst, um das nachfolgende Skript auszuführen. Das Fenster erstellt dann ein Fortschrittsfenster, in dem eine Meldung wie „Daten werden abgerufen, bitte warten …“ angezeigt wird und die Abfrage beim Öffnen gestartet wird. Es sollte sich selbst schließen, nachdem die Abfrage abgeschlossen ist.
Das Problem ist, dass dieses Fortschrittsfenster auf meinem Bildschirm nicht zu sehen ist (nicht angezeigt wird). Es scheint, als würde JMP das Abfrageskript unmittelbar nach der Erstellung des Fensters ausführen, bevor es in den Vordergrund gebracht wird, obwohl die Abfrage erfolgreich ist.
Ich versuche, wait(0) einzufügen oder das Fenster vor dem Abfrageskript in den Vordergrund zu bringen, aber immer noch ohne Erfolg. Ich kann das Fortschrittsfenster nur sehen, wenn ich den Abfrageteil markiere.
Was kann ich tun, damit das Fenster angezeigt wird und gleichzeitig das Abfrageskript ausgeführt wird?
/*scripts before this line are not related to the issue, hence not included*/<BR /><BR /><BR />If(isValid == 1,
nwQuery = New Window( "Query", <<SHOW menu=""></SHOW> window show up if remark below lines */
mySQL = Eval Insert(tpSQL);
dbc = Create Database Connection("DSN=Amazon Redshift; UID=***; PSW=***");
dt = Execute SQL (dbc, mySQL, "Query");
close database connection(dbc);<BR /> // add wait(2); if remark above lines
bbOk << Close Window;
))),
bbOk << Click;
);
);Automatisierung und SkriptingBetreff: Wie wird ein modales Fenster angezeigt, in dem nach dem Öffnen ein Skript ausgeführt wird?Der Grund für die Verwendung eines modalen Fensters besteht darin, dass es in der Bildschirmmitte angezeigt wird und standardmäßig oben angezeigt werden soll. Ich habe es vorher mit einem normalen Fenster versucht und es wird auch nicht angezeigt.
Wie dem auch sei, ich werde weitere Informationen sammeln und die neue SQL-Abfragemethode erkunden. Ich werde Ihnen danach erneut antworten.
Wir freuen uns sehr über Ihre wertvolle Meinung und Ihren Vorschlag, danke!Betreff: Wie wird ein modales Fenster angezeigt, in dem nach dem Öffnen ein Skript ausgeführt wird?Sie müssen kein modales Fenster verwenden, um anzuzeigen, dass die Abfrage ausgeführt wird. Verwenden Sie ein normales Fenster, öffnen Sie es, bevor die Abfrage beginnt, und schließen Sie es, wenn die Abfrage beendet ist.
Names Default To Here(1);
isValid = 1;
If(isValid == 1,
nw = New Window("Query",
<<SHOW menu=""></SHOW>
<P>Außerdem schlage ich vor, dass Sie von „Datenbankverbindung erstellen, SQL ausführen, Datenbankverbindung schließen“ zu „Neue SQL-Abfrage“ wechseln, da dies die bevorzugte Methode für Abfragen ist (sie ist lästiger in der Anwendung, die Dokumentation ist unzureichend, aber trotzdem … es ist der Weg in die Zukunft).</P>
<P> </P>
<P>Bearbeiten:</P>
<P>Wenn Sie zu „New SQL Query()“ wechseln möchten, denken Sie daran, dabei „<< Run Foreground“ zu verwenden, wenn das Skript warten soll, bis die Abfrage abgeschlossen ist.</P>Betreff: Wie wird ein modales Fenster angezeigt, in dem nach dem Öffnen ein Skript ausgeführt wird?Nach einigem Herumprobieren habe ich einen Code gefunden, mit dem sich das Skript wie gewünscht verhält.
Wie von Ihnen vorgeschlagen, verwende ich ein normales Fenster, um anzuzeigen, dass die Abfrage ausgeführt wird + neue SQL-Abfragefunktion. Da das normale Fenster nicht in der Bildschirmmitte angezeigt wird, erstelle ich eine Funktion, um die Bildschirmgröße des Monitors zu erfassen (ich möchte dafür kein externes Power Shell-Skript aufrufen) und berechne dann, wo es angezeigt werden soll.
Es gibt jedoch einen kleinen Mangel: Die Leuchtbox dreht sich nicht, wenn eine Abfrage ausgeführt wird. Da können wir nichts machen, oder?
Names Default To Here(1);
GetWinConsoleSize = Function({},
nW = New Window("Get Win Console Size", << Window View("Invisible"), << Maximize Window(1));
theSize = nW << Get Window Size();
nW << Close Window();
Return(theSize);
);
drawWinProgress = Function({scrSize},
xSize = 250;
ySize = 50;
cpX = (scrSize[1]/2)-(xSize/2);
cpY = (scrSize[2]/2)-(ySize/2);
nW = New Window("Query Data", << Show Menu(0), << Show Toolbars(0), << Size(xSize,ySize), << Show Window (0),
Lineup Box(N Col(2), Busy Light(<< Automatic, size(40,40)), Text Box(" Pulling data, please wait ...")),
);
nW << Move Window(cpX, cpY);
nW << Show Window (1);
Return(nW);
);
nwMain = New Window("UI for user to input query criteria", << Modal, << Return Result,
// All display box goes here
H List Box(
Spacer Box(),
bbQuery = Button Box("Query",
isValid = 1;
bbQuery << Close Window;
,
isValid = 0;
bbCancel = Button Box("Cancel", Stop()),
),
);
If(isValid == 1,
wcSize = GetWinConsoleSize();
wProg = drawWinProgress(wcSize);
Wait(0);<BR /> // Generating SQL based on user criteria
dt = New SQL Query(Connection(strOdbcConnection), CustomSQL(mySQL)) << Run Foreground;
wProg << Close Window;
);
Betreff: Wie wird ein modales Fenster angezeigt, in dem nach dem Öffnen ein Skript ausgeführt wird?Sie könnten << „Im Hintergrund ausführen“ verwenden, aber dies würde viele verschiedene Probleme mit sich bringen, die Sie lösen müssten.
Betreff: Wie wird ein modales Fenster angezeigt, in dem nach dem Öffnen ein Skript ausgeführt wird?Außerdem schlage ich vor, dass Sie von „Datenbankverbindung erstellen, SQL ausführen, Datenbankverbindung schließen“ zu „Neue SQL-Abfrage“ wechseln, da dies die bevorzugte Methode für Abfragen ist (sie ist lästiger in der Anwendung, die Dokumentation ist unzureichend, aber trotzdem … es ist der Weg in die Zukunft).
Ich verwende „Datenbankverbindung erstellen/SQL ausführen/Datenbankverbindung schließen“, da ich häufig zahlreiche SQL-Abfragen ausführen muss. Das Erstellen der Datenbankverbindung ist mit Mehraufwand verbunden. Das mehrmalige Aufrufen von „Neue SQL-Abfrage“ kann langsamer sein.
Ich bin neugierig, warum Sie denken, dass die neue SQL-Abfrage der richtige Weg ist?
Betreff: Wie wird ein modales Fenster angezeigt, in dem nach dem Öffnen ein Skript ausgeführt wird?Mein Vorschlag basiert auf diesem Beitrag „Wie gehe ich bei der Datenbankabfrage vor?“ und dem Kommentar von Brian. Ich verwende New SQL Query() nicht wirklich gern, da es viele Probleme hat, aber ich verschiebe es trotzdem immer mehr meiner Skripte, um es zu verwenden und meine Skripte hoffentlich zukunftssicher zu machen.
Betreff: Wie wird ein modales Fenster angezeigt, in dem nach dem Öffnen ein Skript ausgeführt wird?Ich verwende ständig new sql query(), da die Funktionalität für die meisten meiner Skripte am besten ist und JMP dies als „richtigen Weg“ empfiehlt. Vielleicht wäre es sinnvoll, eine Liste mit Vor- und Nachteilen zu schreiben und diese als Hinweis für die zukünftige Entwicklung zu verwenden, z. B. auf die Wunschliste zu setzen. Warum nicht new sql query() für mehr als eine Anweisung erweitern?
Vielleicht können wir im Scripters Club darüber reden.
Beste grüße,
Betreff: Wie wird ein modales Fenster angezeigt, in dem nach dem Öffnen ein Skript ausgeführt wird?Wir haben mindestens einen Wunschzettel, die Dokumentation zu „neue SQL-Abfrage()“ zu verbessern , aber es gibt definitiv noch ein paar mehr, die benötigt würden. Es ist eine gute Idee, die Frustrationen und Probleme zu sammeln (ich glaube, ich habe dazu schon früher einige Beiträge verfasst).