それでは CLP によるSFLレコードの読み取りを紹介しよう。
リストの読み取りは最初はリスト・ハンドルがわからないので FRST として最初のリスト項目を読み取るように指示する。
API QUIGETLE の読み取り後、リスト項目のハンドルが取得できているはずなので、以降は リスト・ハンドルを指定して NEXT で次々と読み取ることができる。
以下のソースではリスト項目を読み取って,メッセージとして出力している例である。
【 CLPソース】
0001.00 PGM 0002.00 /*---------------------------------------------------------*/ 0003.00 /* BNK003CL : パネル表示 */ 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('BNK003 TESTOBJ ') 0010.00 DCL VAR(&AREA) TYPE(*CHAR) LEN(4) + 0011.00 VALUE(X'FFFFFFFF') /* 2 進数 */ 0012.00 DCL VAR(&DEC08) TYPE(*DEC) LEN(8 0) 0013.00 DCL VAR(&EXITPG) TYPE(*CHAR) LEN(4) + 0014.00 VALUE(X'00000000') /* 2 進数 */ 0015.00 DCL VAR(&FNCTON) TYPE(*CHAR) LEN(4) /* 2 進数 */ 0016.00 DCL VAR(&PANEL) TYPE(*CHAR) LEN(10) + 0017.00 VALUE('DSPTOP ') 0018.00 DCL VAR(&AGAIN) TYPE(*CHAR) LEN(1) VALUE(Y) 0019.00 DCL VAR(&APIERR) TYPE(*CHAR) LEN(4) + 0020.00 VALUE(X'00000000') /* 2 進数 */ 0021.00 DCL VAR(&USRTSK) TYPE(*CHAR) LEN(1) VALUE(N) 0022.00 DCL VAR(&STACK) TYPE(*CHAR) LEN(4) + 0023.00 VALUE(X'00000000') /* 2 進数 */ 0024.00 DCL VAR(&UIMMSG) TYPE(*CHAR) LEN(10) VALUE(*CALLE 0025.00 DCL VAR(&MSGKEY) TYPE(*CHAR) LEN(4) 0026.00 DCL VAR(&CSROPT) TYPE(*CHAR) LEN(1) VALUE(D) 0027.00 DCL VAR(&LASLST) TYPE(*CHAR) LEN(4) VALUE(NONE) 0028.00 DCL VAR(&ERRLST) TYPE(*CHAR) LEN(4) 0029.00 DCL VAR(&WAITTIME) TYPE(*CHAR) LEN(4) + 0030.00 VALUE(X'FFFFFFFF') /* 2 進数 */ 0031.00 DCL VAR(&CF03) TYPE(*CHAR) LEN(4) + 0032.00 VALUE(X'00000003') /* 2 進数 */ 0033.00 DCL VAR(&ENTER) TYPE(*CHAR) LEN(4) + 0034.00 VALUE(X'0000001B') /* 2 進数 */ 0035.00 DCL VAR(&DSPDTA) TYPE(*CHAR) LEN(1024) 0036.00 DCL VAR(&DTALEN) TYPE(*CHAR) LEN(4) /* 2 進数 */ 0037.00 DCLF FILE(TESTFIL/BANKM) 0038.00 DCL VAR(&NO) TYPE(*CHAR) LEN(4) 0039.00 DCL VAR(&N) TYPE(*DEC) LEN(4 0) VALUE(1) 0040.00 DCL VAR(&LHANDL) TYPE(*CHAR) LEN(4) 0041.00 DCL VAR(&LSTHND) TYPE(*CHAR) LEN(4) 0042.00 /* MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR)) */ 0043.00 0044.00 /*( QUIOPNDA : パネル・グループのオープン )*/ 0045.00 CALL PGM(QUIOPNDA) PARM(&HANDLE &PNLGRPLIB &AREA + 0046.00 &EXITPG 'N' &APIERR) 0047.00 /*(BANKM: 銀行マスターの読み取り )*/ 0048.00 READ: RCVF RCDFMT(@BANKM) 0049.00 MONMSG MSGID(CPF0800) EXEC(GOTO CMDLBL(REDEND)) 0050.00 CHGVAR VAR(&NO) VALUE(&N) 0051.00 CHGVAR VAR(&DSPDTA) VALUE(&BKBKCD *CAT &BKNMKJ *CAT + 0052.00 &BKKBN *CAT &NO) 0053.00 CHGVAR VAR(%BIN(&DTALEN)) VALUE(26) 0054.00 CALL PGM(QUIADDLE) PARM(&HANDLE &DSPDTA &DTALEN + 0055.00 'SFLRCD ' 'SFL ' 'NEXT' &LHANDL + 0056.00 &APIERR) 0057.00 CHGVAR VAR(&N) VALUE(&N + 1) 0058.00 GOTO READ 0059.00 REDEND: 0060.00 /*( QUIDSPP : パネル表示 )*/ 0061.00 DSPLY: CALL PGM(QUIDSPP) PARM(&HANDLE &FNCTON &PANEL + 0062.00 &AGAIN &APIERR &USRTSK &STACK &UIMMSG + 0063.00 &MSGKEY &CSROPT &LASLST &ERRLST &WAITTIME) 0064.00 MONMSG MSGID(CPF6A95) 0065.00 /*( CF03 )= 終了 */ 0066.00 IF COND(&FNCTON *EQ &CF03) THEN(DO) 0067.00 /*( QUICLOA : パネル・グループのクローズ )*/ 0068.00 CALL PGM(QUICLOA) PARM(&HANDLE 'M' &APIERR) 0069.00 RETURN 0070.00 ENDDO 0071.00 /*( 実行キー )*/ 0072.00 IF COND(&FNCTON *EQ &ENTER) THEN(DO) 0073.00 CHGVAR VAR(%BIN(&DTALEN)) VALUE(26) 0074.00 CALL PGM(QUIGETLE) PARM(&HANDLE &DSPDTA &DTALEN + 0075.00 'SFLRCD ' 'SFL ' 'FRST' 'Y' + 0076.00 ' ' ' ' 'N' &LSTHND + 0077.00 &APIERR) 0078.00 MONMSG MSGID(CPF6A00) EXEC(GOTO CMDLBL(OUTRED)) 0079.00 SNDPGMMSG MSG(%SST(&DSPDTA 1 26)) MSGTYPE(*COMP) 0080.00 NXTRED: CALL PGM(QUIGETLE) PARM(&HANDLE &DSPDTA &DTALEN + 0081.00 'SFLRCD ' 'SFL ' 'NEXT' 'Y' + 0082.00 ' ' ' ' 'N' &LSTHND + 0083.00 &APIERR) 0084.00 MONMSG MSGID(CPF6A00) EXEC(GOTO CMDLBL(OUTRED)) 0085.00 SNDPGMMSG MSG(%SST(&DSPDTA 1 26)) MSGTYPE(*COMP) 0086.00 GOTO NXTRED 0087.00 OUTRED: 0088.00 GOTO DSPLY 0089.00 ENDDO 0090.00 0091.00 ERROR: RCVMSG RMV(*NO) MSG(&MSG) 0092.00 SNDPGMMSG MSG(&MSG) MSGTYPE(*DIAG) 0093.00 ENDPGM