如何在CL程序自动回复询问类消息(Inquiry Message)

一 如何在CL程序自动回复询问类消息(Inquiry Message)

在AS/400系统开发中,经 常要与各种各样的消息打交道。有一类叫“Escape Message”的消息,是当程序出现错误后,会强迫程序异常结束,并告诉错误类型和原因。但经常时候我们不希望因为这些错误而使程序异常停止,在CL程 序中,通常做法是用MONMSG命令来监视这些消息,而后采取相应的正确动作,或者引导程序结束。MONMSG一样还可以监视“Status Message”和“Notify Message”。

但是有一类“Inquiry Message”,MONMSG还是无法监视,这类消息通常有多个回复选择项,要求用户必须给一个选择答复,因而通常会暂停程序运行,而显示一个要求用户 给消息进行回复的画面。那么如何在程序中让程序自动选择一个正确的回复项回复呢?如能自动答复,就不需要手工再回复了。

在作业JOBD 里,有INQMSGRPY选择项,有三个选择:*RQD,*DFT,*SYSRPYL,这个INQMSGRPY就是表示指定Inquiry Message的答复方式,通常创建JOBD的时候INQMSGRPY项缺省是*RQD,这就表示需要操作员手工答复方式。而*DFT和*SYSRPYL 就表示了两种程序可以自动答复的方式。

1. 消息答复缺省值法

如果在作业JOBD里INQMSGRPY选项指定为*DFT方式,则程序会自动使用消息的缺省答复项,询问消息就不会再在屏幕上显示。消息的缺省答复项,可以用CHGMSGD命令事先手工改好,也可以在程序中加入。比如下面的命令可以先在程序中设定:

CHGMSGD MSGID(CPA3E01) MSGF(QCPFMSG) DFT(G)

此语句表示修改QCPFMSG消息文件中的CPA3E01消息的缺省答复为’G’(表示继续执行)。

2. 系统答复列表法

如 果在作业JOBD里INQMSGRPY选项指定为*SYSRPYL方式,则程序会自动使用系统答复列表中定义的答复项。AS/400系统有一系统答复列表 (System Reply List)。System Reply List允许用户指定某已定义在列表中消息的答复方式。System Reply List包含有序号、消息表示符、答复值、选择比较数据等。可以用WRKRPYLE命令查看System Reply List的所有内容。下面就是用WRKRPYLE命令查看到的内容:

2=Change 4=Delete

Sequence Message
Opt Number ID Reply Compare Value
- 10 CPA0700 D *NONE
- 20 RPG0000 D *NONE
- 30 CBE0000 D *NONE
- 40 PLI0000 D *NONE
- 50 CPF7025 I *NONE
- 60 CPA3E01 G *NONE
- 1111 CPA3708 G *NONE

可以用ADDRPYLE命令把你自己要定义的消息及缺省答复值加入。注意加入的时候Sequence Number项不能跟System Reply List已存在的重复。

但 是用系统答复列表法有个缺陷,那就是把ADDRPYLE命令加入到程序中不方便,因为System Reply List里的Sequence Number要求唯一,所以不能重复加入。而且当程序移到不同机器运行时,还必须把消息缺省答复重新加入 System Reply List。

除 了在JOBD可以指定消息答复方式外,还可以用BCHJOB和SBMJOB提交作业时在INQMSGRPY选择项里指定消息回复类别。BCHJOB和 SBMJOB命令将会覆盖JOBD的答复方式。如果使用缺省答复方式和SBMJOB命令结合,可以先编一CL程序,就可以做到自动回复与机器和JOBD无 关性,例子如下:

CHGMSGD MSGID(CPA3E01) MSGF(QCPFMSG) DFT(G)
SBMJOB CMD(CALL PGM(SMCRTRDBCL)) JOB(SMCRTRDBCL) +
INQMSGRPY(*DFT)

posted @ 2008-01-09 14:18  深渊野鱼  阅读(478)  评论(0编辑  收藏  举报