API messages (V2R20) = manipulation de msg en HLL

BoTTom |    Changer de couleur
 
    API Messages (permettent de traiter les messages en pgm HLL).
 
                          Déplacement de messages vers une autre PGMQ
                           (dans la liste d'invocation)
                          ATTENTION: Les messages *ESCAPE deviennent *DIAG
 
                          + QMHMOVPM
 
                          - BIN(4)   clé du message (blanc = tous)
                          - x fois CHAR(10) = type(s) de messages
                                              *COMP,*DIAG,*ESCAPE,*INFO
                                              0 = par clé
                                              1 à 4 si clé = blanc
                          - BIN(4)   nombre de types (0 à 4)
                          - CHAR(10) PGMQ contenant les messages
                                     - un nom de pgm
                                     - '*' = le pgm en cours.
                          - BIN(4)   n° dans la pile  0 = le pgm en cours
                                                      1 = l'appelant
                                                      x = x niveau au dessus
                          - CHAR(?)  Zone de retour d'erreur


|    Changer de couleur
 
    API Messages (permettent de traiter les messages en pgm HLL).
 
                          Réception de messages à partir d'une MSGQ
                           (RCVMSG MSGQ(xxx).)
 
 
                          + QMHRCVM
 
                          - CHAR(?)  variable en retour (voir les fmts API)
                          - BIN(4)   lg de la variable de retour.
                          - CHAR(8)  format pour la variable de retour.
                                     (RCVM0100 - RCVM0200)
                          - CHAR(20) <-msgq--><--biblio-->
                                      un nom    un nom
                                                *CURLIB,*LIBL
                                     (QHST non autorisé)
                          - CHAR(10) - type de message (identique à RCVMSG)
                                       *ANY = pas de sélection sur le type
                                       *COMP,*INFO,*DIAG,*RPY,*INQ,...
  ces valeurs sont les seules qui >    *FIRST,*LAST = positionnement
permettent de relire un msg "OLD" >    *NEXT,*PRV   = lecture sequentielle


|    Changer de couleur
                          - BIN(4)   - clé du message
                                       blanc  = pas de sélection sur la clé.
                                       *TOP   = à utiliser avec type *NEXT
                                               (premier message)
                                       une clé= sélection d'un message.
                            suivant le type indiqué au dessus 
                            blanc - clé  = le message ayant cette clé
                            *NEXT - clé  = le message qui suit cette clé.
                            *PRV  - clé  = le message qui precede
                            *RPY  - clé  = la réponse au message ayant cette
                                            clé (voir cours messages).
                            *type - clé  = le message ayant cette clé s'il
                          (*info,..)        est du type indiqué.
                          - BIN(4)  - Temps d'attente
                                       0 = pas d'attente
                                      -1 = attente illimité
                                       x = nombre de secondes.
                          - CHAR(10)- action à effectuer sur le message lu
                                       *REMOVE = l'enlever
                                       *OLD    = le laisser et marquer "OLD"
                                       *SAME   = ne rien faire
                          - CHAR(?)  Zone de retour d'erreur


|    Changer de couleur
 
    API Messages (permettent de traiter les messages en pgm HLL).
 
                          Réception de messages à partir d'une PGMQ
                           (RCVMSG PGMQ(xxx).)
 
 
                          + QMHRCVPM
 
                          - CHAR(?)  variable en retour (voir les fmts API)
                          - BIN(4)   lg de la variable de retour.
                          - CHAR(8)  format pour la variable de retour.
                                     (RCVM0100 - RCVM0200)
                          - CHAR(10)  un nom de pgm servant de référence.
                                      * le pgm en cours
                                      *EXT l'external (JOBMSGQ)
                          - BIN(4)   n° dans la pile  0 = le pgm indiqué
                                                             en nom-pgm.
                                                      1 = l'appelant du pgm
                                                            indiqué.
                                                      x = x niveau au dessus
                                                             du pgm indiqué


|    Changer de couleur
 
                          - CHAR(10) - type de message (identique à RCVMSG)
                                       *ANY = pas de sélection sur le type
                                       *COMP,*INFO,*DIAG,*NOTIFY,*ESCAPE,...
                                       *EXCP = *ESCAPE + *NOTIFY
  ces valeurs sont les seules qui <    *FIRST,*LAST = positionnement
permettent de relire un msg "OLD" <    *NEXT,*PRV   = lecture sequentielle
 
                          - BIN(4)   - clé du message
                                       blanc  = pas de sélection sur la clé.
                                       *TOP   = à utiliser avec type *NEXT
                                               (premier message)
                                       une clé= sélection d'un message.
                            suivant le type indiqué au dessus 
                            blanc - clé  = le message ayant cette clé
                            *NEXT - clé  = le message qui suit cette clé.
                            *PRV  - clé  = le message qui precede
                            *RPY  - clé  = la réponse au message ayant cette
                                            clé (voir cours messages).
                            *type - clé  = le message ayant cette clé s'il
                          (*info,..)        est du type indiqué.
 


|    Changer de couleur
 
                          - BIN(4)  - Temps d'attente
                                       0 = pas d'attente
                                      -1 = attente illimité
                                       x = nombre de secondes.
 
                          - CHAR(10)- action à effectuer sur le message lu
                                       *REMOVE = l'enlever
                                       *OLD    = le laisser et marquer "OLD"
                                       *SAME   = ne rien faire
 
                          - CHAR(?)  Zone de retour d'erreur
 
 Comme sur la commande CL RCVMSG: les message *EXCP sont reçus LIFO
                                  les autres types sont reçus FIFO.
 
 
 
 
 
 
 


|    Changer de couleur
 
    API Messages (permettent de traiter les messages en pgm HLL).
 
                          suppression de message(s) d'une MSGQ
                           (RMVMSG)
 
                          + QMHRMVM
 
                          - CHAR(20) <-msgq--><--biblio-->
                                      un nom    un nom
                                                *CURLIB,*LIBL
                          - BIN(4)   clé du message
                                     obligatoire si *BYKEY
                                     sinon à blanc.
                          - CHAR(10) messages à enlever
                                     *BYKEY  celui ayant la clé indiquée
                                     *ALL    tous les messages
                                     *KEEPUNANS tous sauf les question
                                                 restées sans réponse.
                                     *NEW    tous les messages non reçus
                                     *OLD    tous les messages déja reçus.
                          - CHAR(?)  Zone de retour d'erreur


|    Changer de couleur
 
    API Messages (permettent de traiter les messages en pgm HLL).
 
                          suppression de message(s) d'une PGMQ
                           (RMVMSG)
 
                          + QMHRMVPM
 
                          - CHAR(10)  un nom de pgm servant de référence.
                                      * le pgm en cours
                                      *ALLINACT pgmq des pgms inactifs.
                                      *EXT l'external (JOBMSGQ)
                          - BIN(4)   n° dans la pile  0 = le pgm indiqué
                                                           en nom-pgm
                                                      1 = l'appelant du pgm
                                                           indiqué.
                                                      x = x niveau au dessus
                                                           du pgm indiqué.
                            Ce paramètre est ignoré si *BYKEY,*ALLINACT,*EXT
                          - BIN(4)   clé du message
                                     obligatoire si *BYKEY
                                     sinon à blanc.


|    Changer de couleur
 
                          - CHAR(10) messages à enlever
                                     *BYKEY  celui ayant la clé indiquée
                                     *ALL    tous les messages
                                     *KEEPRQS   tous sauf les messages *RQS
                                     *NEW    tous les messages non reçus
                                     *OLD    tous les messages déja reçus.
 
                          - CHAR(?)  Zone de retour d'erreur
 
                          Renvoi le dernier message *ESCAPE reçu par un pgm
                           vers l'appelant, toujours de type *ESCAPE.
 
                          + QMHRSNEM
 
                          - BIN(4)   clé du message
                                     à blanc = le dernier message de type
                                                *ESCAPE reçu.
 
                          - CHAR(?)  Zone de retour d'erreur
 
 


|    Changer de couleur
 
    API Messages (permettent de traiter les messages en pgm HLL).
 
                          Retrouve la définition d'un message.
                           (RTVMSG)
 
 
                          + QMHRTVM
 
                          - CHAR(?)  variable en retour (voir les fmts API)
                          - BIN(4)   lg de la variable de retour.
                          - CHAR(8)  format pour la variable de retour.
                                     (RTVM0100 à RTVM0400)
                          - CHAR(7)  ID message  (ignoré si option=*FIRST)
                          - CHAR(20) <-msgf--><--biblio-->
                                      un nom    un nom
                                                *CURLIB,*LIBL
                          - CHAR(?)  - données pour remplacer les variables
                                       de substitution. (MSGDTA)
                          - BIN(4)   - longueur des données.
                                       (0 à 32767)
 


|    Changer de couleur
 
                          - CHAR(10) - remplacer les variables de
                                        substitution (&1,&2,..) par les
                                        données du message ?
 
                                       *YES / *NO
 
                          - CHAR(10) - renvoyer les caractères de mise en
                                        forme (&N,..) du message ?
 
                                       *YES / *NO
 
                          - CHAR(?)  Zone de retour d'erreur
 
  groupe optionnel
 
                          - CHAR(10) option d'extraction
 
                                     *MSGID = message extrait selon la clé
                                     *NEXT  = message extrait est celui qui
                                               suit la clé.
                                     *FIRST = on extrait la première clé.


|    Changer de couleur
 
 ......................................................................
 : Pour lire séquentiellement un fichier message :                    :
 :                                                                    :
 :  - il faut la première fois mettre *FIRST dans ce paramètre        :
 :    (MSGID est ignoré)                                              :
 :                                                                    :
 :  - puis mettre la clé du message que l'on vient de lire dans MSGID :
 :     et utiliser l'option *NEXT, et ainsi de suite ...             :
 :....................................................................:
 
 
                          - BIN(4) CCSID du texte à retourner
 
                                   0 = CCSID du job, sinon indiquez un n°.
 
                          - BIN(4) CCSID des données fournies
 
                                   (idem)
 
 
 


|    Changer de couleur
 
    API Messages (permettent de traiter les messages en pgm HLL).
 
                          Réception de messages *RQS    PRATIQUE POUR 
                           (RCVMSG PGMQ(*EXT).)          GERER F9 sur une
                                                         ligne de cde.
 
                          + QMHRTVRQ
 
                          - CHAR(?)  variable en retour (voir les fmts API)
                          - BIN(4)   lg de la variable de retour.
                          - CHAR(10) format pour la variable de retour.
                                     (RTVQ0100 - RTVQ0200)
                          - CHAR(10)  quel message ?
                                      *FIRST le premier de type *RQS
                                      *LAST  le dernier
                                      *NEXT  celui qui suit le message
                                              indentifié par la clé.
                                      *PRV   celui qui précéde la clé
                          - BIN(4)    clé du message, à blanc p *FIRST,*LAST
                          - CHAR(?)  Zone de retour d'erreur
 


|    Changer de couleur
 
    API Messages (permettent de traiter les messages en pgm HLL).
 
                          envoi un message en  BREAK
                           (SNDBRKMSG)
 
                          + QMHSNDBM
 
                          - CHAR(?)  texte du message
                          - BIN(4)   lg du texte
                          - CHAR(10) type de message
                                     *INFO
                                     *INQ (nécessite une réponse).
                          - x fois CHAR(20) <--msgq--><--biblio-->
                                              un nom    un nom
                                                      ou *CURLIB,*LIBL
                                           ou *ALLWS
                          - BIN(4)   nbr de message queue.
                          - CHAR(20) MSGQ recevant la réponse (si *INQ)
                                            <--msgq--><--biblio--> ou *LIBL
                                           ou *PGMQ (= PGMQ de ce pgm)
                          - CHAR(?)  Zone de retour d'erreur


|    Changer de couleur
 
    API Messages (permettent de traiter les messages en pgm HLL).
 
                          envoi un message à une MSGQ
                           (SNDPGMMSG TOMSGQ(xxx).)
 
                          + QMHSNDM
 
                          - CHAR(7)   ID message
                          - CHAR(20) <-msgf--><--biblio-->
                                      un nom    un nom
                                                *CURLIB,*LIBL
                          - CHAR(?)  - données pour les variables de substi-
                                       tution. (MSGDTA) ou texte (MSG)
                          - BIN(4)   - longueur des données.
                                       MSGDTA = 0 à 32767,MSG = 0 à 512.
                          - CHAR(10) - type de message
                                       *COMP,*DIAG,*INFO
                                       *INQ
 
 
 


|    Changer de couleur
 
                          - x fois CHAR(20) <--msgq--><--biblio-->
                                              un nom    un nom
                                                      ou *CURLIB,*LIBL
                                           ou *ALLACT
                                              *REQUESTER
                                              (inter=user,batch=qsysopr)
                                              *SYSOPR
                          - BIN(4)   nbr de message queue.
 
                          - CHAR(20) MSGQ recevant la réponse (si *INQ)
                                            <--msgq--><--biblio--> ou *LIBL
                                           ou *PGMQ (= PGMQ de ce pgm)
 
                          - BIN(4)   clé du message EN RETOUR.
                                     la réponse ayant même clé que la
                                     question à laquelle elle repond,il
                                     faudra utiliser cette variable pour
                                     la recevoir.
 
                          - CHAR(?)  Zone de retour d'erreur
 


|    Changer de couleur
 
    API Messages (permettent de traiter les messages en pgm HLL).
 
                          envoi un message à une PGMQ
                           (SNDPGMMSG TOPGMQ(xxx).)
 
                          + QMHSNDPM
 
                          - CHAR(7)   ID message
                          - CHAR(20) <-msgf--><--biblio-->
                                      un nom    un nom
                                                *CURLIB,*LIBL
                          - CHAR(?)  - données pour les variables de substi-
                                       tution. (MSGDTA) ou texte (MSG)
                          - BIN(4)   - longueur des données.
                                       MSGDTA = 0 à 32767,MSG = 0 à 512.
                          - CHAR(10) - type de message
                                       *COMP
                                       *DIAG
                                       *INFO
 
 


|    Changer de couleur
                                       *INQ    (seulement à l'external)
                                       *NOTIFY (question à un pgm)
                                       *STATUS (dans *EXT le message
                                                 apparait en bas d'écran)
                                       *ESCAPE ATTENTION ==> FIN du PGM 
                                       *RQS  (voir cours messages)
 
                          - CHAR(10)  un nom de pgm servant de référence.
                                      * le pgm en cours
                                      *EXT l'external
 
                          - BIN(4)   n° dans la pile  0 = le pgm indiqué
                                                           en nom-pgm
                                                      1 = l'appelant du pgm
                                                           indiqué.
                                                      x = x niveau au dessus
                                                           du pgm indiqué.
 
                          - BIN(4)   clé du message EN RETOUR.
                                      - idem QMHSNDM
 
                          - CHAR(?)  Zone de retour d'erreur


|    Changer de couleur
 
Quelques exemples d'utilisation en RPG:
 
      * déclarations communes
 
     E                    MTYP        2 10
     IMSGTB       DS
     I                                        1  20 MTYP
     IMSGDS       DS
     I                                        1  10 MSGF
     I                                       11  20 MSGL
     I                                        1  20 MSGFL
     I                                    B  21  240LENTXT
     I                                    B  25  280STACK
     I                                    B  29  320KEY
     I                                    B  33  360NBTYP
     ICODERR      DS
     I I            16                    B   1   40LGCOD
     I                                    B   5   80LGUTIL
     I                                        9  15 MSGID
     I                                       16  16 RESERV
 


|    Changer de couleur
 
      * gestion des erreurs en cas de probleme
         ...............
      *
      * EN CAS D'ERREUR ==> RENVOI DES MESSAGES ET CANCEL DU PGM
      *
     C           *PSSR     BEGSR
     C                     MOVEL'*DIAG'   MTYP,1
     C                     MOVEL'*ESCAPE' MTYP,2
     C                     CALL 'QMHMOVPM'
     C                     PARM           MSGCLE  4
     C                     PARM           MSGTB
     C                     PARM 2         NBTYP
     C                     PARM '*'       PGMQ   10
     C                     PARM 1         STACK
     C                     PARM           CODERR
     C                     ENDSR'*CANCL'
 
 
 
 
 


|    Changer de couleur
 
      * envoi de message *STATUS dans l'external
 
     I              'Liste en cours..'    C         MTX
     I              'Liste terminée  '    C         MTX2
     C                     MOVEL'QCPFMSG' MSGF
     C                     MOVEL'*LIBL'   MSGL
     C                     MOVELMTX       MSGTXT
 
     C                     CALL 'QMHSNDPM'
     C                     PARM 'CPF9898' ID      7
     C                     PARM           MSGFL
     C                     PARM           MSGTXT 50
     C                     PARM 50        LENTXT
     C                     PARM '*STATUS' MSGTYP 10
     C                     PARM '*EXT'    PGMQ   10
     C                     PARM 0         STACK
     C                     PARM           KEY
     C                     PARM           CODERR
      * sous programme de chargement
     C                     EXSR ----
      *


|    Changer de couleur
     C                     MOVELMTX2      MSGTXT
     C                     CALL 'QMHSNDPM'
     C                     PARM 'CPF9898' ID      7
     C                     PARM           MSGFL
     C                     PARM           MSGTXT 50
     C                     PARM 50        LENTXT
     C                     PARM '*STATUS' MSGTYP 10
     C                     PARM '*EXT'    PGMQ   10
     C                     PARM 0         STACK
     C                     PARM           KEY
     C                     PARM           CODERR
 
       * supprime tous les messages reçus entre deux affichages
       * (DSPF avec sous-fichier message)
     C                     CALL 'QMHRMVPM'
     C                     PARM '*'       PGMQ   10
     C                     PARM 0         STACK
     C                     PARM           KEY
     C                     PARM '*ALL'    RMVOPT 10
     C                     PARM           CODERR
 
 


|    Changer de couleur
       *
       * exemple en RPG-IV, retrouve le nom du pgm appellant
       *
 
     Dbinaire          S             10I 0
 
     DLENTXT           S                   like(binaire)
     DSTACK            S                   like(binaire)
     DKEY              S                   like(binaire)
     DATTENTE          S                   like(binaire)
 
     DCODERR           DS
     D  LGCOD                              like(binaire)   INZ(16)
     D  LGUTIL                             like(binaire)
     D  MSGID                         7
     D  RESERV                        1
 
      *
      *  on envoi un message au programme au-dessus (stack = 1)
      *  et on le relit (dans les infos retournées il y a le nom du pgm)
      *
 


|    Changer de couleur
     C                   CALL      'QMHSNDPM'
     C                   PARM                    ID                7
     C                   PARM                    MSGFL            20
     C                   PARM      'peu importe' MSGTXT           10
     C                   PARM      10            LENTXT
     C                   PARM      '*INFO  '     MSGTYP           10
     C                   PARM      '*'           PGMQ             10
     C                   PARM      1             STACK
     C                   PARM                    KEY
     C                   PARM                    CODERR
     C                   CALL      'QMHRCVPM'
     C                   PARM                    retour          120
     C                   PARM      120           lentxt
     C                   PARM      'RCVM0200'    format            8
     C                   PARM      '*'           PGMQ             10
     C                   PARM      1             STACK
     C                   PARM      '*ANY'        MSGTYP
     C                   PARM                    KEY
     C                   PARM      0             ATTENTE
     C                   PARM      '*REMOVE'     ACTION           10
     C                   PARM                    CODERR
     c                   eval      pgm = %subst(retour:111:10)


|    Changer de couleur
 
       *
       * le même exemple en RPG-IV, sous forme d'une fonction
       *
     H  nomain
 
      * prototype de la fonction
      *
      *  (tout programme utilisant la fonction doit lui-même
      *    contenir les deux lignes qui suivent)
 
     Dquiappel         PR            10
     D                               10I 0
 
 
      * corps de la fonction
     Pquiappel         B                    export
     D                 PI            10
     D  niveau                       10I 0
 
      *  variables locales
     Dbinaire          S             10I 0


|    Changer de couleur
 
     DLENTXT           S                   like(binaire)
     DSTACK            S                   like(binaire)
     DKEY              S                   like(binaire)
     DATTENTE          S                   like(binaire)
 
     DCODERR           DS
     D  LGCOD                              like(binaire)   INZ(16)
     D  LGUTIL                             like(binaire)
     D  MSGID                         7
     D  RESERV                        1
 
      *
      *  on envoi un message au programme au-dessus (stack = 1)
      *  et on le relit (dans les infos retournées il y a le nom du pgm)
      *
 
      * on rajoute UN pour tenir compte de la place occupée par le pgm
      * utilisant lui même la fonction.
     c                   eval      stack = niveau + 1
 
     C                   CALL      'QMHSNDPM'


|    Changer de couleur
     C                   PARM                    ID                7
     C                   PARM                    MSGFL
     C                   PARM      'peu importe' MSGTXT           10
     C                   PARM      10            LENTXT
     C                   PARM      '*INFO  '     MSGTYP           10
     C                   PARM      '*'           PGMQ             10
     C                   PARM                    STACK
     C                   PARM                    KEY
     C                   PARM                    CODERR
     C                   CALL      'QMHRCVPM'
     C                   PARM                    retour          120
     C                   PARM      120           lentxt
     C                   PARM      'RCVM0200'    format            8
     C                   PARM      '*'           PGMQ             10
     C                   PARM      1             STACK
     C                   PARM      '*ANY'        MSGTYP
     C                   PARM                    KEY
     C                   PARM      0             ATTENTE
     C                   PARM      '*REMOVE'     ACTION           10
     C                   PARM                    CODERR
     c                   return    %subst(retour:111:10)
     Pquiappel         E





©AF400