PGM /*-------------------------------------------------------------------*/ /* TESTSPLN : 最後に出力されたスプールの取得 */ /* */ /* 2021/04/10 作成 */ /*-------------------------------------------------------------------*/ 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') /*( QSPRILSP の変数 )*/ DCL VAR(&RCVDTA) TYPE(*CHAR) LEN(128) DCL VAR(&RCVLEN) TYPE(*CHAR) LEN(4) + VALUE(X'00000080') /* 128 */ DCL VAR(&SPLF) TYPE(*CHAR) LEN(10) DCL VAR(&JOB) TYPE(*CHAR) LEN(10) DCL VAR(&USER) TYPE(*CHAR) LEN(10) DCL VAR(&JOBNBR) TYPE(*CHAR) LEN(6) DCL VAR(&SPLNB4) TYPE(*CHAR) LEN(4) DCL VAR(&SPLNO) TYPE(*DEC) LEN(6 0) DCL VAR(&SPLNOC) TYPE(*CHAR) LEN(6) 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 /* 対話式 */ /*( 印刷の出力 )*/ RUNQRY QRY(*NONE) QRYFILE((QTRFIL/SHOHIN)) + OUTTYPE(*PRINTER) /*( 出力されたスプールを取得する )*/ CALL PGM(QSPRILSP) PARM(&RCVDTA &RCVLEN + 'SPRL0100' &APIERR) IF COND(%SST(&APIERR 5 4) *NE &NULL4) THEN(DO) SNDPGMMSG + MSG('API: QSPRILSP の実行で次のエラーが発生 + しました。 ') MSGTYPE(*DIAG) GOTO APIERR ENDDO CHGVAR VAR(&SPLF) VALUE(%SST(&RCVDTA 9 10)) CHGVAR VAR(&JOB) VALUE(%SST(&RCVDTA 19 10)) CHGVAR VAR(&USER) VALUE(%SST(&RCVDTA 29 10)) CHGVAR VAR(&JOBNBR) VALUE(%SST(&RCVDTA 39 6)) CHGVAR VAR(&SPLNB4) VALUE(%SST(&RCVDTA 45 4)) CHGVAR VAR(&SPLNO) VALUE(%BIN(&SPLNB4)) CHGVAR VAR(&SPLNOC) VALUE(&SPLNO) CHGVAR VAR(&MSG) VALUE(' 最後に出力されたスプールは ' *CAT + &SPLF *TCAT '.' *CAT &JOB *TCAT '/' + *CAT &USER *TCAT '/' *CAT &JOBNBR *CAT + ' スプール番号 ' *CAT &SPLNOC *CAT + ' です。 ') CHGVAR VAR(&MSGTYPE) VALUE('*DIAG') GOTO SNDMSG RETURN APIERR: CHGVAR VAR(&MSGID) VALUE(%SST(&APIERR 9 7)) CHGVAR VAR(&MSGDTA) VALUE(%SST(&APIERR 17 100)) CHGVAR VAR(&MSGF) VALUE('QCPFMSG ') CHGVAR VAR(&MSGFLIB) VALUE('QSYS ') GOTO SNDMSG ERROR: RCVMSG MSGTYPE(*LAST) RMV(*NO) KEYVAR(&MSGKEY) + MSGDTA(&MSGDTA) MSGID(&MSGID) 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) ENDDO 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) 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