Tools

51. 活動化グループの存在を検査する CHKACTGRP

現在、このジョブにある活動化グループが活動しているのかどうかを
検査するのがこの CHKACTGRP である。

例えば現在、このジョブがデバッグ・モードで動作しているのか
それともリリース・モードで動作しているのかを調べようとすると
活動化グループ: QTEDBGAG が活動中であるかどうかを調べればよい。
もし QTEDBGAG が活動中であればジョブはデバッグ・モードで実行されていることになる。

しかし活動化グループの存在を検査するコマンドや API もない。
従ってこの CHKACTGRP が必要となった。
活動化グループに QTEDBGAG を指定して CHKACTGRP を実行すれば
QTEDBGAG が存在している、つまりデバッグ・モードであれば
エラーは返ってこない。
しかし CPF1653 : 活動化グループ QTEDBGAG が見つからない。 との
エラーが *ESCAPE として返ってくるので上位のプログラムは

CHKACTGRP ACTGRP(QTEDBGAG)
MONMSG    CPF1600

としてモニターしていれば MONMSG に引っかかった場合は
リリース・モードで活動していることを知ることができる。

【サンプル・ソース: CHKACTGRP 】
0001.00              CMD        PROMPT(' 活動化グループの検査 ')         
0002.00              PARM       KWD(ACTGRP) TYPE(*CHAR) LEN(10) MIN(1) + 
0003.00                           PROMPT(' 活動化グループ ')  
【 CLP: CHKACTGRPC 】
0001.00              PGM        PARM(&ACTGRP)                                   
0002.00 /*-------------------------------------------------------------------*/ 
0003.00 /*   CHKACTGRPC :   活動化グループの検査                             */ 
0004.00 /*                                                                   */ 
0005.00 /*   2017/02/01  作成                                                */ 
0006.00 /*-------------------------------------------------------------------*/ 
0007.00              DCL        VAR(&ACTGRP) TYPE(*CHAR) LEN(10)                
0008.00              MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(NOT_FOUND))     
0009.00                                                                         
0010.00              RCLACTGRP  ACTGRP(&ACTGRP) OPTION(*NORMAL)                 
0011.00              MONMSG     MSGID(CPF1654) EXEC(DO)                         
0012.00              RETURN     /*  存在している  */                            
0013.00              ENDDO                                                      
0014.00                                                                         
0015.00  NOT_FOUND:  SNDPGMMSG  MSGID(CPF1653) MSGF(QSYS/QCPFMSG) +             
0016.00                           MSGDTA(&ACTGRP) MSGTYPE(*ESCAPE)              
0017.00              RETURN                                                     
0018.00              ENDPGM
【解説】

活動化グループが見つかった場合はエラーにはならないが
見つからなかった場合は CPF1653 がエスケープ・メッセージになって戻される。
従って元の呼び出し側のプログラムでは CPF1653 をモニターしておけばよい。
CPF1653 が戻った場合は活動化グループは見つからなかったということである。

読者は少し手を加えれば CPF9801 を *ESCAPE として戻すこともできる。
CPF9801 は CHKOBJ コマンドで見つからなかったときのエラー・メッセージであるので
わかりやすいかも知れない。