View Full Version : F12-Taste nach verlassen von QUERY
Ich rufe aus einem Programm mit RUNQRY eine Queryverarbeitung auf. Dabei kann der Benutzer die Selektion der Abfrage verändern. Ich möchte danach aber wissen ob der User die F12- oder F3-Taste gedrückt hat, um dann eine Bildschirmmaske zurück zugehen oder das Programm zuverlassen.
Ist dies irgendwie möglich??
Soweit ich weiß nicht. F3/F12-Unterscheidung gibt es nur bei CMD-Aufrufen mit Prompt.
RUNQRY selbst wird ja nicht gepromptet.
Nun hängt es aber doch von der Art des Queries ab.
Ich denke es wird eine Datei oder ein Spool erstellt (nur Satzanzeige sollte eigentlich egal sein).
Dann kannst du ja den Inhalt der Datei (RTVMBRD) oder die Existenz des Spools (CHGSPLFA) prüfen.
Es wird eine Datei erstellt.
Ob diese da ist weis ich schon.
Mein Problem ist aber das ich RUNQRY aus der Bildschirmmaske 1 mache und wenn der Benutzer F12 / F3 drückt soll dann diese Maske verlassen werden. Das Query aber ausgeführt wurde soll die Anzeige von Maske2 stattfinden in der die Ergebnisse der Abfrage angezeigt werden.
Ich glaube aber ich habe einen Ansatz um es herauszufinden. Wenn das Query nicht ausgeführt wurde ist die Datei nicht vorhanden und sollte es ausgeführt worden sein, auch wenn keine gültigen Daten selektiert wurden, existieren die Datei.
Ich gehe davon aus, du hast z.B. ein CL geschrieben und aus diesem wird ein RUNQRY gepromptet. Der Anwender drückt ENTER, das Query wird ausgeführt. Der Anwender drückt F3/F12 das CLP geht auf MSGW. Also einfach mit MONMSG das RUNQRY abfangen.
Wenn ich falsch liege, dann Entschuldigung für die falsche Antwort.
Gruß
DVE
Es ist kein CL sondern ein RPGLE aus dem ich den RUNQRY mache und das Programm läuft auch nicht auf Fehler wenn der Anwender F3/F12 drückt.
Ich habe das Problem aber jetzt so gelöst:
Die Datei die vom RUNQRY erstellt wird wird in die QTEMP gestellt(vorher wird ein möglich noch vorhandene Datei gekillt(mit Fehlerabfangen wenn nicht da)).
Ist diese nach den RUNQRY nicht vorhanden so heißt das für mich der Anwender hat F3 / F12 gedrückt.
Nur für mich zur Info. IM RPGLE rufst du das RUNQRY mit einem CALL "irgendwas" auf ? Wenn ja, hast du diesen CALL über Bezugszahlen abgefangen ? Wenn ja, gehen die Bezugszahl auf *ON wenn du F3/F12 drückst.
Gruß
DVE
Alls erstes habe ich mir eine allgemeine Prozedur geschaffen mit der ich alle CL-Aufrufe über QCMDEXC(....) aufrufen kann. Weiterhin habe ich eine Prozedur die mir in einer Befehlszeile Ersatzzeichen gegen was auch immer austauscht.
Die Prozedur zum Aufruf von CL-Befehlen wird z.B. so aufgerufen
docmd('DSPMSG');
Das ist der Befehl um DSPMSG auszuführen.
Oder besseres Beispiel
D cCmd1 C 'DLTF FILE({1}/{2})'
D vVals S like(typVals) DIM(%elem(typVals)) inz
D vCmd S 255A inz
// DLTF
clear vVals;
vVals(1) = cTempLib;
vVals(2) = cQryFile;
vCmd = sFillTextVar(cCmd1 :vVals);
docmd(vCmd :true);
Dabei ist cCmd1 die Konstante mit Befehl.
vVals ist die Struktur in der die zuersetzenden Teile sind.
cTempLib = QTEMP(als Konstante)
cQryFile = Ist das File
sFillTextVar = Prozedur in der die Ersatzzeichen({1} / {2}) gegen Werte ausgetauscht werden.
docmd = Prozedur in der ein CL-Befehl ausgeführt wird