我有一個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命令中找到記錄並使用字段值,並且此命令失敗(例如未找到數據區域)將導致我上面描述的問題,即接收到的消息只能在短時間內瞥見,然後消失。爲什麼會發生?
請發佈顯示文件的代碼。 –