RPG

216. API : QUSLJOB : ジョブのリスト

QUSLOBJ はジョブのリストをユーザー・スペース(*USESPC)に出力する API であるが
ここでは QUSLOBJ の使い方と同時に、ジョブの一覧の意味の解説もかねて
QUSLOBJ を紹介する目的がある。

パラメータ

必須パラメータ・グループ:

1.修飾ユーザー・スペース名入力Char(20)
2.形式名入力Char(8)
3.修飾ジョブ名入力Char(26)
4.状況入力Char(10)

任意パラメータ・グループ1:

5.エラー・コード入出力Char(*)

任意パラメータ・グループ2 :

6.ジョブ・タイプ入力Char(1)
7.返されるフィールド数入出力Bynary(4)
8.返されるフィールドのキー入力Bynary(4)の配列

QUSLJOB API は修飾ユーザー・スペース名 ( *USRSPC ) として指定されたユーザー・スペース,
例えば 「USLOBJ   QTEMP」に指定されたジョブの一覧のリストを出力する。

・修飾ジョブ名

ここで指定する修飾ジョブ名とは、

ジョブ名 : * ,*CURRENT, *ALL またはジョブ名
ユーザー名 : ユーザーは、指定された特殊権限を所有していない。
ジョブ番号 : *ALL またはジョブ番号

である。
つまり、あるユーザーのジョブ情報 ( ジョブ名+ユーザー名+ジョブ番号 ) を調べるには
*ALL + (ユーザー名) + *ALL のジョブ情報で QUSLJOB を使って検索することができる。
またジョブ名だけでも検索することができる。

ジョブを特定するにはジョブ番号まで含めて正確に特定しなければならないので
ジョブ番号の検索に QUSLJOB は役に立つAPIである。

・状況

*ACTIVE

・・・・・・

活動ジョブ。ただしここで言う活動ジョブとは WRKACTJOB として表示されている
ジョブだけでなく、グループ・ジョブ、システム要求ジョブや切断されたジョブも含まれている。
QUSLJOB API の使い方で最も注意しなければならないのは、この部分である。
異常終了したジョブを次のサインオンで復活させることができるのは、ご存じだと思うが
あの異常終了したジョブは WRKACTJOB では表示されることはないが、切断されたジョブとして
システム内部に残っている。
QUSLJOB では *ACTIVE を指定しても切断ジョブも一緒に一覧として出力されてしまうので
この点に注意が必要である。
切断ジョブの見分け方については次の API : QUSRJOBI で説明する。

*JOBQ・・・・・・現在、ジョブ待ち行列にあるジョブ
*OUTQ・・・・・・実行は完了したものの、その出力がまだ出力待ち行列にあるジョブ
*ALL・・・・・・状況にかかわらず、すべてのジョブ
【 サンプル・ソース:TESTUSLJOB 】
0001.00 H DFTNAME(TESTUSLJOB) DATEDIT(*YMD/)                                    
0002.00 F********** TESTUSLJOB : ジョブのリスト ******************************* 
0003.00 F*                                                                      
0004.00 F********************************************************************** 
0005.00  /COPY QSYSINC/QRPGLESRC,QUS                                            
0006.00  /COPY QSYSINC/QRPGLESRC,QUSLJOB                                        
0007.00 D USRSPC          DS                                                    
0008.00 D  USNAME                 1     10    INZ('USLJOB    ')                 
0009.00 D  USLIB                 11     20    INZ('QTEMP     ')                 
0010.00 D APIERR          DS                                                    
0011.00 D  GETBYT                 1      4B 0 INZ(160)                          
0012.00 D  AVLBYT                 5      8B 0 INZ(0)                            
0013.00 D  MSGID                  9     15                                      
0014.00 D  MSGDTA                17    160                                      
0015.00                                                                         
0016.00 D SPCBIN          DS                                                    
0017.00 D  INZSIZE                1      4B 0 INZ(1000)                         
0018.00 D  MSGDTALEN              5      8B 0 INZ(100)                          
0019.00 D  PGMSTKCNT              9     12B 0 INZ(1)                            
0020.00 D  STRPOS                       10I 0                                   
0021.00 D  LENDTA                       10I 0                                   
0022.00 D  N                             4S 0                                   
0023.00 D  DATE                          6A                                     
0024.00 D  TIME                          6A                                     
0025.00                                                                         
0026.00 D MSGFILLIB       DS                                                    
0027.00 D   MSGF                  1     10A   INZ('QCPFMSG   ')                 
0028.00 D   MSGFLIB               2     20A   INZ('QSYS      ')                 
0029.00                                                                         
0030.00 D JOBINFO         DS                                                    
0031.00 D   JOB                         10A   INZ('*ALL      ')                 
0032.00 D   USER                        10A   INZ('QTMHHTTP  ')                 
0033.00 D   JOBNBR                       6A   INZ('*ALL  ')                     
0034.00                                                                         
0035.00 D HEDSTR          DS           256                                      
0036.00 D  OFFSET                 1      4B 0                                   
0037.00 D  NOENTR                 9     12B 0                                   
0038.00 D  LSTSIZ                13     16B 0                                   
0039.00                                                                         
0040.00 C*(1) ユーザースペースの作成                                            
0041.00 C*-------------------------------------------------------------------+  
0042.00 C                   CALL      'QUSCRTUS'                           99   
0043.00 C                   PARM                    USRSPC                      
0044.00 C                   PARM      'PF        '  ATTR             10         
0045.00 C                   PARM                    INZSIZE                     
0046.00 C                   PARM                    INZCHR            1         
0047.00 C                   PARM      '*ALL      '  PUBAUT           10         
0048.00 C                   PARM      'USLJOB'      USRTXT           50         
0049.00 C                   PARM      '*YES      '  REPLCE           10         
0050.00 C                   PARM                    APIERR                      
0051.00 C*-------------------------------------------------------------------+  
0052.00 C     AVLBYT        IFGT      *ZEROS                                    
0053.00 C                   EXSR      SNDERRMSG                                 
0054.00 C                   ENDIF                                               
0055.00                                                                         
0056.00 C*(2) QUSLJOB : ジョブ・リスト                                          
0057.00 C*-------------------------------------------------------------------+  
0058.00 C                   CALL      'QUSLJOB'                            99   
0059.00 C                   PARM                    USRSPC                      
0060.00 C                   PARM      'JOBL0100'    FORMAT            8         
0061.00 C                   PARM                    JOBINFO                     
0062.00 C                   PARM      '*ACTIVE   '  JOBTYPE          10         
0063.00 C                   PARM                    APIERR                     
0064.00 C*-------------------------------------------------------------------+ 
0065.00 C     AVLBYT        CABNE     *ZEROS        SNDERR                     
0066.00                                                                        
0067.00 C*(3) QUSRTVUS : ヘッダー構造の読み取り                                
0068.00 C*-------------------------------------------------------------------+ 
0069.00 C                   CALL      'QUSRTVUS'                           99  
0070.00 C                   PARM                    USRSPC                     
0071.00 C                   PARM      125           STRPOS                     
0072.00 C                   PARM      16            LENDTA                     
0073.00 C                   PARM                    HEDSTR                     
0074.00 C                   PARM                    APIERR                     
0075.00 C*-------------------------------------------------------------------+ 
0076.00 C     AVLBYT        CABNE     *ZEROS        SNDERR                     
0077.00                                                                        
0078.00 C*(4) QUSRTVUS : リスト・セクションの読み取り                          
0079.00 C*    HEADER によって OFFSET,LSTSIZ を受取った                         
0080.00 C                   Z-ADD     OFFSET        STRPOS                     
0081.00 C                   ADD       1             STRPOS                     
0082.00 C                   Z-ADD     LSTSIZ        LENDTA                     
0083.00 C*     リスト・サイズの分だけ LOOP して検索                            
0084.00 C     1             DO        NOENTR        N                           
0085.00 C*----------------------------------------------------+                 
0086.00 C                   CALL      'QUSRTVUS'                           99   
0087.00 C                   PARM                    USRSPC                      
0088.00 C                   PARM                    STRPOS                      
0089.00 C                   PARM                    LENDTA                      
0090.00 C                   PARM                    QUSL010002                  
0091.00 C*----------------------------------------------------+                 
0092.00 C*      ------( 処理の開始 - ここから )------                           
0093.00 C                   MOVEL     QUSJNU        JOB                         
0094.00 C                   MOVEL     QUSUNU        USER                        
0095.00 C                   MOVEL     QUSJNBRU      JOBNBR                      
0096.00 C     'JOB='        CAT(P)    JOBINFO:0     DSP40            40         
0097.00 C     DSP40         DSPLY                                               
0098.00 C*      ------( 処理の終了 - ここまで )------                           
0099.00 C                   ADD       LENDTA        STRPOS                      
0100.00 C                   END                                                 
0101.00                                                                         
0102.00 C     '* EOF *'     DSPLY                   ANS               1         
0103.00 C                   SETON                                        LR     
0104.00 C                   RETURN                                              
0105.00 C     SNDERR        TAG                                                 
0106.00 C                   EXSR      SNDERRMSG                                 
0107.00 C                   SETON                                        LR     
0108.00 C                   RETURN                                              
0109.00 C******************************************************                 
0110.00 C     SNDERRMSG     BEGSR                                               
0111.00 C******************************************************                 
0112.00 C*----------------------------------------------------+                 
0113.00 C                   CALL      'QMHSNDPM'                           99   
0114.00 C                   PARM                    MSGID                       
0115.00 C                   PARM                    MSGFILLIB                   
0116.00 C                   PARM                    MSGDTA                      
0117.00 C                   PARM                    MSGDTALEN                   
0118.00 C                   PARM      '*ESCAPE   '  MSGTYPE          10         
0119.00 C                   PARM      '*PGMBDY   '  PGMQUE           10         
0120.00 C                   PARM                    PGMSTKCNT                   
0121.00 C                   PARM                    MSGKEY            4         
0122.00 C                   PARM                    APIERR                      
0123.00 C*----------------------------------------------------+                 
0124.00 C                   SETON                                        LR     
0125.00 C                   RETURN                                              
0126.00 C                   ENDSR                                               
【解説】

最初に QUSCRTUS API を使って QTEMP/USLJOB *USRSPC を作成しておく。

0040.00 C*(1) ユーザースペースの作成                                            
0041.00 C*-------------------------------------------------------------------+  
0042.00 C                   CALL      'QUSCRTUS'                           99   
0043.00 C                   PARM                    USRSPC                      
0044.00 C                   PARM      'PF        '  ATTR             10         
0045.00 C                   PARM                    INZSIZE                     
0046.00 C                   PARM                    INZCHR            1         
0047.00 C                   PARM      '*ALL      '  PUBAUT           10         
0048.00 C                   PARM      'USLJOB'      USRTXT           50         
0049.00 C                   PARM      '*YES      '  REPLCE           10         
0050.00 C                   PARM                    APIERR                      
0051.00 C*-------------------------------------------------------------------+ 

次に QUSLJOB API によって

0056.00 C*(2) QUSLJOB : ジョブ・リスト                                          
0057.00 C*-------------------------------------------------------------------+  
0058.00 C                   CALL      'QUSLJOB'                            99   
0059.00 C                   PARM                    USRSPC                      
0060.00 C                   PARM      'JOBL0100'    FORMAT            8         
0061.00 C                   PARM                    JOBINFO                     
0062.00 C                   PARM      '*ACTIVE   '  JOBTYPE          10         
0063.00 C                   PARM                    APIERR                      
0064.00 C*-------------------------------------------------------------------+  

のようにしてユーザー QTMHHTTP のジョブをユーザー・スペース QTEMP/USLJOB に出力する。
ただし出力されたジョブは活動中のジョブだけでなく異常終了したジョブも含まれている場合が
ある。

異常終了したジョブの見分け方は次のAPI : QUSRJOBI で解説することとする。

【実行結果】

TESTUSLJOB