現在、このジョブにある活動化グループが活動しているのかどうかを
検査するのがこの CHKACTGRP である。
例えば現在、このジョブがデバッグ・モードで動作しているのか
それともリリース・モードで動作しているのかを調べようとすると
活動化グループ: QTEDBGAG が活動中であるかどうかを調べればよい。
もし QTEDBGAG が活動中であればジョブはデバッグ・モードで実行されていることになる。
しかし活動化グループの存在を検査するコマンドや API もない。
従ってこの CHKACTGRP が必要となった。
活動化グループに QTEDBGAG を指定して CHKACTGRP を実行すれば
QTEDBGAG が存在している、つまりデバッグ・モードであれば
エラーは返ってこない。
しかし CPF1653 : 活動化グループ QTEDBGAG が見つからない。 との
エラーが *ESCAPE
として返ってくるので上位のプログラムは
CHKACTGRP ACTGRP(QTEDBGAG) MONMSG CPF1600
としてモニターしていれば MONMSG に引っかかった場合は
リリース・モードで活動していることを知ることができる。
0001.00 CMD PROMPT(' 活動化グループの検査 ') 0002.00 PARM KWD(ACTGRP) TYPE(*CHAR) LEN(10) MIN(1) + 0003.00 PROMPT(' 活動化グループ ')
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 コマンドで見つからなかったときのエラー・メッセージであるので
わかりやすいかも知れない。