我有这个命令,需要用户输入第一个字段。
CMD PROMPT('TEST')
PARM KWD(NAME) TYPE(*CHAR) LEN(10) PROMPT('NAME') +
MIN(01)
PARM KWD(TYPE) TYPE(*CHAR) LEN(05) PROMPT('TYPE') +
DFT(*OPT1) VALUES(*OPT1 *OPT2) RSTD(*YES)
如果我将顺序更改为这样,则不再需要
NAME
字段。
CMD PROMPT('TEST')
PARM KWD(TYPE) TYPE(*CHAR) LEN(05) PROMPT('TYPE') +
DFT(*OPT1) VALUES(*OPT1 *OPT2) RSTD(*YES)
PARM KWD(NAME) TYPE(*CHAR) LEN(10) PROMPT('NAME') +
MIN(01)
假脱机文件也会显示以下内容: 可选参数后面不允许有必需参数。可选参数 假设。
如果字段的布局是这样的或者这已经是一个限制,有没有办法使第二个字段成为必填字段?
您可以使用
PROMPT(... order)
更改它们的显示顺序
如下:
CMD PROMPT('TEST')
PARM KWD(NAME) TYPE(*CHAR) LEN(10) MIN(01) PROMPT('NAME' 2)
PARM KWD(TYPE) TYPE(*CHAR) LEN(05) RSTD(*YES) DFT(*OPT1) VALUES(*OPT1 *OPT2) +
PROMPT('TYPE' 1)
这(只能)通过有效性检查程序来解决。
使用
CRTCMD CMD(TEST) ... VLDCKR(yourlib/TESTV)
创建命令。
有效性检查程序并不难制作,而且非常有用,因为您还可以检查对象是否存在、数据库内容等。下面是一个简单的 CL 示例。明智地,您使用 QSYS/QCPFMSG 中已有的消息 CPD0071。有效性检查程序必须发送带有 MSGTYPE(*ESCAPE) 的 CPF0002 作为最后一条消息。这向命令处理器表明它不应让命令有效地通过。如果您有多个 CPD0071 要发送,则仅发送一个 CPF0002。在CPD0071的msgdta中,确保参数名称前有四个空格,并将参数名称填充到十个字节;这是 CPD0071 消息数据的要求。
CL 节目 TESTV 来源:
pgm parm(&type &name)
dcl &type *char 5
dcl &name *char 10
if (&name *eq ' ') then(do)
sndpgmmsg msgid(cpd0071) msgf(qcpfmsg) +
msgdta(' NAME ') msgtype(*diag)
sndpgmmsg msgid(cpf0002) msgf(qcpfmsg) msgtype(*escape)
enddo
endpgm