Messagerie pgm à pgm -------------------- Un pgm peut envoyer des messages par la commande SNDPGMMSG Voila les différents types possibles: *INFO : information *INQ : question (sous entend une réponse) *COMP : achevement (j'ai bien réalisé ce que vous m'avez demandé) *DIAG : diagnostique (signal les raisons d'une erreur,en général suivit d'un message *ESCAPE) *ESCAPE : arret programme(erreur,provoque la fin du pgm qui envoit) *NOTIFY : avetissement(erreur,avec envoi de réponse si le pgm appelant ne contrôle pas ce message) *STATUS : état d'avancement *RQS : demande (d'une action,d'un traitement) |
Ces messages peuvent être envoyés à des files d'attente (*MSGQ) utilisateurs ou écrans. Ils peuvent être envoyés à des files d'attente pgm (PGMQ) A chaque travail est associé une file d'attente particulière,la JOBMSGQ composée comme suit: ............................. : *EXT : l'EXTERNAL (sert au dialogue : : avec le monde : : exterieur) :...........................: ------------------------------ : pgm1 : une pgmq par pgm actif : : (reflet de la liste :...........................: d'invocation) : pgm2 : : : chaque pgmq porte le nom du :...........................: pgm auquel elle est associée : pgmx : : : :...........................: |
Possibilités types de messages / file d'attente ! TYPE ! *EXT ! PGMQ ! MSGQ ! !----------!-----------!-------------!--------! ! *INFO ! oui ! oui ! oui ! ! *INQ ! oui ! NON ! oui ! ! *COMP ! oui ! oui ! oui ! ! *DIAG ! oui ! oui ! oui ! ! *ESCAPE ! NON ! oui ! NON ! ! *NOTIFY ! oui ! oui ! NON ! ! *STATUS ! oui ! oui ! NON ! ! *RQS ! oui ! oui ! oui ! ! ! ! ! ! !---------------------------------------------! Les messages de type *ESCAPE,*NOTIFY,*STATUS peuvent être "monitorés" Ils doivent donc être pré-définis (envoyés à partie d'une ID-message) |
Réaction d'un pgm suite à l'arrivée d'un message dans sa PGMQ. -------- --------*INFO<------ TYPE ? ------>*ESCAPE-----!MONMSG! ! *DIAG *NOTIFY !niveau!--OUI-> EXEC() ! *COMP *STATUS ! cde? ! ! -------- v ! -------------- ! NON ! retour au ! -------- ! pgm ! !MONMSG! ! emetteur ! !niveau!--OUI-> EXEC() !------------! ! pgm? ! ^ -------- !<-------------------------------*STATUS--! ! NON ! ! ! ! ----------------- !---- TYPE ? ! !le système envoi ! ! !<-----------!la reponse par !---*NOTIFY--! ! *ESCAPE !dft du message ! ! ----------------- ! ! v |
Message de type *ESCAPE non monitoré ! v (Retour à l'appellant impossible, --------- celui-ci a été désactivé lors de ! MONMSG! l'envoi du message) !CPF9999! !niveau !--OUI-> EXEC() ! pgm? ! --------- ! NON ! -------------- ! CPA0701 ! ! à l'écran ! ....................... ! ou à ! : Arret anormal du : <--- C -------------- ! l'opérateur! : pgm : -------------- : : / ! : Envoi d'un message : / I : d'erreur à : ............ R ................... : l'appellant. : : ré-essai : :Commande suivante: :.....................: :..........: :.................: |
Les messages de type *ESCAPE previenent d'une erreur irremediable. Les messages type *NOTIFY previenent d'une erreur grave *STATUS previenent de ce que le pgm est en train de faire en monitorant ces messages vous empechez le pgm appellé de continuer en ne monitorant pas vous laissez faire. Tres peu de pgms système utilisent les messages de type *NOTIFY et *STATUS (sauf *STATUS vers l'*EXTERNAL) Mais pensez-y quand même avec les MONMSG CPF0000, surtout de niveau pgm. ATTENTION: Les messages de *STATUS ne restent jamais dans la PGMQ,donc ne sont jamais notés dans la LOG.Cela peut rendre complexe l'analyse des raisons d'un arret anticipé de pgm. |