ジョブ記述の情報を API で取得 (V5R4)

ジョブ記述の情報を API で取得するサンプル・プログラムを書いてみました。

例によって情報を取ってくるところまでなので、どう、何に書き込むかは各自の用途にあわせてください。

ジョブ記述については、RTV コマンドもないし、DSPJOBD コマンドにも *OUTFILE オプションがなかったりするので、プログラムの中でその情報を使用したい時には確かにちょっと不便なことがありますね。


API としては Retrieve Job Description Information (QWDRJOBD) を使用します。


  Required Parameter Group:

1 Receiver variable Output Char(*)
2 Length of receiver variable Input Binary(4)
3 Format name Input Char(8)
4 Qualified job description name Input Char(20)
5 Error code I/O Char(*)

  Default Public Authority: *USE

  Threadsafe: No

使用するフォーマットは JOBD0100 というものです。

Offset Type Field
Dec Hex
0 0 BINARY(4) Bytes returned
4 4 BINARY(4) Bytes available
8 8 CHAR(10) Job description name
18 12 CHAR(10) Job description library name
28 1C CHAR(10) User name
38 26 CHAR(8) Job date
46 2E CHAR(8) Job switches
54 36 CHAR(10) Job queue name
64 40 CHAR(10) Job queue library name
74 4A CHAR(2) Job queue priority
76 4C CHAR(10) Hold on job queue
86 56 CHAR(10) Output queue name
96 60 CHAR(10) Output queue library name
106 6A CHAR(2) Output queue priority
108 6C CHAR(10) Printer device name
118 76 CHAR(30) Print text
148 94 BINARY(4) Syntax check severity
152 98 BINARY(4) End severity
156 9C BINARY(4) Message logging severity
160 A0 CHAR(1) Message logging level
161 A1 CHAR(10) Message logging text
171 AB CHAR(10) Logging of CL programs
181 B5 CHAR(10) Inquiry message reply
191 BF CHAR(13) Device recovery action
204 CC CHAR(10) Time-slice end pool
214 D6 CHAR(15) Accounting code
229 E5 CHAR(80) Routing data
309 135 CHAR(50) Text description
359 167 CHAR(1) Reserved
360 168 BINARY(4) Offset to initial library list
364 16C BINARY(4) Number of libraries in initial library list
368 170 BINARY(4) Offset to request data
372 174 BINARY(4) Length of request data
376 178 BINARY(4) Job message queue maximum size
380 17C CHAR(10) Job message queue full action
390 186 CHAR(10) CYMD job date
400 190 CHAR(10) Allow multiple threads
410 19A CHAR(10) Spooled file action
420 1A4 BINARY(4) Offset to initial ASP group information
424 1A8 BINARY(4) Number of initial ASP group information entries
428 1AC BINARY(4) Length of one initial ASP group information entry
432 1B0 CHAR(10) DDM conversation
Start of change442 1BA CHAR(10) Job log output
452 1C4 End of change CHAR(*) Reserved
* * ARRAY (*) of CHAR(11) Initial library list
* * CHAR(*) Request data
    Array(*) of CHAR(*) Initial ASP group information entry

↑を見てみるとわかりますが、返ってくる情報の中に「Initial Library list」と「Request data」、「Initial ASP group information entry」と 3つの可変領域があります。
今回は、こういったケースの ILE RPG でのコーディング・サンプルにもなっています。

     **-- Header specifications:  --------------------------------------------**                    
     H Option( *SrcStmt )                                                                           
     **                                                                                             
     D GetJobdInf      PR                                                                           
     D  JobD                         10a                                                            
     D  Lib                          10a                                                            
     D GetJobdInf      PI                                                                           
     D  pJobD                        10a                                                            
     D  pLib                         10a                                                            
     **                                                                                             
     **-- Api error data structure:                                                                 
     D ERRC0100        Ds                  Qualified                                                
     D  BytPro                       10i 0 Inz( %Size( ERRC0100 ))                                  
     D  BytAvl                       10i 0 Inz                                                      
     D  MsgId                         7a                                                            
     D                                1a                                                            
     D  MsgDta                      128a                                                            
     **-- Global variables:                                                                         
     D ApiRcvSiz       s             10u 0                                                          
     **                                                                                             
     D JOBD0100        Ds                  Based( pJobdInf )  Qualified                             
     D  BytRtn                       10i 0                                                          
     D  BytAvl                       10i 0                                                          
     D  JobdNam                      10a                                                            
     D  JobdLib                      10a                                                            
     D  user                         10a                                                            
     D  Date                          8a                                                            
     D  SWS                           8a                                                            
     D  JobqNam                      10a                                                            
     D  JobqLib                      10a                                                            
     D  JobqPty                       2a                                                            
     D  Hold                         10a                                                            
     D  OutqNam                      10a                                                            
     D  OutqLib                      10a                                                            
     D  OutqPty                       2a                                                            
     D  Prtdev                       10a                                                            
     D  PrtTxt                       30a                                                            
     D  SynchkSev                    10i 0                                                          
     D  EndSev                       10i 0                                                          
     D  MsglogSev                    10i 0                                                          
     D  MsglogLvl                     1a                                                            
     D  MsglogTxt                    10a                                                            
     D  LogClPgm                     10a                                                            
     D  InqMsgRpy                    10a                                                            
     D  DevRcyAcn                    13a                                                            
     D  TsePool                      10a                                                            
     D  AcgCode                      15a                                                            
     D  RtgDta                       80a                                                            
     D  Text                         50a                                                            
     D  rsvd1                         1a                                                            
     D  OfsInlLibl                   10i 0                                                          
     D  NbrInlLibl                   10i 0                                                          
     D  OfsRqsDta                    10i 0                                                          
     D  LenRqsDta                    10i 0                                                          
     D  JobMsgQMx                    10i 0                                                          
     D  JobMsgqFl                    10a                                                            
     D  CYMD                         10a                                                            
     D  AlwMltThd                    10a                                                            
     D  SplFAcn                      10a                                                            
     D  OfsInlASPGrp                 10i 0                                                          
     D  NbrInlASPGrp                 10i 0                                                          
     D  lenInlASPGrp                 10i 0                                                          
     D  DDMCnv                       10a                                                            
     D  LogOutput                    10a                                                            
     **                                                                                             
     D INLLIBL         Ds                  Based( pLiblInf )  Qualified                             
     D  Library                      11a                                                            
     **                                                                                             
     D RQSDTA          Ds                  Based( pRqsdInf )  Qualified                             
     D  Data                        256a                                                            
     **                                                                                             
     D INLASPGRP       Ds                  Based( pIAspInf )  Qualified                             
     D  ASPGRP                       10a                                                            
     D  rsvd                          1a                                                            
     **                                                                                             
     **-- Retrieve JobD information:                                                                
     D RtvJobDInf      Pr                  ExtPgm( 'QWDRJOBD' )                                     
     D  spRcvVar                  65535a   Options( *VarSize )                                      
     D  spRcvVarLen                  10i 0 Const                                                    
     D  spFmtNam                      8a   Const                                                    
     D  spJobDNam                    20a   Const                                                    
     D  spError                   32767a         Options( *VarSize: *Omit )                         
     **                                                                                             
     D  JobDNamLib     s             20a                                                            
     D  i              s             10u 0                                                          
     **                                                                                             
     D  wRqsDta        s            256a                                                            
     D  wLIBL          s             10a                                                            
     D  wIASP          s             10a                                                            
      /Free                                                                                         
                                                                                                    
             *inLR = *on;                                                                           
                                                                                                    
             ApiRcvSiz = 65535;                                                                     
             pJobDInf   = %Alloc( ApiRcvSiz );                                                      
             JOBD0100.BytAvl = *Zero;                                                               
                                                                                                    
             If pLib  =  *blanks ;                                                                  
                pLib  = '*LIBL    ' ;                                                               
             EndIf ;                                                                                
             If pJobD <> *blanks ;                                                                  
                JobDNamLib = pJobD + pLib ;                                                         
             Else ;                                                                                 
                return ;                                                                            
             EndIf ;                                                                                
                                                                                                    
             DoU  JOBD0100.BytAvl <= ApiRcvSiz     Or                                               
                  ERRC0100.BytAvl  > *Zero;                                                         
                                                                                                    
               If  JOBD0100.BytAvl > ApiRcvSiz;                                                     
                 ApiRcvSiz  = JOBD0100.BytAvl;                                                      
                 pJobdInf    = %ReAlloc( pJobdInf: ApiRcvSiz );                                     
               EndIf;                                                                               
                                                                                                    
               RtvJobDInf( JOBD0100                                                                 
                         : ApiRcvSiz                                                                
                         : 'JOBD0100'                                                               
                         : JobDNamLib                                                               
                         : ERRC0100                                                                 
                          );                                                                        
              EndDo;                                                                                
                                                                                                    
              If  ERRC0100.BytAvl = *Zero;                                                          
                                                                                                    
                pRqsdinf  =  pJobdInf + JOBD0100.OfsRqsDta ;                                        
                wRqsDta = %subst(RQSDTA.Data:1:JOBD0100.LenRqsDta) ;                                
                                                                                                    
                pLiblinf  =  pJobdInf + JOBD0100.OfsInlLibl ;                                       
                for i = 1 to JOBD0100.NbrInlLibl ;                                                  
                wLIBL = INLLIBL.Library ;                                                           
                  pLiblinf  =  pLiblInf + 11 ;                                                      
                endfor ;                                                                            
                                                                                                    
                pIaspinf  =  pJobdInf + JOBD0100.OfsInlASPGrp ;                                     
                for i = 1 to JOBD0100.NbrInlASPGrp ;                                                
                wIASP = %subst(INLASPGRP:1:JOBD0100.LenInlASPGrp) ;                                 
                  pIaspinf  =  pIaspInf + JOBD0100.LenInlASPGrp ;                                   
                endfor ;                                                                            
                                                                                                    
              EndIf;                                                                                
                                                                                                    
              Dealloc pJobDInf ;                                                                    
                                                                                                    
              return;                                                                               
                                                                                                    
      /End-Free

ちょっとわかりにくいかもしれませんが、↓のようなところが変数なりデータベースになり書き込みを行うタイミングになりますね。

              If  ERRC0100.BytAvl = *Zero;                                                          
                                                                                                    
                pRqsdinf  =  pJobdInf + JOBD0100.OfsRqsDta ;                                        
                wRqsDta = %subst(RQSDTA.Data:1:JOBD0100.LenRqsDta) ;                                
                                                                                                    
                pLiblinf  =  pJobdInf + JOBD0100.OfsInlLibl ;                                       
                for i = 1 to JOBD0100.NbrInlLibl ;                                                  
                  wLIBL = INLLIBL.Library ;                                                           
                  // INLLIBL(i)  =  wLIBL ;                                   
                  pLiblinf  =  pLiblInf + 11 ;                                                      
                endfor ;                                                                            
                                                                                                    
                pIaspinf  =  pJobdInf + JOBD0100.OfsInlASPGrp ;                                     
                for i = 1 to JOBD0100.NbrInlASPGrp ;                                                
                  wIASP = %subst(INLASPGRP:1:JOBD0100.LenInlASPGrp) ;                                 
                  // IASP(i)  =  wIASP ;                                   
                  pIaspinf  =  pIaspInf + JOBD0100.LenInlASPGrp ;                                   
                endfor ;                                                                            
                                                                                                    
                // exec SQL  INSERT (gathered info like JOBD0100, wRqsDta, INLLIBL(n), IASP(n)) ;

              EndIf;                                                                                
                                                                                                    
              // exec SQL  COMMIT ;

              Dealloc pJobDInf ;                                                                    
                                                                                                    
              return;

[Top Pageに戻る]

Ads by TOK2