Pgm batch en attente/dtaq (entrée=commande)

BoTTom |
PGM
/******************************************************************************/
/*   CE PGM GERE UN PSEUDO SYSTEME BATCH                                      */
/*                                                                            */
/*   INTERET : LIMITE LE NOMBRE DE JOBS AUX YEUX DU SYSTÈME, A UTILISER       */
/*              POUR LES PETITS TRAITEMENTS UTILISATEURS (LISTES,...)         */
/*                                                                            */
/*   LA DTAQ SERT DE FILE D'ATTENTE                                           */
/*                                                                            */
/*   PLACER CE PGM EN TRAVAIL À DÉMARRAGE AUTOMATIQUE (ADDAJE)                */
/*     AVEC UNE JOBD AYANT >>> ENDSEV(90)                                     */
/*                                                                            */
/*   CE PEUT PGM PEUT S'EXECUTER EN PLUSIEURS EXEMPLAIRES                     */
/*    (IL N'Y A PAS DE VERROUILLAGE SUR LES DTAQ)                             */
/*    ==> LANCER PLUSIEURS FOIS LE PGM STREXEC                                */
/*    ==> IL FAUDRA APPELLER AUTANT DE FOIS LE PGM ENDEXEC                    */
/******************************************************************************/
DCL &DTALEN *DEC (5 0)
DCL &DTA *CHAR 522
DCL &CMD *CHAR 512
DCL &WAIT *DEC (5 0)
DCL &POS *CHAR 2 VALUE('EQ')
DCL &KEYLEN *DEC (3 0) VALUE(4)
DCL &KEY *CHAR 4
DCL &IDLEN *DEC (3 0) VALUE(44)
DCL &ID *CHAR 44
DCL &PRF *CHAR 10
 
             CHKOBJ     OBJ(AF4TOOL/EXECDQ) OBJTYPE(*DTAQ)
             MONMSG CPF0000 EXEC(DO)
             CRTDTAQ    DTAQ(AF4TOOL/EXECDQ) MAXLEN(522) SEQ(*KEYED) +
                          KEYLEN(4) SENDERID(*YES)
             ENDDO
/* RETROUVE LA DERNIERE COMMANDE */
             CHGVAR &KEY VALUE('*MSG')
             CHGVAR &WAIT 1
             CHGVAR &DTALEN 522
             CALL QRCVDTAQ PARM('EXECDQ' 'AF4TOOL'          +
                                &DTALEN &DTA &WAIT          +
                                &POS &KEYLEN &KEY           +
                                &IDLEN &ID)
/* ENVOI MESSAGE D'INFO AU PROFIL */
             IF (&DTA *NE ' ') THEN(DO)
             CHGVAR &PRF %SST(&DTA 1 10)


|
             CHGVAR &CMD %SST(&DTA 11 512)
             SNDMSG     MSG('Commande :' *BCAT &CMD *BCAT +
                          'terminée.') TOUSR(&PRF)
             ENDDO
 
/* ATTENTE D'UNE COMMANDE À EXECUTER */
 LECTURE:    CHGVAR &KEY VALUE('*CMD')
             CHGVAR &WAIT -1
             CHGVAR &DTALEN 512
             CALL QRCVDTAQ PARM('EXECDQ' 'AF4TOOL'          +
                                &DTALEN &CMD &WAIT          +
                                &POS &KEYLEN &KEY           +
                                &IDLEN &ID)
/* ARRET NORMAL DU PGM */
    IF (&CMD *EQ '*END') RETURN
 
/* TEST VALIDITE DE LA COMMANDE */
             CHGVAR     VAR(&PRF) VALUE(%SST(&ID 35 10))
             CALL QCMDCHK PARM(&CMD 512)
              MONMSG CPF0000 EXEC(DO)
             SNDMSG     MSG('Erreur dans la commande :' *BCAT &CMD) +
                          TOUSR(&PRF)
             GOTO LECTURE
             ENDDO
/* PREPARATION DES INFOS POUR ENVOI DE MASSAGE */
             CHGVAR &DTA (&PRF *CAT &CMD)
             CHGVAR &DTALEN 522
             CHGVAR &KEY VALUE('*MSG')
             CALL QSNDDTAQ PARM('EXECDQ' 'AF4TOOL'          +
                                &DTALEN &DTA                +
                                 &KEYLEN &KEY)
/* COMMANDE À EXECUTER "LOGEE" DANS LA PGMQ DE QCMD */
             SNDPGMMSG  MSG(&CMD) TOPGMQ(*PRV)
/* COMMANDE À EXECUTER PLACÉE DANS L'EXTERNAL  */
             SNDPGMMSG  MSG(&CMD) TOPGMQ(*EXT) MSGTYPE(*RQS)
/*  PUIS APPEL DE CE PGM À SUIVRE */
             SNDPGMMSG  MSG('call af4tool/execaje') TOPGMQ(*EXT) +
                          MSGTYPE(*RQS)
    ENDPGM




©AF400