PGM /*---------------------------------------------------------------------------*/ /* TESTGYOJOB : QGYOLJOB のテスト */ /* */ /* 2022/02/18 作成 */ /* HTTPS://WWW.IBM.COM/DOCS/EN/I/7.4?TOPIC=SSW_IBM_I_74/APIS/QGYOLJOB.HTM */ /*---------------------------------------------------------------------------*/ DCL VAR(&MSG) TYPE(*CHAR) LEN(132) DCL VAR(&STMMSG) TYPE(*CHAR) LEN(132) DCL VAR(&MSGID) TYPE(*CHAR) LEN(7) DCL VAR(&MSGF) TYPE(*CHAR) LEN(10) DCL VAR(&MSGFLIB) TYPE(*CHAR) LEN(10) DCL VAR(&MSGKEY) TYPE(*CHAR) LEN(4) DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(132) DCL VAR(&ERRDTA) TYPE(*CHAR) LEN(132) DCL VAR(&TYPE) TYPE(*CHAR) LEN(1) DCL VAR(&TOPGMQ) TYPE(*CHAR) LEN(10) DCL VAR(&MSGTYPE) TYPE(*CHAR) LEN(10) + VALUE('*ESCAPE ') DCL VAR(&APIERR) TYPE(*CHAR) LEN(116) + VALUE(X'000074') /* 2 進数 */ DCL VAR(&ERR) TYPE(*CHAR) LEN(1) DCL VAR(&NULL4) TYPE(*CHAR) LEN(4) + VALUE(X'00000000') /*( QGYOJOBL に必要な変数 )*/ DCL VAR(&JOBL0300) TYPE(*CHAR) LEN(512) DCL VAR(&JBLLEN) TYPE(*CHAR) LEN(4) + VALUE(X'00000200') DCL VAR(&JOBID) TYPE(*CHAR) LEN(16) DCL VAR(&JOBVAR) TYPE(*CHAR) LEN(1024) DCL VAR(&JOBLEN) TYPE(*CHAR) LEN(4) + VALUE(X'00000400') DCL VAR(&NBRRCD) TYPE(*CHAR) LEN(4) + VALUE(X'FFFFFFFF') DCL VAR(&LISTINFO) TYPE(*CHAR) LEN(80) DCL VAR(&LISTSU) TYPE(*CHAR) LEN(4) + VALUE(X'0000000A') DCL VAR(&SORTINF) TYPE(*CHAR) LEN(16) DCL VAR(&SORT) TYPE(*CHAR) LEN(4) + VALUE(X'00000001') DCL VAR(&SELECT) TYPE(*CHAR) LEN(128) DCL VAR(&SELSIZ) TYPE(*CHAR) LEN(4) + VALUE(X'0000003C') DCL VAR(&KEYSU) TYPE(*CHAR) LEN(4) + VALUE(X'00000002') DCL VAR(&KEYARY) TYPE(*CHAR) LEN(8) + VALUE(X'0000006700000772') /* ACTIVE JOBS */ DCL VAR(&BIN0) TYPE(*CHAR) LEN(4) + VALUE(X'00000000') DCL VAR(&BIN1) TYPE(*CHAR) LEN(4) + VALUE(X'00000001') DCL VAR(&BIN_1) TYPE(*CHAR) LEN(4) + VALUE(X'FFFFFFFE') DCL VAR(&BIN_2) TYPE(*CHAR) LEN(4) + VALUE(X'FFFFFFFE') /*( QGYGTLE に必要な変数 )*/ DCL VAR(&JOB) TYPE(*CHAR) LEN(10) DCL VAR(&USER) TYPE(*CHAR) LEN(10) DCL VAR(&JOBNBR) TYPE(*CHAR) LEN(6) DCL VAR(&N) TYPE(*DEC) LEN(7 0) DCL VAR(&RCVDTA) TYPE(*CHAR) LEN(1024) /* + 受取データ */ DCL VAR(&NBRRCDS) TYPE(*CHAR) LEN(4) + VALUE(X'0000000A') /* + 受入れレコード数 =1024 */ DCL VAR(&BIN4) TYPE(*CHAR) LEN(4) DCL VAR(&RTNSU) TYPE(*DEC) LEN(5 0) DCL VAR(&RTNSUC) TYPE(*CHAR) LEN(5) DCL VAR(&OBJD) TYPE(*CHAR) LEN(10) DCL VAR(&OBJLIB) TYPE(*CHAR) LEN(10) DCL VAR(&OBJTYP) TYPE(*CHAR) LEN(10) DCL VAR(>EHND) TYPE(*CHAR) LEN(4) DCL VAR(&VARLEN) TYPE(*CHAR) LEN(4) + VALUE(X'00000400') DCL VAR(&STRCNV) TYPE(*CHAR) LEN(4) DCL VAR(&TEXT) TYPE(*CHAR) LEN(50) DCL VAR(&STSBIN) TYPE(*CHAR) LEN(4) DCL VAR(&COUNT) TYPE(*DEC) LEN(5 0) DCL VAR(&COUNTC) TYPE(*CHAR) LEN(5) DCL VAR(&DEVD) TYPE(*CHAR) LEN(10) DCL VAR(&OBJATR) TYPE(*CHAR) LEN(10) MONMSG MSGID(CPF9999) EXEC(GOTO CMDLBL(ERROR)) /*( 環境の取得 )*/ RTVJOBA TYPE(&TYPE) IF COND(&TYPE *EQ '0') THEN(DO) /* バッチ */ CHGVAR VAR(&TOPGMQ) VALUE('*SYSOPR ') ENDDO /* バッチ */ ELSE CMD(DO) /* 対話式 */ CHGVAR VAR(&TOPGMQ) VALUE('*TOPGMQ ') ENDDO /* 対話式 */ /******************************/ /* すべての JOB の一覧 */ /******************************/ CHGVAR VAR(%SST(&JOBVAR 1 4)) VALUE(&BIN0) CHGVAR VAR(%SST(&LISTINFO 1 4)) VALUE(&LISTSU) CHGVAR VAR(%SST(&SORTINF 1 4)) VALUE(&BIN_2) /* -2 */ CHGVAR VAR(%SST(&SELECT 1 10)) VALUE('*ALL') CHGVAR VAR(%SST(&SELECT 11 10)) VALUE('*ALL') CHGVAR VAR(%SST(&SELECT 21 6)) VALUE('*ALL') CHGVAR VAR(%SST(&SELECT 27 1)) VALUE('*') /* PRIMARY JOB STATUS */ CHGVAR VAR(%SST(&SELECT 29 4)) VALUE(X'0000003C') /* CHGVAR VAR(%SST(&SELECT 33 4)) VALUE(X'00000001') */ CHGVAR VAR(%SST(&SELECT 33 4)) VALUE(X'00000000') /* CHGVAR VAR(%SST(&SELECT 61 10)) VALUE('*ACTIVE') */ /* ACTIVE JOB STATUS */ CHGVAR VAR(%SST(&SELECT 37 4)) VALUE(X'00000047') CHGVAR VAR(%SST(&SELECT 41 4)) VALUE(X'00000000') /* JOBS ON JOB QUEUE STATUS */ CHGVAR VAR(%SST(&SELECT 45 4)) VALUE(X'00000047') CHGVAR VAR(%SST(&SELECT 49 4)) VALUE(X'00000000') /* JOBS QUEUE NAME */ CHGVAR VAR(%SST(&SELECT 53 4)) VALUE(X'00000047') CHGVAR VAR(%SST(&SELECT 57 4)) VALUE(X'00000000') CALL PGM(QGYOLJOB) PARM(&JOBL0300 &JBLLEN + 'OLJB0300' &JOBVAR &JOBLEN &LISTINFO + &NBRRCD &SORTINF &SELECT &SELSIZ &KEYSU + &KEYARY &APIERR) IF COND(%SST(&APIERR 5 4) *NE &NULL4) THEN(DO) SNDPGMMSG + MSG('API: QGYOJOBL の実行で次のエラーが発生 + しました。 ') MSGTYPE(*DIAG) GOTO APIERR ENDDO /*( リスト検索の開始 )*/ CHGVAR VAR(&BIN4) VALUE(%SST(&LISTINFO 1 4)) CHGVAR VAR(&RTNSU) VALUE(%BIN(&BIN4)) IF COND(&RTNSU *EQ 0) THEN(DO) /* + 戻り数がない */ SNDPGMMSG MSG(' 活動ジョブがありません。 ') + MSGTYPE(*DIAG) GOTO ENDLIST ENDDO /* 戻り数がない */ CHGVAR VAR(&N) VALUE(1) CHGVAR VAR(%BIN(&STRCNV)) VALUE(1) CHGVAR VAR(%BIN(&NBRRCDS)) VALUE(1) CHGVAR VAR(>EHND) VALUE(%SST(&LISTINFO 9 4)) LOOP: CALL PGM(QGYGTLE) PARM(&RCVDTA &VARLEN >EHND + &LISTINFO &NBRRCDS &STRCNV &APIERR) IF COND(%SST(&APIERR 5 4) *NE &NULL4) THEN(DO) SNDPGMMSG + MSG('API: QGYGTLE の実行で次のエラーが発生 + しました。 ') MSGTYPE(*DIAG) GOTO APIERR ENDDO /*( 処理の開始 )*/ CHGVAR VAR(&JOB) VALUE(%SST(&RCVDTA 1 10)) CHGVAR VAR(&USER) VALUE(%SST(&RCVDTA 11 10)) CHGVAR VAR(&JOBNBR) VALUE(%SST(&RCVDTA 21 6)) CHGVAR VAR(&JOBID) VALUE(%SST(&RCVDTA 27 16)) SNDPGMMSG MSG(&JOB *TCAT '/' *CAT &USER *TCAT '/' + *CAT &JOBNBR) MSGTYPE(*DIAG) /*( 処理の終了 )*/ BYPAS: IF COND(&N < &RTNSU) THEN(DO) CHGVAR VAR(&N) VALUE(&N + 1) CHGVAR VAR(%BIN(&STRCNV)) VALUE(%BIN(&STRCNV) + 1) GOTO LOOP ENDDO /*( リストのクローズ )*/ ENDLIST: CALL PGM(QGYCLST) PARM(>EHND &APIERR) RETURN APIERR: CHGVAR VAR(&MSGID) VALUE(%SST(&APIERR 9 7)) CHGVAR VAR(&MSGDTA) VALUE(%SST(&APIERR 17 100)) CHGVAR VAR(&MSGF) VALUE('Q' *CAT %SST(&MSGID 1 + 3) *CAT 'MSG') CHGVAR VAR(&MSGFLIB) VALUE('QSYS ') GOTO SNDMSG ERROR: RCVMSG MSGTYPE(*LAST) RMV(*NO) KEYVAR(&MSGKEY) + MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) + MSGFLIB(&MSGFLIB) IF COND(&MSGID *EQ 'CPF9999') THEN(DO) CHGVAR VAR(&ERRDTA) VALUE(&MSGDTA) RCVMSG MSGTYPE(*PRV) MSGKEY(&MSGKEY) RMV(*NO) + MSG(&MSG) MSGDTA(&MSGDTA) MSGID(&MSGID) + MSGF(&MSGF) MSGFLIB(&MSGFLIB) CHGVAR VAR(&STMMSG) VALUE(' プログラム ' *CAT + %SST(&ERRDTA 8 10) *TCAT + ' のステートメント ' *CAT %SST(&ERRDTA + 24 4) *CAT ' で次のエラーが発生しました。 ') SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&STMMSG) + TOMSGQ(&TOPGMQ) MSGTYPE(*DIAG) ENDDO SNDMSG: IF COND(&MSGID *EQ ' ') THEN(DO) SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) + TOMSGQ(&TOPGMQ) MSGTYPE(&MSGTYPE) MONMSG MSGID(CPF2400) EXEC(RETURN) ENDDO ELSE CMD(DO) SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) + MSGDTA(&MSGDTA) TOMSGQ(&TOPGMQ) + MSGTYPE(&MSGTYPE) MONMSG MSGID(CPF2400) EXEC(RETURN) ENDDO ENDPGM