必填字段,即使不是第一个字段

问题描述 投票:0回答:2

我有这个命令,需要用户输入第一个字段。

             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)                                       

假脱机文件也会显示以下内容: 可选参数后面不允许有必需参数。可选参数 假设。

如果字段的布局是这样的或者这已经是一个限制,有没有办法使第二个字段成为必填字段?

command ibm-midrange
2个回答
2
投票

您可以使用

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) 

0
投票

这(只能)通过有效性检查程序来解决。

使用

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
                                                      
© www.soinside.com 2019 - 2024. All rights reserved.