Il existe beaucoup de techniques pour superviser des files d’attente
La première consiste à faire boucler un robot qui lira les messages par la commande RCVMSG
La deuxième consiste à utiliser une vue SQL AS SERVICE, QSYS2.MESSAGE_QUEUE_INFO en allant boucler dessus
Il en existe d’autres avec des API etc…
J’ai choisi de vous présenter une technique un peu moins connu mais très efficace et très facile à mettre en œuvre, les Watches.
Un watch c’est un peu comme un trigger ou un programme d’exit, on va associer un programme qui se déclenchera sur un événement, ici un message nécessitant une réponse dans la file QSYSOPR.
Vous pouvez voir les sessions de watch actives par la commande
==>WRKWCH WCH(*STRWCH)
Pour démarrer une session c’est la commande STRWCH
dans notre cas on indiquera les paramètres suivants
STRWCH SSNID(ANAWCH)
WCHPGM(ANAWCH)
CALLWCHPGM(WCHEVT) WCHMSG((ALL *NONE *MSGDTA *INQ *GE 00))
WCHMSGQ((QSYS/QSYSOPR))
Ce qui veut dire que quand on a un message avec réponse dans qsysopr lance le programme ANAWCH (attention il devra être en ligne dans la LIBL)
Voici le programme ANAWCH
PGM PARM(&WCHOPTION &SESSIONID &ERROR &EVTDATA)
/—————————————————————–/
/* Ce programme est un watch il avertit quand on a un message dans */
/ *QSYSOPR en attente de réponse , il envoit un mail / /—————————————————————–
/*/ Paramètres recus */
DCL VAR(&WCHOPTION) TYPE(CHAR) LEN(10)
DCL VAR(&SESSIONID) TYPE(CHAR) LEN(10) DCL VAR(&ERROR) TYPE(CHAR) LEN(10)
DCL VAR(&EVTDATA) TYPE(CHAR) LEN(1024) / Variables de travail /
DCL VAR(&MSG) TYPE(CHAR) LEN(173)
DCL VAR(&EMAIL) TYPE(CHAR) LEN(50) value(‘votre@email.fr’)
/*découpage de EVTDATA */
DCL VAR(&MSGID) TYPE(CHAR) STG(DEFINED) LEN(7) + DEFVAR(&EVTDATA 5) DCL VAR(&MSGQ) TYPE(CHAR) STG(DEFINED) LEN(10) + DEFVAR(&EVTDATA 13)
DCL VAR(&MSGQLIB) TYPE(CHAR) STG(DEFINED) + LEN(10) DEFVAR(&EVTDATA 23)
DCL VAR(&MSGKEY) TYPE(CHAR) STG(DEFINED) + LEN(4) DEFVAR(&EVTDATA 387)
ADDLIBLE votrebib
MONMSG CPF0000
/ *Lecture du texte du message */
RCVMSG MSGQ(&MSGQLIB/&MSGQ) MSGKEY(&MSGKEY) + RMV(NO) MSG(&MSG)
/* Envoi d’un mail d’alerte */
SNDSMTPEMM RCP((&mail)) SUBJECT(‘Message avec +
réponse dans qsysopr’) NOTE(&MSG)
CHGVAR VAR(&ERROR) VALUE(‘ ‘)
ENDPGM
Il reçoit 4 paramètres , le plus intéressant est &EVTDATA qui contient la clé du message que vous pourrez alors lire par RCVMSG ça suffit
Pour arrêter la supervision par votre watch c’est la commande
==>ENDWCH SSNID(ANAWCH)
Remarque :
Il est préférable que le programme soit compiler en adoption de droit avec comme propriétaire qsecofr
Si vous envoyez un mail, votre utilisateur doit être inscrit sinon soumettez cette envoi avec un user qui l’est
On pourrait très bien répondre au message par la commande SNDRPY, sur certain messages connus