-
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 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.
-
Hier ein Beispiel, das bei mir funktioniert, wenn man den WRKACTJOB mit "Vorherige Anfrage beenden" abbricht:
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) WRKACTJOB ENDRQS: SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) + MSGDTA('Anforderungsebene beendet') + TOUSR(*REQUESTER) RMVMSG MSGKEY(&KEY) ENDPGM
-
 Zitat von Pikachu
Hier ein Beispiel, das bei mir funktioniert, wenn man den WRKACTJOB mit "Vorherige Anfrage beenden" abbricht:
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) WRKACTJOB ENDRQS: SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) + MSGDTA('Anforderungsebene beendet') + TOUSR(*REQUESTER) RMVMSG MSGKEY(&KEY) ENDPGM
... ich denke aber, dass direkt nach dem WRKACTJOB noch ein "GOTO ENDPGM" hingehört,
sonst kommt die Meldung ja auch bei normaler Beendigung :-)
Aber ansonsten richtig - so geht's tatsächlich, die Sysabf-2 abzufangen.
-
Der RMVMSG muß aber erreicht werden, damit die Anforderungsebene tatsächlich beendet wird.
 Zitat von hel400
... ich denke aber, dass direkt nach dem WRKACTJOB noch ein "GOTO ENDPGM" hingehört, sonst kommt die Meldung ja auch bei normaler Beendigung :-)
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