Comment « monitorer » les erreurs dans un CL ?

Marche à  suivre.

C’est si facile et tellement utile :


0001.00 PGM
0002.00
0003.00 DCL VAR(&MSG) TYPE(*CHAR) LEN(132)
0004.00 DCL VAR(&USER) TYPE(*CHAR) LEN(10)
0005.00
0006.00 MONIT_ERR: /* Monitoring des erreurs. */
0007.00 MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERREUR))0008.00 MONMSG MSGID(CPA0000) EXEC(GOTO CMDLBL(ERREUR))
0009.00 RTVJOBA USER(&USER)
... ...
0039.00ERREUR:/* Routine de traitement des erreurs. */
0040.00 CHGVAR VAR(&COD_RETOUR) VALUE(ER)
0041.00 RCVMSG MSGTYPE(*EXCP) RMV(*NO) MSG(&MSG)
0042.00 SNDMSG MSG('xxxCL : Traitement en erreur : ' +
0043.00 *CAT &MSG) TOUSR(&USER)
0044.00 MONMSG MSGID(CPF0000)
0045.00 SNDMSG MSG('xxxCL : Traitement en erreur : ' +
0046.00 *CAT &MSG) TOMSGQ(bib/msgq)
0047.00 MONMSG MSGID(CPF0000)

Notez que les commandes contenues dans la procédure de gestion des erreurs sont elles-mêmes monitorées afin d’éviter des appels récursifs de la procédure. (essayez de mettre du code erroné dedans pour voir)

 FACILE : il vous suffit de le copier dans chaque nouveau CL.

 UTILE : il vous permet d’être informé de tout plantage d’un CL, ou d’un programme en
dépendant, par la consultation des messages historisés dans la Message Queue.

Vous pouvez remanier comme bon vous semble ce code : mémorisation des plantages dans un fichier, impression d’une note d’information, envoi d’un Email (si c’est possible), dump du CL par la commande DMPCLPGM, affichage d’une fenêtre plus propre…

ATTENTION : Pour fonctionner, les lignes MONMSG génériques doivent être placées après les DCL, mais avant toute autre instruction exécutable.

Print Friendly, PDF & Email