Sous-fichier messages

BoTTom |    Changer de couleur
 
      SOUS-FICHIER MESSAGE :
 
      permet de répondre à la question suivante:
 
        comment afficher tous les messages reçus par un menu en CL ?
 
      Ce sous-fichier sera automatiquement initialisé avec les messages
       contenu dans une PGMQ.
      Pour chaque enregistrement le système connaît la clé du message
       ==> Aide possible pour avoir le texte de second niveau
 
 
     Un sous-fichier message peut être rempli aussi enregistrement
      par enregistrement (sans SFLINZ).
     Il faut alors passer le DSPF en SHARE(*YES), recevoir les messages
      à charger, passer la clé à un pgm HLL (RPG par ex) qui fera
      l'écriture dans le sous-fichier.
     L'affichage du sous-fichier peut être fait par le CLP.
 
    EXEMPLE avec SFLINZ:
 


|    Changer de couleur
     A* DSPF                                PRINT CA03(03)
     A          R MENUFMT                   BLINK OVERLAY
     A                                  1  2DATE EDTCDE(Y)
     A                                  1 72TIME
     A                                  1 35'TITRE DU MENU'
     A                                      DSPATR(HI)
     A* IMAGE PRINCIPALE
     A                                  2  2'Choisir une des options :'
     A                                 23  2'Option:'
     A            OPTION         3   I 23 12DSPATR(PC)
     A          R MENUSFL                   SFL
     A                                      SFLMSGRCD(24)
     A            MSGKEY                    SFLMSGKEY
     A            MENUPGMQ                  SFLPGMQ
     A          R MENUSFLC                  SFLCTL(MENUSFL)
     A                                      LOCK
     A                                      SFLSIZ(50) SFLPAG(1)
     A  99                                  SFLEND
     A  99                                  SFLDSP
     A  99                                  SFLDSPCTL
     A  99                                  SFLINZ
     A            MENUPGMQ                  SFLPGMQ


|    Changer de couleur
             PGM
             DCLF       FILE(SFLMSGD)
             DCL        VAR(&MSGID) TYPE(*CHAR) LEN(7)
             DCL        VAR(&MSGDTA) TYPE(*CHAR) LEN(120)
             DCL        VAR(&MSGF) TYPE(*CHAR) LEN(10)
             DCL        VAR(&MSGFL) TYPE(*CHAR) LEN(10)
             DCL        VAR(&ERRCNT) TYPE(*DEC) LEN(1) VALUE(0)
 
             MONMSG     MSGID(CPF0000) EXEC(GOTO ERREUR)
             CHGVAR     VAR(&MENUPGMQ) VALUE(SFLMSG) /* nom-pgm = pgmq */
 
 DEBUT:      SNDRCVF    DEV(*FILE) RCDFMT(MENUFMT)
 
 /* n'afficher que les messages du dernier traitement (clr pgmq) */
 /* remettre à zéro le compteur d'erreur, après chaque affichage */
             RMVMSG     CLEAR(*ALL)
             CHGVAR     VAR(&ERRCNT) VALUE(0)
 
             IF         COND(&IN03) THEN(RETURN)
 
 /* CORPS DU MENU */
 


|    Changer de couleur
             IF (&OPTION = 1) THEN(DO)
                ......
                GOTO       MESSAGES /* à chaque option ==> gestion msg */
             ENDDO
 
 ERREUR:     IF         COND(&ERRCNT > 0) THEN(GOTO PROBLEME)
             /* si plus d'une erreur grave(débranchement via MONMSG CPF0000)
                entre deux affichages écran ==> problème probable avec le
                DSPF (erreur de niveau, perte de contact, etc...)         */
             CHGVAR     VAR(&ERRCNT) VALUE(&ERRCNT+1)
 
 
             /* tous les messages sont répercutés à l'appelant de façon
                à ne pas être "perdus" suite au RMVMSG  (facultatif)      */
 MESSAGES:   RCVMSG     RMV(*NO) MSGDTA(&MSGDTA) MSGID(&MSGID) +
                          MSGF(&MSGF) SNDMSGFLIB(&MSGFL)
             IF         COND(&MSGID ^= ' ') THEN(DO)
             SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFL/&MSGF) +
                          MSGDTA(&MSGDTA)
             GOTO       MESSAGES
             ENDDO
 


|    Changer de couleur
 /* affichage du sous-fichier message (initialisé avec 99 SFLINZ)
 
 SFL:        CHGVAR     VAR(&IN99) VALUE('1')
             SNDF       DEV(*FILE) RCDFMT(MENUSFLC)
             GOTO       DEBUT
 
 /* problème avec l'écran ==> envoi du dernier message d'erreur et fin */
 
 PROBLEME:
             RCVMSG     MSGTYPE(*EXCP) MSGDTA(&MSGDTA) MSGID(&MSGID) +
                          MSGF(&MSGF) SNDMSGFLIB(&MSGFL)
             IF         COND(&MSGID ^= ' ') THEN(DO)
             SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFL/&MSGF) +
                          MSGDTA(&MSGDTA) MSGTYPE(*ESCAPE)
             /* OU SIGNOFF *LIST  */
             ENDDO
             ENDPGM
 
 
 
 
 





©AF400