星期四, 11月 02, 2023

2002-11-06 如何檢查 JobD 中的 Initial library list 是否含有某個 Library ?(使用 API QWDRJOBD)


如何檢查 JobD 中的 Initial library list 是否含有某個 Library ?(使用 API QWDRJOBD)

JobD 包含使用者的工作環境設定, 可以使用 API QWDRJOBD 取得相關 JobD 的資訊.


File  : QCLSRC
Member: CHKJOBDINL
Type  : CLP
OS Version: no limit
Usage : CRTCLPGM CHKJOBDINL
        CALL CHKJOBDINL 'library'
        CALL CHKJOBDINL 'QGPL'


  /*  Program :     CHKJOBDINL                                       */
  /*                                                                 */
  /*  Description : Check all job descriptions if a certain library  */
  /*                exists in the initial library list.              */
  /*                                                                 */
  /*  Input Parameters :                                             */
  /*  ----------------                                               */
  /*  &LIB            Library to check for in all jobd               */
  /*                                                                 */

 CHKJOBDINL: PGM        PARM(&LIB)

             DCL        VAR(&LIB)     TYPE(*CHAR) LEN(10)

             DCL        VAR(&JOBDQUAL) TYPE(*CHAR) LEN(20) /* +
                          Qualified job description name  */
             DCL        VAR(&INLLIBL) TYPE(*CHAR) LEN(2750)
             DCL        VAR(&STARTPOS) TYPE(*DEC) LEN(5 0) /* +
                          Substring start position */
             DCL        VAR(&LEN) TYPE(*DEC) LEN(5 0) /* Length of +
                          array with libraries */
             DCL        VAR(&RECEIVER) TYPE(*CHAR) LEN(7000)
             DCL        VAR(&RECLEN) TYPE(*CHAR) LEN(4) /* receiver +
                          length */
             DCL        VAR(&OFFSET) TYPE(*CHAR) LEN(4) /* Offset to +
                          initial library list in Binary */
             DCL        VAR(&ENTNBR) TYPE(*CHAR) LEN(4) /* Number of +
                          libraries in Binary */

             DCL        VAR(&I) TYPE(*DEC) LEN(5 0) VALUE(0)
             DCL        VAR(&J) TYPE(*DEC) LEN(5 0)
             DCL        VAR(&NBR) TYPE(*DEC) LEN(7 0)
             DCL        VAR(&NBR_CHR) TYPE(*CHAR) LEN(7)

             DCLF       FILE(QSYS/QADSPOBJ)

             CHGVAR     VAR(%BIN(&RECLEN)) VALUE(7000)

             DSPOBJD    OBJ(*ALL/*ALL) OBJTYPE(*JOBD) +
                          OUTPUT(*OUTFILE) OUTFILE(QTEMP/ALLJOBD)

             OVRDBF     FILE(QADSPOBJ) TOFILE(QTEMP/ALLJOBD)

 READ:       RCVF
             MONMSG     MSGID(CPF0864) EXEC(GOTO CMDLBL(EOF))


             CHGVAR     VAR(&JOBDQUAL) VALUE(&ODOBNM *CAT &ODLBNM)

             CALL       PGM(QWDRJOBD) PARM(&RECEIVER &RECLEN +
                          'JOBD0100' &JOBDQUAL X'00000000')

             CHGVAR     VAR(&OFFSET) VALUE(%SST(&RECEIVER 361 4))
             CHGVAR     VAR(&STARTPOS) VALUE(%BIN(&OFFSET) + 1)
             CHGVAR     VAR(&ENTNBR) VALUE(%SST(&RECEIVER 365 4))
             CHGVAR     VAR(&LEN) VALUE(%BIN(&ENTNBR) * 11)

             CHGVAR     VAR(&INLLIBL) VALUE(%SST(&RECEIVER &STARTPOS +
                          &LEN))

             CHGVAR     VAR(&I) VALUE(0)

 NEXT:       CHGVAR     VAR(&J) VALUE((&I * 11) + 1)

             IF         COND(%SST(&INLLIBL &J 10) *EQ &LIB) +
                          THEN(GOTO CMDLBL(FOUND))
             CHGVAR     VAR(&I) VALUE(&I + 1)
             IF         COND(&I *LT 250) THEN(GOTO CMDLBL(NEXT))
             GOTO       CMDLBL(READ)

 FOUND:      SNDPGMMSG  MSG('Library ' *CAT &LIB *BCAT 'found in +
                          jobd' *BCAT &ODLBNM *TCAT '/' *CAT &ODOBNM)
             CHGVAR     VAR(&NBR) VALUE(&NBR + 1)
             GOTO       CMDLBL(READ)


 EOF:        DLTF       FILE(QTEMP/ALLJOBD)
             CHGVAR     VAR(&NBR_CHR) VALUE(&NBR)
             SNDPGMMSG  MSG('Library ' *CAT &LIB *BCAT 'found' *BCAT +
                          &NBR_CHR *BCAT 'times in job descriptions.')

 END:        ENDPGM

            



沒有留言: