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である。
・状況
| ・・・・・・ | 活動ジョブ。ただしここで言う活動ジョブとは |
*JOBQ | ・・・・・・ | 現在、ジョブ待ち行列にあるジョブ |
*OUTQ | ・・・・・・ | 実行は完了したものの、その出力がまだ出力待ち行列にあるジョブ |
*ALL | ・・・・・・ | 状況にかかわらず、すべてのジョブ |
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 で解説することとする。
