パネル・グループのオープン/クローズと表示について理解できたところで、今度はパネル・グループへの変数値のセットの方法について紹介する。
パネル・グループの定義の中でレコードの定義があるがレコードが App とPNLGRPのあいだの変数のやり取りを介在する媒体である。
先の例のレコードには
:VARRCD NAME=MODRCD VARS='DSPMOD'.
という MODRCD という名前のレコードと というKEYRCD という名前のレコードが定義されていた。 を追加すると、ソース全体は次のようになる。 銀行コードの右上のモードが表示されて実行結果は次のようになる。 この例では変数のセットに QUIPUTV を使用したが変数の値の取得には
:VARRCD NAME=KEYRCD
VARS=’BKBKCD DMY’.
レコードへの書き込みは QUIPUTV という APIによって実行できる。
そこで先のソースに
DCL VAR(&DSPDTA) TYPE(*CHAR) LEN(1024)
DCL VAR(&DTALEN) TYPE(*CHAR) LEN(4) /* 2 進数 */
/*(QUIPUTV: 変数の更新 )*/
CHGVAR VAR(&DSPDTA) VALUE(' 変更 ')
CHGVAR VAR(%BIN(&DTALEN)) VALUE(6)
CALL PGM(QUIPUTV) PARM(&HANDLE &DSPDTA &DTALEN +
'MODRCD ' &APIERR)
CHGVAR VAR(&DSPDTA) VALUE('0001')
CHGVAR VAR(%BIN(&DTALEN)) VALUE(5)
CALL PGM(QUIPUTV) PARM(&HANDLE &DSPDTA &DTALEN +
'KEYRCD ' &APIERR)
【 CLPソース】
0001.00 PGM
0002.00 /*---------------------------------------------------------*/
0003.00 /* BNK001CL : パネル表示 */
0004.00 /*---------------------------------------------------------*/
0005.00 DCL VAR(&MSG) TYPE(*CHAR) LEN(80)
0006.00 DCL VAR(&HANDLE) TYPE(*CHAR) LEN(8) /* +
0007.00 摘要業務ハンドル */
0008.00 DCL VAR(&PNLGRPLIB) TYPE(*CHAR) LEN(20) +
0009.00 VALUE('BNK001 TESTOBJ ')
0010.00 DCL VAR(&AREA) TYPE(*CHAR) LEN(4) /* 2 進数 */
0011.00 DCL VAR(&DEC08) TYPE(*DEC) LEN(8 0)
0012.00 DCL VAR(&EXITPG) TYPE(*CHAR) LEN(4) +
0013.00 VALUE(X'00000000') /* 2 進数 */
0014.00 DCL VAR(&FNCTON) TYPE(*CHAR) LEN(4) /* 2 進数 */
0015.00 DCL VAR(&PANEL) TYPE(*CHAR) LEN(10) +
0016.00 VALUE('DSPHEAD ')
0017.00 DCL VAR(&AGAIN) TYPE(*CHAR) LEN(1) VALUE(Y)
0018.00 DCL VAR(&APIERR) TYPE(*CHAR) LEN(4) +
0019.00 VALUE(X'00000000') /* 2 進数 */
0020.00 DCL VAR(&USRTSK) TYPE(*CHAR) LEN(1) VALUE(N)
0021.00 DCL VAR(&STACK) TYPE(*CHAR) LEN(4) +
0022.00 VALUE(X'00000000') /* 2 進数 */
0023.00 DCL VAR(&UIMMSG) TYPE(*CHAR) LEN(10) VALUE(*CALLER)
0024.00 DCL VAR(&MSGKEY) TYPE(*CHAR) LEN(4)
0025.00 DCL VAR(&CSROPT) TYPE(*CHAR) LEN(1) VALUE(D)
0026.00 DCL VAR(&LASLST) TYPE(*CHAR) LEN(4) VALUE(NONE)
0027.00 DCL VAR(&ERRLST) TYPE(*CHAR) LEN(4)
0028.00 DCL VAR(&WAITTIME) TYPE(*CHAR) LEN(4) +
0029.00 VALUE(X'FFFFFFFF') /* 2 進数 */
0030.00 DCL VAR(&CF03) TYPE(*CHAR) LEN(4) +
0031.00 VALUE(X'00000003') /* 2 進数 */
0032.00 DCL VAR(&ENTER) TYPE(*CHAR) LEN(4) +
0033.00 VALUE(X'0000001B') /* 2 進数 */
0034.00 DCL VAR(&DSPDTA) TYPE(*CHAR) LEN(1024)
0035.00 DCL VAR(&DTALEN) TYPE(*CHAR) LEN(4) /* 2 進数 */
0036.00 /* MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR)) */
0037.00
0038.00 /*( QUIOPNDA : パネル・グループのオープン )*/
0039.00 CHGVAR VAR(&DEC08) VALUE(-1)
0040.00 CHGVAR VAR(%BIN(&AREA)) VALUE(&DEC08)
0041.00 CALL PGM(QUIOPNDA) PARM(&HANDLE &PNLGRPLIB &AREA +
0042.00 &EXITPG 'N' &APIERR)
0043.00 /*(QUIPUTV: 変数の更新 )*/
0044.00 CHGVAR VAR(&DSPDTA) VALUE(' 変更 ')
0045.00 CHGVAR VAR(%BIN(&DTALEN)) VALUE(6)
0046.00 CALL PGM(QUIPUTV) PARM(&HANDLE &DSPDTA &DTALEN +
0047.00 'MODRCD ' &APIERR)
0048.00 CHGVAR VAR(&DSPDTA) VALUE('0001')
0049.00 CHGVAR VAR(%BIN(&DTALEN)) VALUE(5)
0050.00 CALL PGM(QUIPUTV) PARM(&HANDLE &DSPDTA &DTALEN +
0051.00 'KEYRCD ' &APIERR)
0052.00 /*( QUIDSPP : パネル表示 )*/
0053.00 DSPLY: CALL PGM(QUIDSPP) PARM(&HANDLE &FNCTON &PANEL +
0054.00 &AGAIN &APIERR &USRTSK &STACK &UIMMSG +
0055.00 &MSGKEY &CSROPT &LASLST &ERRLST &WAITTIME)
0056.00 MONMSG MSGID(CPF6A95)
0057.00 /*( CF03 )= 終了 */
0058.00 IF COND(&FNCTON *EQ &CF03) THEN(DO)
0059.00 /*( QUICLOA : パネル・グループのクローズ )*/
0060.00 CALL PGM(QUICLOA) PARM(&HANDLE 'M' &APIERR)
0061.00 RETURN
0062.00 ENDDO
0063.00 /*( 実行キー )*/
0064.00 IF COND(&FNCTON *EQ &ENTER) THEN(DO)
0065.00 GOTO CMDLBL(DSPLY)
0066.00 ENDDO
0067.00
0068.00 ERROR: RCVMSG RMV(*NO) MSG(&MSG)
0069.00 SNDPGMMSG MSG(&MSG) MSGTYPE(*DIAG)
0070.00 ENDPGM
【 実行結果 】
BNK001 銀行マスターの登録
モード : 変更
銀行コード . . . . . 0001
登録または変更するコードを打鍵して実行キーを押してください。
QUIGETV API
を使用する。