我有这个代码,即使 QTEMP/FILE1 已经存在也可以工作。
CRTPF FILE(QTEMP/FILE1) RCDLEN(133)
MONMSG MSGID(CPF5813)
但是当我将相同的代码放入 SELECT...ENDSELECT 中时,MONMSG 无法处理现有文件,并且会因 CPF5813 而出现错误。
SELECT
WHEN (&A *EQ &B) THEN(DO)
CRTPF FILE(QTEMP/FILE1) RCDLEN(133)
MONMSG MSGID(CPF5813)
... other codes
ENDDO
OTHERWISE (DO)
... other codes
ENDDO
ENDSELECT
如何监控 SELECT 语句中的消息?
Message
CPF5813
不是这里要监控的消息,它是诊断消息。这是消息 CPF7302
,由 CRTPF
提出,必须监控。
如果您想检查
CPF5813
是否是发送的诊断信息,您必须使用RCVMSG
,如下所示:
pgm
dcl &diagid *char 7
select
when (1 *eq 1) then(do)
crtpf file(qtemp/file1) rcdlen(133)
monmsg CPF7302 *n do
rcvmsg msgtype(*diag) msgkey(*none) rmv(*no) msgid(&diagid)
if (&diagid *ne cpf5813) do
sndpgmmsg msgid(cpf9898) msgf(qcpfmsg) msgdta('qtemp/file1 not created for an +
unexpected reason: ' *cat &diagid *bcat 'see joblog for details') +
msgtype(*escape)
enddo
enddo
enddo
otherwise (do)
/* do something */
enddo
endselect
endpgm ```