WRKACTJOB の「機能」の欄を意識的にご覧になったことはあるだろうか ?
現在、活動中のプログラム名が表示されているのは
理解できると思うが必ずしも実行スタックの一番下の
ベースのなるプログラムが表示されているわけではない。
適用業務によってはこの表示をユーザーにわかりやすい
スタックが表示されているように工夫したい場合がある。
通常の業務ではそのようなニーズは起こらないかも知れないが
ソフトウェア製品となるとかなり細かい配慮が必要となる。
API:現行ジョブの変更: QWCCCJOB
は何の目的で使うのだろうか? と思われる API だが
このことを実現してくれる API である。
【サンプル・ソース: TESTWCCJ】
0001.00 PGM 0002.00 /*-------------------------------------------------------------------*/ 0003.00 /* TESTWCCJ : 現行ジョブの変更 */ 0004.00 /* */ 0005.00 /* 2017/02/01 作成 */ 0006.00 /*-------------------------------------------------------------------*/ 0007.00 DCL VAR(&PGM) TYPE(*CHAR) LEN(10) 0008.00 DCL VAR(&KEYBUF) TYPE(*CHAR) LEN(22) 0009.00 DCL VAR(&KEYSU) TYPE(*CHAR) LEN(4) + 0010.00 VALUE(X'00000001') 0011.00 DCL VAR(&KEY3) TYPE(*CHAR) LEN(4) + 0012.00 VALUE(X'00000003') 0013.00 DCL VAR(&KEYL) TYPE(*CHAR) LEN(4) + 0014.00 VALUE(X'0000000A') 0015.00 DCL VAR(&APIERR) TYPE(*CHAR) LEN(116) + 0016.00 VALUE(X'000074') /* 2 進数 */ 0017.00 0018.00 CHGVAR VAR(&PGM) VALUE('PGM201 ') 0019.00 /*( WRKACTJOB に現在のプログラム名を表示する )*/ 0020.00 CHGVAR VAR(%BIN(&KEYL)) VALUE(10) 0021.00 CHGVAR VAR(%SST(&KEYBUF 1 4)) VALUE(&KEYSU) 0022.00 CHGVAR VAR(%SST(&KEYBUF 5 4)) VALUE(&KEY3) 0023.00 CHGVAR VAR(%SST(&KEYBUF 9 4)) VALUE(&KEYL) 0024.00 CHGVAR VAR(%SST(&KEYBUF 13 10)) VALUE(&PGM) 0025.00 CALL PGM(QWCCCJOB) PARM(&KEYBUF &APIERR) 0026.00 DLYJOB DLY(10) 0027.00 RETURN 0028.00 0029.00 ENDPGM
【解説】
サンプル・ソースは簡単に見せるために意図的にエラー・モニターなどは
記述していない。
要は
CALL PGM(QWCCCJOB) PARM(&KEYBUF &APIERR)
だけの実行だけで変数 &PGM に任意のプログラム名を与えればよい。
このプログラムが実行された後のジョブを WRKACTJOB で参照すると
QPADEV01FT QTR INT .0 USR-PGM201
のように表示される。ただしこれはこのプログラムが実行している間だけであり
DLYJOB DLY(10)
による 10
秒経過後には表示は消滅する。
従って実行させたいプログラムが表示される直前で API : QWCCCJOB
を
使って「機能」の欄を更新させればよいことになる。
こんなことまで実現してくれる API があるのは少し驚きである。