MONMSG
Intercepter message
En bref
La commande MONMSG (Intercepter un message) permet d'intercepter des messages d'arrêt programme, d'avertissement et d'état envoyés à la file d'attente des messages du programme dans lequel la commande est exécutée.
MONMSG se lit MON
(Surveiller) + MSG.
Sur IBM i, le nom d'une commande associe presque toujours un verbe et un objet.
Syntaxe minimale
MONMSG MSGID(…)
Paramètres
Astuce : dans une session 5250, tapez MONMSG puis F4 pour
l'invite de saisie, et F1 sur un paramètre pour son aide.
Aide IBM i de la commande
Texte du F1, IBM i 7.5 en français
(bibliothèque QSYS)
Où s'exécute :
- Programme batch (*BPGM)
- Programme interactif (*IPGM)
La commande MONMSG (Intercepter un message) permet d'intercepter des messages d'arrêt programme, d'avertissement et d'état envoyés à la file d'attente des messages du programme dans lequel la commande est exécutée. Les autres types de message (achèvement, diagnostic, etc.) ne peuvent pas être interceptés.
Lors de sa compilation dans un programme CL, la commande MONMSG établit des conditions d'interception à appliquer à l'arrivée des messages indiqués. Elle intercepte ensuite les messages et vérifie ces conditions par comparaison des données. Si un message conforme aux conditions arrive dans la file d'attente de messages, la commande CL associée à la commande MONMSG est exécutée.
Vous pouvez indiquer jusqu'à 1000 commandes MONMSG dans un programme pour faire en sorte que les messages soient interceptés selon des conditions spécifiques. Les identificateurs de messages spécifiques ou génériques peuvent être interceptés.
Dans un programme CL ou une procédure CL ILE, vous pouvez placer la commande MONMSG après la plupart des commandes. Si elle ne figure pas au début du programme, elle ne s'applique qu'à la commande qui la précède immédiatement. La commande MONMSG est dans ce cas de niveau commande, c'est-à-dire qu'elle n'intercepte que les messages envoyés par la commande précédente. Si l'un d'eux est conforme aux conditions spécifiées par la commande MONMSG, l'action définie par celle-ci est exécutée. Vous pouvez placer jusqu'à 100 commandes MONMSG après une commande donnée pour définir la façon dont les messages de cette dernière sont interceptés.
Une fois l'action indiquée par la commande MONMSG exécutée, si elle ne se termine pas par une commande GOTO ou RETURN, le contrôle repasse à la commande du programme qui suit celle à l'origine du message. Si l'action se termine par une commande GOTO, le contrôle se branche sur la commande du programme spécifiée avec la commande GOTO. Si l'action se termine par une commande RETURN, le contrôle repasse au programme qui a appelé le programme contenant la commande MONMSG.
Si une ou plusieurs commandes MONMSG sont placées au début du programme (immédiatement après les commandes de déclaration ou, à défaut, après la commande PGM), elles interceptent tous les messages envoyés par toutes les commandes du programme (100 au maximum). Les commandes MONMSG sont dans ce cas de niveau programme. Si un message émis par l'une des commandes du programme est conforme aux conditions spécifiées dans l'une de ces commandes MONMSG, l'action correspondante (définie dans la même commande MONMSG) est exécutée.
L'action exécutée par une commande MONMSG de niveau commande se substitue à une commande MONMSG de niveau programme.
Si une commande est définie pour le paramètre EXEC d'une commande MONMSG placée au début du programme, seule la commande GOTO peut être utilisée. Dans ce cas, celle-ci doit indiquer le label de la commande à laquelle le contrôle doit passer en cas d'interception d'un message. Le label spécifié dans une commande MONMSG de niveau programme ne peut pas être associé à un sous-programme. Si une commande GOTO est effectuée pour une commande MONMSG de niveau programme, la pile de sous-programmes est réinitialisée par la commande CALLSUBR suivante.
Si aucune commande n'est définie pour le paramètre EXEC, les messages interceptés sont ignorés.
Restrictions :
- Cette commande est admise uniquement dans un programme CL ou une procédure CL ILE.
- Elle peut figurer après la dernière commande de déclaration (le cas échéant), après la commande PGM qui commence le programme ou après toute commande admise dans un programme CL ou une procédure CL ILE, à l'exception de DO, DOWHILE, DOUNTIL, DOFOR, ELSE, ENDDO, SELECT, WHEN, OTHERWISE, ENDSELECT, ENDPGM, CALLSUBR, SUBR, RTNSUBR, ENDSUBR, GOTO, IF ou RETURN. Notez que si un autre programme envoie un message que cette commande intercepte, aucun retour de contrôle à ce programme ne peut avoir lieu.
Paramètres
| Mot-clé | Description | Valeurs possibles | Remarques |
|---|---|---|---|
| MSGID | Identificateur de message | Values (jusqu'à 50 répétitions): Nom | Obligatoire, positionnel 1 |
| CMPDTA | Donnée de comparaison | Valeur caractère, *NONE | Facultatif, positionnel 2 |
| EXEC | Commande à exécuter | Chaîne de commandeCommand string | Facultatif, positionnel 3 |
Identificateur de message (MSGID)
Indique les identificateurs d'un ou plusieurs messages d'arrêt programme, d'avertissement ou d'état devant être interceptés à l'aide de cette commande. Vous pouvez indiquer jusqu'à 50 identificateurs de messages spécifiques ou génériques dans une commande.
Remarque :Certaines commandes CL émettent un message d'arrêt programme unique pour des conditions d'erreur différentes. Les détails de l'erreur ou de la défaillance figurent alors dans les messages de diagnostic qui précèdent le message d'arrêt programme. Bien que ces derniers ne soient pas interceptés, ils peuvent être reçus à partir de la file d'attente de messages externe du travail une fois l'intercepteur de messages utilisateur activé par le message d'arrêt programme.
Le code (trois premiers caractères) de l'identificateur de message doit se composer d'une lettre suivie de deux caractères alphanumériques (lettres ou chiffres) ; les quatre derniers caractères doivent être des chiffres compris entre 0 et 9 et/ou des lettres comprises entre A et F.
Remarque :Dans les messages MCH (MCHnnnn), seuls les chiffres 0 à 9 figurent dans les quatre dernières positions.
Si des zéros figurent dans deux de ces quatre dernières positions ou dans toutes les quatre (par exemple, "USRmm00"), un identificateur de message générique est précisé. Par exemple, si CPF0000 est indiqué, tous les messages ayant pour préfixe 'CPF' sont interceptés. Les identificateurs de message générique peuvent être utilisés pour les instructions MONMSG de niveau commande et de niveau procédure.
Indiquez les identificateurs de 1 à 50 messages à intercepter à leur arrivée dans la file d'attente de messages de ce programme. Les identificateurs de message et le texte des messages d'arrêt programme, de notification et d'état pouvant être envoyés par une commande figure dans la documentation de l'Information Center et dans l'aide en ligne relatives à cette commande. Vous ne pouvez pas indiquer ces identificateurs à l'aide de variables CL.
Ce paramètre est obligatoire.
Donnée de comparaison (CMPDTA)
Indique les données de comparaison à utiliser pour déterminer si la commande MONMSG doit traiter le message intercepté (son identificateur de message étant l'un de ceux indiqués) et placé dans la file d'attente des messages du programme. La comparaison porte sur les données de message indiquées au paramètre MSGDTA de la commande SNDPGMMSG (Envoyer un message programme). Si la première portion des valeurs de substitution du message (jusqu'aux 28 premiers caractères) correspond aux critères de comparaison spécifiés, l'action définie au paramètre EXEC de cette commande est exécutée. Cette action s'effectue également si aucune donnée de comparaison n'est indiquée.
- *NONE
- Aucune donnée de comparaison n'est indiquée. Si le message placé dans la file d'attente de messages du programme provient d'une commande dont les messages sont interceptés par cette commande et qu'il porte l'identificateur spécifié, l'action définie au paramètre Commande à exécuter (EXEC) est exécutée.
- donnée-comparaison
- Indiquez une chaîne comportant 28 caractères au maximum et figurant au besoin entre apostrophes. Cette chaîne sera comparée avec le message, en partant du premier caractère des données du message et jusqu'à concurrence du nombre de caractères composant la chaîne. Si les données de comparaison concordent avec la première portion du message reçu, cette commande exécute la fonction définie au paramètre EXEC. Vous ne pouvez pas indiquer une variable CL comme données de comparaison.
Les données de comparaison peuvent être affichées à l'aide de la commande DSPPGMVAR (Afficher variable de programme).
Commande à exécuter (EXEC)
Indique la commande CL à exécuter lorsqu'un message intercepté, qui a été envoyé dans la file d'attente des messages du programme, remplit les conditions indiquées dans cette commande. Si un message intercepté arrive dans la file d'attente alors qu'aucune commande n'est indiquée, ce message est ignoré et le contrôle est transféré à la commande suivante du programme.
Si la commande MONMSG est placée au début du programme, le paramètre EXEC doit indiquer la commande GOTO et le label identifiant la commande qui doit recevoir le contrôle.
Indiquez la commande CL, ainsi que ses paramètres, à exécuter si un message répondant aux conditions spécifiées dans cette commande est reçu. (La commande n'est pas exécutée si le message ne répond pas à ces conditions.) Vous ne pouvez pas indiquer une variable CL à la place de la commande CL.
Remarque :Lorsqu'une commande DO, DOWHILE, DOUNTIL, DOFOR ou SELECT est indiquée au paramètre EXEC, le groupe associé tout entier est traité, si les conditions spécifiées sont vérifiées.
Exemples
Exemple 1 : Contrôle des messages envoyés par une commande
PGM MONMSG MSGID(CPF0001 CPF1999) EXEC(GOTO EXIT2)
Cet exemple illustre une commande MONMSG au début d'une procédure CL permettant d'intercepter les messages CPF0001 et CPF1999 ; ces messages peuvent être envoyés par une commande traitée ultérieurement dans la procédure. Lorsque l'un de ces messages est reçu à partir d'une commande s'exécutant dans la procédure, le contrôle passe à la commande identifiée par le label EXIT2.
CPF0001 indique qu'une erreur a été détectée dans la commande identifiée dans le message même. CPF1999, un message pouvant être envoyé par de nombreuses commandes de débogage (par exemple, CHGPGMVAR), indique que des erreurs se sont produites dans la commande, sans identifier la commande dans le message.
Exemple 2 : Contrôle des messages envoyés par une commande unique
CHGVAR VAR(&A) VALUE(&A / &B) MONMSG MSGID(MCH1211) EXEC(CHGVAR VAR(&A) VALUE(1))
Dans cet exemple, la commande MONMSG suit une commande CHGVAR (Modifier une variable) et, de ce fait, n'intercepte que les messages envoyés par CHGVAR. Le message d'arrêt programme MCH1211 est envoyé dans la file d'attente de messages de ce programme lors d'une tentative de division par zéro. MSGID(MCH1211) étant indiqué, la commande MONMSG intercepte cette condition ; lorsqu'elle reçoit le message, la seconde commande CHGVAR est traitée. Dans cette commande, la variable &A prend la valeur 1.
Messages d'erreur
Aucun
© Copyright IBM Corp. Texte d'aide reproduit à des fins de formation.