3 ENVOI DE MESSAGES. -------------------- Pour envoyer un message il faudra au moins indiquer, le texte du message, son type et la msgq destinatrice. Il existe 4 commandes pour envoyer des messages: - SNDMSG - SNDBRKMSG - SNDUSRMSG - SNDPGMMSG |
3.1. SNDMSG. ------------ Cette commande permet d'envoyer uniquement des messages impromptus avec 2 types de messages, d'information *INFO ou d'interrogation *INQ à des msgq écrans, utilisateurs ou de l'opérateur QSYSOPR. Les messages *INFO peuvent être envoyés à plusieurs msgq, par contre ceux *INQ ne peuvent être envoyés qu'à une seule msgq. SNDMSG MSG(texte du message) TOMSGQ(nom de la msgq destinatrice) MSGTYPE(type du message *INFO ou *INQ) RPYMSGQ(nom de la msgq qui recevra la réponse d'1 message *INQ, par défaut celle de l'écran) |
3.2. SNDBRKMSG. --------------- Cette commande permet d'envoyer uniquement des messages impromptus avec 2 types de messages, d'information *INFO ou d'interrogation *INQ à des msgq écrans. Les messages *INFO et *INQ peuvent être envoyés à plusieurs msgq. L'envoi d'un message à un écran provoquera l'arrêt du travail en cours et la visualisation de ce message. (il force la délivrance en break du message). SNDBRKMSG MSG(texte du message) TOMSGQ(nom de la msgq destinatrice, par défaut *ALLWS tous les écrans) MSGTYPE(type du message *INFO ou *INQ) RPYMSGQ(nom de la msgq qui recevra la réponse d'1 message *INQ, par défaut QSYSOPR) |
3.3 SNDUSRMSG. -------------- Cette commande permet d'envoyer des messages impromptus ou prédéfinis à la msgq externe d'un travail, à QSYSOPR ou à une file d'attente de messages écrans ou utilisateurs. 2 types de message, information *INFO ou interrogation *INQ. Le grand intérêt de cette commande est : pour les messages d'interrogation nous pouvons récupérer la réponse dans une variable. ATTENTION CETTE COMMANDE N'EST UTILISABLE QUE DANS UN PROGRAMME CLP. Format de la commande SNDUSRMSG: SNDUSRMSG MSG(texte du message si message impromptu) MSGID(clé du message si message prédéfini) MSGF(nom du fichier des messages si msg prédéfini) |
MSGDTA(si le message prédéfini contient des variables vous indiquerez ici la valeur des variables) VALUES(si le message est impromptu et que le type est *INQ vous pouvez indiquer une liste des valeurs de réponse possibles) DFT(si le message est impromptu et que le type est *INQ vous pouvez indiquer une réponse par défaut) MSGTYPE(type du message *INFO ou *INQ) TOMSGQ(nom de la file d'attente de messages 3 possibilités: - * pour un travail interactif le message sera envoyé à la file d'attente de messages externes (*EXT). pour un travail batch le message sera envoyé à la file d'attente de messages de l'opérateur QSYSOPR. (C'est la valeur par défaut.) |
- *EXT le message est envoyé à la file d'attente de message externe. Si c'est un travail BATCH et le type du message est *INQ la réponse par défaut sera attribué à ce message. - nom d'une file d'attente de message.) MSGRPY(nom de la variable (max 132 caractères) qui recevra la réponse, possible si type du message est *INQ) Précision sur quelques paramètres de cette commande. MSGDTA : ce paramètre indique le contenu des variables du message. Vous ne pouvez indiquer qu'une seule constante ou variable. Si le message contient plusieurs variables : mettre bout à bout le contenu des variables dans MSGDTA (une seule variable ou *CAT) |
Ex: Reprenons notre message MSG0001 du fichier des messages MYMSGF et essayons de l'envoyer à l'écran ECRAN00,le nom du travail se trouve dans la variable &JOB,la date dans &DATE et l'heure dans &TIME, le message sera envoyé comme suit: SNDUSRMSG MSGID(MSG0001) MSGF(MYMSGF) MSGDTA(&job *cat + &date *cat &time) MSGTYPE(*INFO) + TOMSGQ(ECRAN00) Un exemple d'utilisation: Je veux envoyer le message MSG0002 du fichier MYMSGF et récupérer la réponse dans &REP puis traiter la réponse. SNDUSRMSG MSGID(MSG0002) MSGF(MYMSGF) MSGTYPE(*INQ) + TOMSGQ(*) MSGRPY(&REP) IF COND(&REP *EQ 'NON') THEN(GOTO CMDLBL(FIN)) |
3.4 SNDPGMMSG. -------------- Cette commande permet d'envoyer des messages impromptus ou prédéfinis à des files d'attente de messages utilisateurs ou écrans ou programmes. Elle est très utile pour la communication entre programmmes. ATTENTION CETTE COMMANDE N'EST UTILISABLE QUE DANS UN PROGRAMME EN LC. Format de la commande SNDPGMMSG: SNDPGMMSG MSG(texte du message si message impromptu) MSGID(clé du message si message prédéfini) MSGF(nom du fichier des messages si msg prédéfini) MSGDTA(si le message prédéfini contient des variables vous indiquerez ici la valeur des variables) |
TOPGMQ(indique le nom de la file d'attente programme où est envoyé le message. Il se compose de 2 paramètres qui peuvent prendre les valeurs suivantes: !-------------!-------------!-------------------! ! 1ére valeur ! 2éme valeur ! signification ! !-------------!-------------!-------------------! ! ! ! ! ! ! * ! MSG envoyé à la ! ! ! ! pgmq du prog. ! ! ! ! appelant. ! ! *PRV !-------------!-------------------! ! ! ! ! ! ! nom d'1 !MSG envoyé à la ! ! ! programme !pgmq du programme ! ! ! !appelant celui ! ! ! !indiqué dans la ! ! ! !2ème valeur ! !-------------!-------------!-------------------! |
!-------------!-------------!-------------------! ! ! ! ! ! ! ! ! ! ! * ! MSG envoyé à la ! ! ! ! pgmq du prog. ! ! ! ! envoyant le MSG ! ! *SAME !-------------!-------------------! ! ! ! ! ! ! nom d'1 !MSG envoyé à la ! ! ! programme !pgmq du programme ! ! ! !indiqué dans la ! ! ! !2ème valeur ! !-------------!-------------!-------------------! ! ! ! ! ! *EXT ! ne sert pas ! MSG envoyé à la ! ! ! ! msgq externe ! !-------------!-------------!-------------------! TOMSGQ(nom d'une file d'attente de messages écrans ou utilisateurs, incompatible si TOPGMQ renseigné) |
MSGTYPE(type du message,9 types de message possibles) !-------!-------------!-------------------------! ! type ! traduction ! signification ! !-------!-------------!-------------------------! ! *INFO ! information ! une information ! !-------!-------------!-------------------------! ! *INQ !interrogation! question nécessitant une! ! ! ! réponse ! !-------!-------------!-------------------------! ! *COMP ! achèvement ! indication de fin de ! ! ! ! travail ! !-------!-------------!-------------------------! ! *DIAG ! diagnostic ! indication d'erreur ! ! ! ! pendant l'exécution ! ! ! ! du travail ! !-------!-------------!-------------------------! ! *RQS ! demande ! demande d'exécution ! ! ! ! d'une fonction ! !-------!-------------!-------------------------! |
!-------!-------------!-------------------------! !*ESCAPE! abandon ! indication de fin ! ! ! ! anormale ! !-------!-------------!-------------------------! !*STATUS! état ! état d'avancement ! ! ! ! d'un travail ! !-------!-------------!-------------------------! !*NOTIFY!avertissement! demande d'intervention ! ! ! ! pour continuer le ! ! ! ! travail ! !-------!-------------!-------------------------! RPYMSGQ(pour les messages *INQ ou *NOTIFY le nom de la pgmq ou de la msgq qui recevra la réponse) 2 possibilités : - *PGMQ la réponse est envoyée à la pgmq du programme qui envoie le message - nom d'une file d'attente de message |
KEYVAR(indiquer le nom d'une variable qui récupérera le numéro du message donné par le système, ce numéro, identifie chaque message.) Grâce à cette variable nous pourrons recevoir la réponse à une question (un message de type réponse à le même n° système que le message auquel il répond) Exemples : /* ENVOI DE MESSAGE D'ETAT, LIGNE 24 DU TERMINAL */ SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA('Traitement + en cours ...') TOPGMQ(*EXT) MSGTYPE(*STATUS) /* ENVOI DE MESSAGE *COMP SUITE à UN TRAITEMENT TERMINE */ SNDPGMMSG MSG('traitement effectué') TOPGMQ(*PRV *) + MSGTYPE(*COMP) /* ENVOI D'UN MESSAGE D'ERREUR (FIN ANORMALE) */ SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA('texte + de l''erreur') TOPGMQ(*PRV *) MSGTYPE(*ESCAPE) |