IBM i CMD命令参数排序疑问:可选参数后能否设必填参数?
IBM i CL命令参数顺序与必填项限制问题
原CMD命令定义
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是必填参数(MIN(01)),TYPE是带默认值的可选参数。但调换参数顺序将TYPE放在NAME前面后,NAME不再被识别为必填项,假脱机文件给出提示:
Required parameter not allowed after optional parameter. Optional parameter assumed.
解答
这是IBM i CL命令定义的功能限制,无法在可选参数之后设置必填参数。
CL命令的参数规则强制要求:所有无默认值的必填参数(MIN(01)且未指定DFT)必须排在可选参数(带DFT或MIN(00))之前。当你把带默认值的TYPE(可选参数)放在NAME(必填参数)前面时,系统会自动将NAME降级为可选参数,这是无法绕过的硬性规则。
如果必须维持TYPE在前的参数顺序,只能通过替代方案实现类似必填校验:
- 移除
NAME的MIN(01)设置,在命令对应的处理程序(如CL程序)中手动检查NAME是否为空,若为空则抛出错误提示用户输入 - 修改参数设计,将
TYPE改为必填参数(移除DFT并设置MIN(01)),但此方案不符合原本的需求设计
内容的提问来源于stack exchange,提问作者Asymptote
相关产品推荐
相关产品推荐

