View Full Version : Systemanfrage 2 (Vorherige Anfrage beenden) im RPG abfangen ?
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 <code><code>PGMQ(*SAME)</code></code>.
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:
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
Hier ein Beispiel, das bei mir funktioniert, wenn man den WRKACTJOB mit "Vorherige Anfrage beenden" abbricht:
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.
... ich denke aber, dass direkt nach dem WRKACTJOB noch ein "GOTO ENDPGM" hingehört, sonst kommt die Meldung ja auch bei normaler Beendigung :-)
Die Anforderungsebene wird mit verlassen des Callstacks aufgehoben.
Unschön ist halt nur der Verbleib der Anforderungnachricht, die man dann immer noch per F9 abholen kann (außer bei "/* */").
Wird die nicht durch den RMVMSG entfernt?
Unschön ist halt nur der Verbleib der Anforderungnachricht, die man dann immer noch per F9 abholen kann (außer bei "/* */").
Ja, für die aktuelle Ebene.
Da du aber mit Return verlässt ist die Aufrufebene ja auch beendet und wird nicht dem nächsten der selben Ebene zugeordnet.