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: |
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 |
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 */ |
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 |
/* 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 |