jeudi 14 août 2008

Remontée d'exception en CL

Je voulais notifier au pgm appelant la survenue d'une erreur dans le pgm appelé.
Voici comment faire :
1. Créer un fichier de messages: CRTMSGF mabib/messages text('Mes messages d''erreur')
2. Gérer les messages de ce fichier avec WRKMSGD *first mabib/messages
3. Créer un ou plusieurs messages avec <F6> et:
3a. MSGID := un identifiant de message (genre MOInnnn) ;
3b. MSG := un texte succint ;
3c. GRAVITY := une gravité.
... à répéter autant que nécessaire
4. aller ensuite dans le source du pgm appelé
5. à l'emplacement où l'on désire déclencher l'exception, glisser SNDPGMMSG MSGID(MOInnnn) MSGF(mabib/messages) msgtype(*escape)
6. dans le pgm appelant, glisser juste après l'appel du pgm appelé MONMSG MOInnnn EXEC(GOTO label)

rmq: le nnnn représente évidemment un nombre. dans le msgf, nnnn prend des valeurs significatives ; dans le monmsg, ce peut être un message en particulier ou un message générique (ie MOI0000)
nota: dans le pgm appelé, l'exécution s'arrête avec le sndpgmmsg grace au *ESCAPE. Je n'ai pas testé d'autres valeurs que *INFO et *DIAG (mais mon monmsg dans l'appelant n'était pas déclenché)

Aucun commentaire: