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
で解説することとする。