RPG プログラム A と CL プログラム B があります。A は表示ファイルからユーザー入力を受け取り、それを B の入力パラメーターとして使用します。b は入力パラメーターを処理し、エラーが発生した場合、メッセージは受信され、によって再送信されますメッセージ・サブファイルを使用して、表示ファイルの下部に表示されるようにします。このメッセージ表示メカニズムは機能しますが、完全には機能しません。送信されたメッセージは非常に短い時間でしか見ることができず、表示ファイルから消えてしまうからです。この問題の原因は何でしょうか? メッセージが消えないようにする方法は?
プログラム B 内のサンプル コードは次のとおりです。
DCLF FILE(ECSWIFP1)
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))
OVRDBF FILE(ECSWIFP1) TOFILE(ECSWIFP1) SHARE(*YES)
OPNQRYF FILE(ECSWIFP1) QRYSLT(&QRYSTR)
RCVF
CLOF FILE(ECSWIFP1)
DLTOVR FILE(ECSWIFP1)
RTVDTAARA DTAARA(&E4LIBN/&E4OBJN) RTNVAR(&DTARVAL)
GOTO CMDLBL(END)
ERROR:
CLOF FILE(ECSWIFP1)
MONMSG MSGID(CPF4520)
DLTOVR FILE(ECSWIFP1)
MONMSG MSGID(CPF9841)
MSG:
RCVMSG MSGTYPE(*ANY) MSGDTA(&MSGDTA) MSGID(&MSGID)
IF COMD(%SST(&MSGID 1 3)) *NE 'CPF') THEN(GOTO CMDLBL(MSG))
SNDPGMMSG MSGID(&MSGID) MSGF(QCPFMSG) MSGDTA(&MSGDTA) MSGTYPE(*STATUS) TOPGMQ(*EXT)
END:
ENDPGM
メッセージを表示するための表示ファイル DDS の一部を以下に示します。
A R MSG SFL
A SFLMSGRCD(24)
A S0MSGK SFLMSGKEY
A S0PGMQ SFLPGMQ
A R MSGCTL SFLCTL(MSG)
A OVERLAY
A SFLDSP
A SFLINZ
A SFLSIZ(0005)
A SFLPAG(0001)
A S0PGMQ SFLPGMQ
クエリ文字列に基づいて一致するレコードがないと仮定すると、RCVF によって CPF0864 が送信され、このメッセージは問題なく画面に表示されます。
しかし、レコードが見つかり、フィールド値が RTVDTAARA コマンドで使用された場合、このコマンドの失敗 (データ領域が見つからないなど) により、上で説明した問題が発生します。短時間で消えます。なぜこれが起こるのですか?