Interception de toutes les erreurs en clp MONMSG MSGID(CPF0000)

Ce code que vous pouvez rajouter à un de vos programmes permet de sortir proprement en arrêtant le programme en cours d'exécution
Attention !
Ce n'est pas parce qu'un programme ne plante pas qu'il est juste !
1) Partie à rajouter à la fin des déclaratives
DCL VAR(&MSGID) TYPE(*CHAR) LEN(7)
DCL VAR(&MSG) TYPE(*CHAR) LEN(200)
DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(200)
DCL VAR(&MSGF) TYPE(*CHAR) LEN(10)
DCL VAR(&MSGL) TYPE(*CHAR) LEN(10)
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))
2) Partie à rajouter à la fin du programme
GOTO END
ERROR:
MSGD: RCVMSG MSGTYPE(*DIAG) MSG(&MSG) MSGDTA(&MSGDTA) +
MSGID(&MSGID) MSGF(&MSGF) MSGFLIB(&MSGL)
IF COND(&MSGID *NE ' ') THEN(DO)
SNDPGMMSG MSGID(&MSGID) MSGF(&MSGL/&MSGF) +
MSGDTA(&MSGDTA) MSGTYPE(*DIAG)
MONMSG MSGID(CPF0000)
GOTO CMDLBL(MSGD)
ENDDO
RCVMSG MSGTYPE(*EXCP) MSG(&MSG) MSGDTA(&MSGDTA) +
MSGID(&MSGID) MSGF(&MSGF) MSGFLIB(&MSGL)
IF COND(&MSGID *NE ' ') THEN(DO)
SNDPGMMSG MSGID(&MSGID) MSGF(&MSGL/&MSGF) +
MSGDTA(&MSGDTA) MSGTYPE(*ESCAPE))
MONMSG MSGID(CPF0000)
ENDDO
END:
ENDPGM

PLB

...