CL

94. WRKACTJOBの「機能」の欄の表示を変えるには

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 があるのは少し驚きである。