-
Systemanfrage 2 (Vorherige Anfrage beenden) im RPG abfangen ?
Hallo,
habe ich eine Möglichkeit im RPG oder CL, dass ich mitbekomme wenn jemand Systemanfage 2 macht. Ich dachte er geht zumindest in die *PSSR, macht er aber nicht.
Wenn jemand die Sitzung schließt oder die Verbindung (Scanner) verloren geht, habe ich das inzwischen hinbekommen, dass er mir in die *PSSR läuft aber Systemanfrage 2 noch nicht.
Viele Grüße Harkne
-
Probier's mal so:
PHP-Code:
PGM
DCL VAR(&KEY) TYPE(*CHAR) LEN(4)
MONMSG MSGID(CPF1907) EXEC(GOTO CMDLBL(ENDRQS))
SNDPGMMSG MSG('-') TOPGMQ(*EXT) MSGTYPE(*RQS)
RCVMSG KEYVAR(&KEY) PGMQ(*EXT) MSGTYPE(*RQS) RMV(*NO)
/* Befehle */
ENDRQS: RMVMSG MSGKEY(&KEY)
ENDPGM
-
Sorry, ich weiß nicht warum er mir in diesem Editor nicht mehr das Icon für Quellcode anzeigt, ich hoffe die nachfolgende Quelle kann man lesen.
@Pikachu
Dein Beispiel verstehe ich nicht. Was soll hier die Systemabfrage 2 abfangen ?
Ich habe bereits im CL nach dem Aufruf von meinem RPG-Programm einen MONMSG MSID(CPF0000) der sollte dann auch den von dir angegebenen CPF1907 beinhalten. Es interessiert das CL aber nicht und bricht direkt ab. Er bringt noch als Meldung das MCH4429 nicht überwacht ist. Den habe ich auch bereits versucht abzufangen. Geht auch nicht. Monitor im RPG um den Read auf die Bildschirmdatei. Nix.
-
Um den CPF1907 abzufangen, mußt du eine neue Anfrageebene öffnen. Dies geht mit SNDPGMMSG und RCVMSG (jeweils mit *RQS), siehe Beispiel. An der Stelle wo /* Befehle */ steht, muß du dein RPG-Programm aufrufen.
-
Also im Moment ist es so, dass er mir zwar nicht mehr abstürzt (da ich nach dem CALL auf das RPG noch den CPF0000 hat) aber an den ENDRQS springt er mir nicht. Also greift auch irgendwie die CPF1907 nicht, obwohl ich sie im JOBLOG sehe. Ich hab dann mal den CPF0000 zum ENDRQS springen lassen. Allerdings steht im &KEY auch nichts vernünftiges drin.
So sieht der Quellcode im Moment aus
PHP-Code:
PGM PARM(&PI@RESULT &PI@PRCI)
DCL VAR(&PI@RESULT) TYPE(*CHAR) LEN(1) DCL VAR(&PI@PRCI) TYPE(*CHAR) LEN(3) DCL VAR(&KEY) TYPE(*CHAR) LEN(4)
SNDPGMMSG MSG('-') TOPGMQ(*EXT) MSGTYPE(*RQS) RCVMSG KEYVAR(&KEY) PGMQ(*EXT) MSGTYPE(*RQS) RMV(*NO) STRCMTCTL LCKLVL(*CHG) CMTSCOPE(*JOB) MONMSG MSGID(CPF8351) CHGJOB DEVRCYACN(*MSG) CALL PGM(PBS30R) PARM(&PI@RESULT &PI@PRCI) MONMSG MSGID(CPF1907) EXEC(GOTO CMDLBL(ENDRQS)) MONMSG MSGID(CPF0000) CHGJOB DEVRCYACN(*ENDJOB) RCLRSC ENDCMTCTL MONMSG MSGID(CPF8350) ENDRQS: RMVMSG MSGKEY(&KEY) ENDPGM: ENDPGM
-
Schau dir das obige Beispiel genau an.
CPF1907 ist ein Spezialfall und muss daher als zentrale MONMSG, also als erste Anweisung überhaupt, definiert sein.
Ein MONMSG nach einem Aufruf fängt nur Nachrichten dieses Aufrufes ab.
Der CPF1907 wird aber nicht vom Programm sondern vom Befehlsprozessor gesendet.
-
-
In deiner Quelle steht da aber kein MONMSG vor dem SNDPGMMSG!
Also was "hattest du schon"?
-
Ich habe bei mir noch mal nachgesehen, als PGMQ muss *SAME, also die eigene, gewählt werden, da sonst die Abbruchnachricht eben an *EXT gesendet wird:
SNDPGMMSG MSG('/* */') TOPGMQ(*SAME) MSGTYPE(*RQS)
RCVMSG PGMQ(*SAME) MSGTYPE(*RQS) RMV(*NO)
Ich wähle den Kommentar, da sonst nach Programmende der Text per F9 abgefragt werden kann da es sich ja um eine *RQS-Nachricht handelt.
Zur Überprüfung der Anforderungsebene kannst du dir den Callstack anzeigen.
Die Anforderungsebenen werden durchnummeriert.
-
Ich hatte am Anfang das so gemacht wie es ob als Beispiel steht. Da es nicht funktioniert hat, habe ich versucht den MONMSG hinter das RPG zu machen, da ja dort die Systemanfrage 2 ausgeführt wird. Er macht das noch nicht mal mit CPF0000 sowohl hinter dem CALL als auch ganz am Anfang. Ich würde die Quelle gerne etwas öfter posten aber das ist sehr viel arbeit, weil er mir das nicht richtig ausrichtet auch wenn ich ein PHP /PHP drum rum schnalle.
Momentan habe ich zu Beginn der Quelle nochmal den CPF1907 probiert. Macht er nicht. Dann habe ich jetzt am Anfang statt CPF1907 den CPF0000. Das macht er. Allerdings habe ich gesagt dass er nochmal das gleiche RPG im Fehlerfall aufrufen soll. Das macht er nicht mehr.
-
Hallo nochmal an alle
Vielen Dank für die Hilfe.
Also ich hab das jetzt so geändert wie Herr Fuerchau beschrieben hat. Will aber nicht die Hand dafür ins Feuer legen, dass es vorher nicht auch schon ging. Die CPF1907 bekomme ich nach wie vor nicht abgefangen aber die CPF0000.
Viele Grüße Harkne
-
Mach den MONMSG(CPF1907) am Anfang, korrigiere den SND/RCVPGMMSG auf PGMQ(*SAME) .
Prüfe während des RPG-Aufrufes den Callstack ob die Aufrufebene eine Nummer bekommen hat.
Bei mir läuft das schon so seit V2R1.
Similar Threads
-
By E305GL in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 24-09-15, 11:43
-
By karela66 in forum NEWSboard Programmierung
Antworten: 11
Letzter Beitrag: 13-08-15, 09:26
-
By RB in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 18-07-02, 12:59
-
By hs in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 10-06-02, 08:54
-
By hs in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 12-12-01, 09:43
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks