我有一个 RPG 程序 A 和一个 CL 程序 B。A 接受来自显示文件的一些用户输入并将其用作 B 的入口参数。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命令中使用了字段值,而这个命令的失败(例如data area not found)会导致我上面描述的问题,就是接收到的消息只能在一个短时间然后消失。为什么会发生这种情况?