Tools

44. APIを使って調べる PRTJOBNO

24. QPRTJOBのジョブ番号を調べるPRTJOBNO」を紹介したが
ここで紹介するのは、それより進んだAPI でPRTJOBNO を調べる方法である。
OS : V5R2M0 以降であれば、このAPI : QSPRILSP を使ったほうが
安全で簡単でパフォーマンスにも優れている。
この方法は弊社製品: EnterpriseServer や Spoolライターにも利用されている。

【CLP: PRTJOBNO】
0001.00              PGM        PARM(&USER &JOBNBR)                           
0002.00 /*---------------------------------------------------------*/         
0003.00 /*   PRTJOBNO : QPRTJOB のジョブ番号を検索                 */         
0004.00 /*                                                         */         
0005.00 /*   2011/03/28:API:QSPRILSP は V5R2M0 以降で有効である    */         
0006.00 /*---------------------------------------------------------*/         
0007.00              DCL        VAR(&MSG) TYPE(*CHAR) LEN(132)                
0008.00              DCL        VAR(&MSGID) TYPE(*CHAR) LEN(7)                
0009.00              DCL        VAR(&TYPE) TYPE(*CHAR) LEN(1)                 
0010.00              DCL        VAR(&USER) TYPE(*CHAR) LEN(10)                
0011.00              DCL        VAR(&JOBNBR) TYPE(*CHAR) LEN(6)               
0012.00              DCL        VAR(&APIERR) TYPE(*CHAR) LEN(4) +             
0013.00                           VALUE(X'00000000') /* 2 進数  */            
0014.00              DCL        VAR(&RCVDTA) TYPE(*CHAR) LEN(256) /* +        
0015.00                            受取データ  */                             
0016.00              DCL        VAR(&RCVLEN) TYPE(*CHAR) LEN(4)               
0017.00              MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))       
0018.00                                                                       
0019.00              RTVJOBA    TYPE(&TYPE)                                   
0020.00              CHGVAR     VAR(%BIN(&RCVLEN)) VALUE(128)                 
0021.00              CALL       PGM(QSPRILSP) PARM(&RCVDTA &RCVLEN +            
0022.00                           'SPRL0100' &APIERR)                           
0023.00              CHGVAR     VAR(&JOBNBR) VALUE(%SST(&RCVDTA 39 6))          
0024.00              RETURN                                                     
0025.00                                                                         
0026.00  ERROR:      RCVMSG     MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) MSGID(&MSGID) 
0027.00  SNDMSG:                                                                
0028.00              IF         COND(&TYPE *EQ '0') THEN(DO)                    
0029.00              SNDPGMMSG  MSG(&MSGID *CAT ':' *CAT &MSG) +                
0030.00                           TOMSGQ(*SYSOPR) MSGTYPE(*COMP)                
0031.00              ENDDO                                                      
0032.00              ELSE       CMD(DO)                                         
0033.00              SNDPGMMSG  MSG(&MSG) TOMSGQ(*TOPGMQ) MSGTYPE(*DIAG)        
0034.00              ENDDO                                                      
0035.00              ENDPGM                                                     
【解説】

QSPRILSP は最後に出力されたスプールの記述を取り出すAPI である。
QSPRILSP によって取得したデータの 39桁目から 6桁のジョブ番号を取り出して戻す。
QSPRILSP は OS V5R2M0 で紹介されたAPI であり、日本語の解説はなく英文のみの解説である。