CLP の「50. バッチ印刷ジョブのジョブ番号を調べるには ?」でも紹介しているが、
Webアプリケーションを始めとするバッチ・ジョブでの印刷では、印刷スプール・ファイルは
実行したジョブ名ではなく、QPRTJOB
という名前のジョブ名となってしまう。
またジョブ番号もその実行したジョブのジョブ番号ではなく、QPRTJOB のジョブ番号となる。
QPRTJOB のジョブ番号とは 24時間以上使用がないときに初めて +1 カウント・アップ
されるという
なかなかの厄介者である。
潟Iフィスクアトロ Webサイトの ワーク・ショップ でもサンプルとして印刷スプールをPDF化して公開する
サンプルを公開しているが、そのとき印刷スプールを特定するためにも QPRTJOB のジョブ番号を
取得する必要が発生する。
弊社では PRTJOBNO
という名前のプログラムを製品の中で API
として提供しているので
このソースを下記に公開する。
----------------------------------------------------------------------------------- 0001.00 PGM PARM(&USER &JOBNBR) 0002.00 /*---------------------------------------------------------*/ 0003.00 /* PRTJOBNO : QPRTJOB のジョブ番号を検索 */ 0004.00 /*---------------------------------------------------------*/ 0005.00 DCL VAR(&MSG) TYPE(*CHAR) LEN(132) 0006.00 DCL VAR(&TYPE) TYPE(*CHAR) LEN(1) 0007.00 DCL VAR(&USER) TYPE(*CHAR) LEN(10) 0008.00 DCL VAR(&JOBNBR) TYPE(*CHAR) LEN(6) 0009.00 DCL VAR(&JOBNAME) TYPE(*CHAR) LEN(26) 0010.00 DCL VAR(&APIERR) TYPE(*CHAR) LEN(4) + 0011.00 VALUE(X'00000000') /* 2 進数 */ 0012.00 DCL VAR(&STRPOS) TYPE(*CHAR) LEN(4) + 0013.00 VALUE(X'0000007D') /* 2 進数開始位置 : + 0014.00 125 */ 0015.00 DCL VAR(&LENDTA) TYPE(*CHAR) LEN(4) + 0016.00 VALUE(X'00000010') /* 2 進数受取長さ : 16 */ 0017.00 DCL VAR(&RCVVAR) TYPE(*CHAR) LEN(16) + 0018.00 VALUE(X'0000000000000000') 0019.00 DCL VAR(&OFFSET) TYPE(*CHAR) LEN(4) /* + 0020.00 2 進数 オフセット */ 0021.00 DCL VAR(&NOENTR) TYPE(*CHAR) LEN(4) /* + 0022.00 2 進数項目数 */ 0023.00 DCL VAR(&LSTSIZ) TYPE(*CHAR) LEN(4) /* + 024.00 2 進数リストサイズ */ 025.00 DCL VAR(&DEC08) TYPE(*DEC) LEN(8 0) /* WORK */ 026.00 DCL VAR(&ADDLEN) TYPE(*DEC) LEN(8 0) /* WORK */ 027.00 DCL VAR(&NOENT) TYPE(*DEC) LEN(8 0) /* WORK */ 028.00 DCL VAR(&N) TYPE(*DEC) LEN(8 0) VALUE(1) /* WORK */ 029.00 DCL VAR(&RCVDTA) TYPE(*CHAR) LEN(256) /* + 030.00 受取データ */ 031.00 /* MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR)) */ 032.00 033.00 RTVJOBA TYPE(&TYPE) 034.00 /*( ユーザー・スペースの作成 )*/ 035.00 CALL PGM(QUSCRTUS) PARM('QUSLJOB + 036.00 QTEMP ' 'PF ' 1000 ' ' + 037.00 '*ALL ' 'QUSLJOB 用ユーザー空間 ' + 038.00 '*YES ' &APIERR) 039.00 MONMSG CPF9870 040.00 /*( QUSLJOB : ジョブ・リストの出力 )*/ 041.00 CHGVAR VAR(&JOBNAME) VALUE('QPRTJOB ' *CAT + 042.00 &USER *CAT '*ALL ') 043.00 CALL PGM(QUSLJOB) PARM('QUSLJOB QTEMP ' + 044.00 'JOBL0100' &JOBNAME '*ALL ' &APIERR) 045.00 /*( リストAPIで作成されたユーザー空間の検索 )*/ 046.00 /*( リストデータセクションのオフセットを検索 )*/ 047.00 CALL PGM(QUSRTVUS) PARM('QUSLJOB QTEMP ' + 0048.00 &STRPOS &LENDTA &RCVVAR) 0049.00 CHGVAR VAR(&OFFSET) VALUE(%SST(&RCVVAR 1 4)) 0050.00 CHGVAR VAR(&NOENTR) VALUE(%SST(&RCVVAR 9 4)) 0051.00 CHGVAR VAR(&LSTSIZ) VALUE(%SST(&RCVVAR 13 4)) 0052.00 0053.00 /*( RCVVAR によって OFFSET,LSTSIZ を受取った )*/ 0054.00 CHGVAR VAR(&STRPOS) VALUE(&OFFSET) 0055.00 CHGVAR VAR(&DEC08) VALUE(%BIN(&STRPOS)) 0056.00 CHGVAR VAR(&DEC08) VALUE(&DEC08 + 1) 0057.00 CHGVAR VAR(%BIN(&STRPOS)) VALUE(&DEC08) 0058.00 CHGVAR VAR(&LENDTA) VALUE(&LSTSIZ) 0059.00 CHGVAR VAR(&ADDLEN) VALUE(%BIN(&LENDTA)) 0060.00 CHGVAR VAR(&NOENT) VALUE(%BIN(&NOENTR)) 0061.00 NXTRTV: 0062.00 CALL PGM(QUSRTVUS) PARM('QUSLJOB QTEMP ' + 0063.00 &STRPOS &LENDTA &RCVDTA) 0064.00 /*( 処理の開始 )*/ 0065.00 CHGVAR VAR(&JOBNBR) VALUE(%SST(&RCVDTA 21 6)) 0066.00 RETURN 0067.00 /*( 処理の終了 )*/ 0068.00 IF COND(&N < &NOENT) THEN(DO) 0069.00 CHGVAR VAR(&N) VALUE(&N + 1) 0070.00 CHGVAR VAR(&DEC08) VALUE(%BIN(&STRPOS)) 0071.00 CHGVAR VAR(&DEC08) VALUE(&DEC08 + &ADDLEN) 0072.00 CHGVAR VAR(%BIN(&STRPOS)) VALUE(&DEC08) 0073.00 GOTO NXTRTV 0074.00 ENDDO 0075.00 RETURN 0076.00 0077.00 ERROR: RCVMSG MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) 0078.00 SNDMSG: 0079.00 IF COND(&TYPE *EQ '0') THEN(DO) 0080.00 SNDPGMMSG MSG(&MSG) TOMSGQ(*SYSOPR) MSGTYPE(*COMP) 0081.00 ENDDO 0082.00 ELSE CMD(DO) 0083.00 SNDPGMMSG MSG(&MSG) TOMSGQ(*TOPGMQ) MSGTYPE(*DIAG) 0084.00 ENDDO 0085.00 ENDPGM -----------------------------------------------------------------------------------