Exemple d'utilisation des messages en CL

BoTTom |    Changer de couleur
 
Exemples d'utilisation de messages dans des pgm CL
 
 
 /* ENVOI DE MESSAGE *INFO DANS L'EXTERNAL */
             SNDPGMMSG  MSG('file d''attente message associée à un +
                          autre travail') TOPGMQ(*EXT) MSGTYPE(*INFO)
 
 
 
 /* ENVOI DE MESSAGE *COMP SUITE à UN TRAITEMENT */
             SNDPGMMSG  MSG('traitement effectué') TOPGMQ(*PRV *) +
                          MSGTYPE(*COMP)
 
 
 
 /* ENVOI D'UN MESSAGE D'ERREUR */
             SNDPGMMSG  MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA('texte +
                          de l''erreur') TOPGMQ(*PRV *) +
                          MSGTYPE(*ESCAPE)
 
 


|    Changer de couleur
 
 /* ENVOI D'UNE QUESTION AVEC ATTENTE MAXI DE 2 MINUTES */
             SNDPGMMSG  MSG('texte de la question') TOMSGQ(QSYSOPR) +
                          MSGTYPE(*INQ) RPYMSGQ(*PGMQ) KEYVAR(&CLE)
             RCVMSG     PGMQ(*SAME *) MSGTYPE(*RPY) MSGKEY(&CLE) +
                          WAIT(120) MSG(&REPONSE)
             /* PAS DE REPONSE AU BOUT DE 120 SECONDES */
             IF (&REPONSE = ' ') THEN(CHGVAR &REPONSE 'DFT')
 
 
 
 
 /* SYNCHRONISATION DE 2 JOBS VIA UNE MSGQ, lancez JOB2 en premier ! */
 JOB1:       SNDPGMMSG  MSG('question') TOMSGQ(MQSYNCHRO) +
                          MSGTYPE(*INQ) RPYMSGQ(MQSYNCHRO) KEYVAR(&CLE)
             RCVMSG     MSGQ(MQSYNCHRO) MSGTYPE(*RPY) MSGKEY(&CLE) +
                          WAIT(*MAX) MSG(&REPONSE)
 
 JOB2:       RCVMSG     MSGQ(MQSYNCHRO) MSGTYPE(*INQ) WAIT(*MAX) +
                          KEYVAR(&CLE) RMVMSG(*NO)
             SNDRPY     MSGKEY(&CLE) MSGQ(MQSYNCHRO) RPY(&REPONSE)
 


|    Changer de couleur
 
 /* GESTION DE MESSAGES STANDARD (POUR UN CPP PAR EXEMPLE) */
             PGM
 /* VARIABLES UTILISEES PAR LA GESTION DE MESSGAES */
             DCL        &ERRORSW *LGL                     /* SWITCH  */
             DCL        &MSGID *CHAR LEN(7)               /* ID MSG  */
             DCL        &MSGDTA *CHAR LEN(100)            /* DATA    */
             DCL        &MSGF *CHAR LEN(10)               /* FICHIER */
             DCL        &MSGFLIB *CHAR LEN(10)            /* BIBLI   */
             MONMSG     MSGID(CPF0000) EXEC(GOTO ERREUR)
 
 /* CORPS DU PROGRAMME */
 
 
 /* RENVOI DES MESSAGES DE TYPE *COMP SI FIN NORMALE */
 COMPMSG:    RCVMSG     MSGTYPE(*COMP) MSGDTA(&MSGDTA) MSGID(&MSGID) +
                          MSGF(&MSGF) SNDMSGFLIB(&MSGFLIB)
             IF         (&MSGID *EQ '       ') RETURN  /* FIN DU PGM */
             SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
                          MSGDTA(&MSGDTA) MSGTYPE(*COMP)
             GOTO       COMPMSG /* BOUCLE SUR MESSAGES *COMP      */
 


|    Changer de couleur
              /*----------------------------------------*/
 ERREUR:      /*        GESTION DES ERREURS             */
              /*----------------------------------------*/
             IF         &ERRORSW SNDPGMMSG MSGID(CPF9999) +
                          MSGF(QCPFMSG) MSGTYPE(*ESCAPE) /* 2EME FOIS*/
                                                         /* ARRET PGM*/
             CHGVAR     &ERRORSW '1' /* MISE EN PLACE DU SWTICH     */
 
 /* RENVOI DES MESSAGES DE TYPE *DIAG SI FIN ANORMALE */
 DIAGMSG:    RCVMSG     MSGTYPE(*DIAG) MSGDTA(&MSGDTA) MSGID(&MSGID) +
                          MSGF(&MSGF) SNDMSGFLIB(&MSGFLIB)
             IF         (&MSGID *EQ '       ') GOTO EXCPMSG
             SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
                          MSGDTA(&MSGDTA) MSGTYPE(*DIAG)
             GOTO       DIAGMSG /* BOUCLE SUR MESSAGES *DIAG      */
 
 /* RENVOI DU MESSAGE D'ERREUR                        */
 EXCPMSG:    RCVMSG     MSGTYPE(*EXCP) MSGDTA(&MSGDTA) MSGID(&MSGID) +
                          MSGF(&MSGF) SNDMSGFLIB(&MSGFLIB)
             SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
                          MSGDTA(&MSGDTA) MSGTYPE(*ESCAPE)
             ENDPGM


|    Changer de couleur
 
 
 /* ENVOI DE MESSAGES *STATUS DANS L'EXTERNAL */
 
 
             SNDPGMMSG  MSGID(CPF9898) MSGF(QCPFMSG) +
                          MSGDTA('traitement xxxxxxxx en cours') +
                          TOPGMQ(*EXT) MSGTYPE(*STATUS)
                ....
             SNDPGMMSG  MSGID(CPF9898) MSGF(QCPFMSG) +
                          MSGDTA('traitement yyyyyyyy en cours') +
                          TOPGMQ(*EXT) MSGTYPE(*STATUS)
                ....
                ....
             SNDPGMMSG  MSGID(CPI9801) MSGF(QCPFMSG) TOPGMQ(*EXT) +
                          MSGTYPE(*STATUS) /* EFFACE LIGNE 24 */
 
 
 
 
 
 


|    Changer de couleur
 
 
 /* REQUEST-PROCESSOR */
 
             PGM
             SNDPGMMSG  MSG('/* pgm xxx */') TOPGMQ(*EXT) MSGTYPE(*RQS)
             RCVMSG     PGMQ(*EXT) MSGTYPE(*RQS) RMV(*NO)
 
             CALL PGMX
             MONMSG CPF1907 EXEC(DO)
                    RCLRSC
                     ....
             ENDDO
 
             RMVMSG     PGMQ(*SAME *) CLEAR(*ALL)
             CALL PGMY /* MONMSG CPF1907 INUTILE,LE PGM N'EST PLUS +
                          UN REQUEST-PROCESSOR */
 
             ENDPGM
 
 
 


|    Changer de couleur
 
 /* UN PSEUDO système-BATCH (LA MESSAGE QUEUE SERT DE "JOBQ") */
 
             PGM
             RCVMSG     MSGQ(MQBATCH) WAIT(*MAX) RMV(*NO) MSG(&CDE)
             IF (&CDE = '*FIN') RETURN /* ARRET LOGIQUE DU PGM */
             SNDPGMMSG  MSG(&CDE) TOPGMQ(*EXT) MSGTYPE(*RQS)
             SNDPGMMSG  MSG('call moi') TOPGMQ(*EXT) MSGTYPE(*RQS)
             ENDPGM /* RETOUR à QCMD */
 
/* EXECUTION D'UN TRAITEMENT */
 
             SNDMSG     MSG('cde à exécuter') TOMSGQ(MQBATCH)
 
/* VISUALISATION DE LA FILE D'ATTENTE */
 
            DSPMSG MSGQ(MQBATCH) OUTPUT(*)
 
 
 
 
 


|    Changer de couleur
 /* UN PSEUDO ANALYSEUR DE COMMANDE */
             PGM
          MONMSG CPF1907                           /* appel système 2 */
          MONMSG MSGID(CPF6801) EXEC(GOTO ANNUL)   /* annulation d'invite */
 
 /* le pgm devient un request processor */
 
             SNDPGMMSG  MSG('/* pgm xxx */') TOPGMQ(*EXT) MSGTYPE(*RQS)
             RCVMSG     PGMQ(*EXT) MSGTYPE(*RQS) RMV(*NO)
 
DEBUT:                            /* ECRAN TYPE ENTREE DE COMMANDE */
     CHGVAR VAR(&CMD) VALUE(' ')
     RCVMSG PGMQ(*EXT) MSGTYPE(*RQS) WAIT(*MAX) RMV(*NO) KEYVAR(&KEY) +
            MSG(&CMD) RTNTYPE(&RTN)
 
     MONMSG MSGID(CPF2415) EXEC(RETURN) /* F3 OU F12 */
 
     IF COND(&RTN *EQ '10') THEN(DO) /* F4 SUR L'ECRAN */
       CHGVAR VAR(&CMD) VALUE('?' !! &CMD)
       CALL PGM(QCMDCHK) PARM(&CMD 512)
        MONMSG MSGID(CPF0006) EXEC(GOTO CMDLBL(DEBUT))
        MONMSG MSGID(CPF0000)


|    Changer de couleur
 
     /* LA COMMANDE (PARAMETREE PAR QCMDCHK) EST STOCKEE DANS LA LOG */
 
       SNDPGMMSG MSG(&CMD) TOPGMQ(*EXT) MSGTYPE(*RQS)
       MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(DEBUT))
 
     /* ANNULATION DE LA COMMANDE SAISIE (REMPLACEE PAR AU DESSUS) */
 
       RMVMSG PGMQ(*SAME) MSGKEY(&KEY)
       MONMSG MSGID(CPF0000)
 
     /* REPRISE DE CONTACT AVEC L'EXTERNAL */
       RCVMSG PGMQ(*EXT) MSGTYPE(*RQS) WAIT(*MAX) RMV(*NO) MSG(&CMD)
     ENDDO
 
       /* Traitement de la commande reçue ou renvoyée par QCMDCHK */
 
          CALL QCMDEXC / ou stockage pour traitement ulterieur */
 
 
     GOTO DEBUT
 


|    Changer de couleur
 
ANNUL:
       /* point d'arrivée si annulation d'une invite */
 
 
       /* MESSAGE STOCKé DANS LA LOG */
       SNDPGMMSG MSG(&CMD) TOPGMQ(*EXT) MSGTYPE(*RQS)
       MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(DEBUT))
 
       /* ANNULATION DU MESSAGE SAISI */
       RMVMSG PGMQ(*SAME) MSGKEY(&KEY)
       MONMSG MSGID(CPF0000)
 
 
       /* REPRISE DE CONTACT AVEC L'EXTERNAL */
       RCVMSG PGMQ(*EXT) MSGTYPE(*RQS) WAIT(0) RMV(*NO) MSG(&CMD)
       GOTO CMDLBL(DEBUT)
 
     ENDPGM
 




©AF400