パネル・グループ出口プログラムとはパネル・グループのイベント駆動によって
呼び出されるプログラムのことである。
例えばパネル・グループで
・オプションとして選択された
・機能キーを押して呼び出された
などである。
パネル・グループは最初にパネル・グループを表示するプログラムは
最初に表示だけさせておいてそれだけである。
後は機能キーを押したり何かエンド・ユーザーの操作によって
別のプログラムを呼び出して実行させる。
この方法は VisualC++, VisualBASIC、などのイベント駆動プログラムと
全く同じ処理構造である。
このようにパネル・グループによって呼び出されるプログラムは
すべて同じパラメータ構造で呼び出されるようになっている。
ここで紹介するのがその構造を持つ処理プログラムである。
[パネル・グループ出口プログラム AA6_SAMPLE]
ソースはこちらから
0001.00 PGM PARM(&RCVPRM) 0002.00 /*-------------------------------------------------------------------*/ 0003.00 /* AA6_SAMPLE: パネル・グループ出口プログラム */ 0004.00 /* */ 0005.00 /* 2020/01/11 作成 */ 0006.00 /*-------------------------------------------------------------------*/ 0007.00 DCL VAR(&RCVPRM) TYPE(*CHAR) LEN(70) 0008.00 DCL VAR(&HANDLE) TYPE(*CHAR) LEN(8) /* + 0009.00 摘要業務ハンドル */ 0010.00 DCL VAR(&LSTHND) TYPE(*CHAR) LEN(4) /* + 0011.00 摘要業務ハンドル */ 0012.00 DCL VAR(&DTALEN) TYPE(*CHAR) LEN(4) /* 2 進数 */ 0013.00 DCL VAR(&VARRCD) TYPE(*CHAR) LEN(10) 0014.00 DCL VAR(&VARDTA) TYPE(*CHAR) LEN(1024) 0015.00 DCL VAR(&MSG) TYPE(*CHAR) LEN(132) 0016.00 DCL VAR(&MSGID) TYPE(*CHAR) LEN(7) 0017.00 DCL VAR(&MSGF) TYPE(*CHAR) LEN(10) 0018.00 DCL VAR(&MSGFLIB) TYPE(*CHAR) LEN(10) 0019.00 DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(132) 0020.00 DCL VAR(&TYPE) TYPE(*CHAR) LEN(1) 0021.00 DCL VAR(&TOPGMQ) TYPE(*CHAR) LEN(10) 0022.00 DCL VAR(&MSGTYPE) TYPE(*CHAR) LEN(10) + 0023.00 VALUE('*ESCAPE ') 0024.00 DCL VAR(&APIERR) TYPE(*CHAR) LEN(116) + 0025.00 VALUE(X'000074') /* 2 進数 */ 0026.00 DCL VAR(&NULL4) TYPE(*CHAR) LEN(4) + 0027.00 VALUE(X'00000000') 0028.00 MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR)) 0029.00 0030.00 /*( 環境の取得 )*/ 0031.00 RTVJOBA TYPE(&TYPE) 0032.00 IF COND(&TYPE *EQ '0') THEN(DO) /* バッチ */ 0033.00 CHGVAR VAR(&TOPGMQ) VALUE('*SYSOPR ') 0034.00 ENDDO /* バッチ */ 0035.00 ELSE CMD(DO) /* 対話式 */ 0036.00 CHGVAR VAR(&TOPGMQ) VALUE('*TOPGMQ ') 0037.00 ENDDO /* 対話式 */ 0038.00 0039.00 /*( パラメータの取得 )*/ 0040.00 CHGVAR VAR(&HANDLE) VALUE(%SST(&RCVPRM 17 8)) 0041.00 CHGVAR VAR(&LSTHND) VALUE(%SST(&RCVPRM 45 4)) 0042.00 0043.00 /*( 選択レコードを検索 )*/ 0044.00 CHGVAR VAR(%BIN(&DTALEN)) VALUE(1024) 0045.00 CALL PGM(QUIGETLE) PARM(&HANDLE &VARDTA &DTALEN + 0046.00 'SFLRCD ' 'SFL ' 'HNDL' 'Y' + 0047.00 ' ' &LSTHND 'N' + 0048.00 &LSTHND &APIERR) 0049.00 IF COND(%SST(&APIERR 5 4) *NE &NULL4) THEN(DO) 0050.00 SNDPGMMSG MSG('CRTWTRCL(1)API: + 0051.00 QUIGETLE の実行で次のエラーが発生しました + 0052.00 。 ') MSGTYPE(*DIAG) 0053.00 GOTO APIERR 0054.00 ENDDO 0055.00 0056.00 /*( SFLRCD の内容を取得 )*/ 0057.00 /*( 処理の開始 -- ここから )*/ 0058.00 /*( 処理の終了 -- ここまで )*/ 0059.00 RETURN 0060.00 0061.00 APIERR: 0062.00 CHGVAR VAR(&MSGID) VALUE(%SST(&APIERR 9 7)) 0063.00 CHGVAR VAR(&MSGDTA) VALUE(%SST(&APIERR 17 100)) 0064.00 CHGVAR VAR(&MSGF) VALUE('QCPFMSG ') 0065.00 CHGVAR VAR(&MSGFLIB) VALUE('QSYS ') 0066.00 GOTO SNDMSG 0067.00 0068.00 ERROR: RCVMSG MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) + 0069.00 MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) + 0070.00 MSGFLIB(&MSGFLIB) 0071.00 SNDMSG: IF COND(&MSGID *EQ ' ') THEN(DO) 0072.00 SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) + 0073.00 TOMSGQ(&TOPGMQ) MSGTYPE(&MSGTYPE) 0074.00 ENDDO 0075.00 ELSE CMD(DO) 0076.00 SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) + 0077.00 MSGDTA(&MSGDTA) TOMSGQ(&TOPGMQ) + 0078.00 MSGTYPE(&MSGTYPE) 0079.00 ENDDO 0080.00 DSPJOBLOG JOB(*) OUTPUT(*PRINT) 0081.00 ENDPGM