我有一个从 PGMB(CL) 和 PGMC(CL) 调用的 PGMA(RPGLE)。 PGMB 用 2 个参数调用 PGMA,而 PGMC 用 3 个参数调用 PGMA。
我如何在 PGMA 中处理这个问题。我为第三个参数(可选)尝试了选项(* Nopass),但这仅适用于我猜的程序。我不能将此选项放在 PGMA 中 *entry 的 PLIST 中。
最佳答案
Options(*nopass)
适用于程序和程序。我倾向于替换 *ENTRY PLIST
与 dcl-pi
, 但即使使用 PLIST
也可以使参数成为可选参数.
所以最好的方法:
ctl-opt Main(MyProgram);
...
dcl-proc MyProgram;
dcl-pi *n ExtPgm('MYPROGRAM');
parm1 Char(10);
parm2 Char(10);
optparm Char(10) options(*nopass);
end-pi;
...
// to process optional parm
if %parms() >= %parmnum(optparm);
// do something with optparm;
endif;
end-proc;
dcl-pi MyProgram ExtPgm('MYPROGRAM');
parm1 Char(10);
parm2 Char(10);
optparm Char(10) options(*nopass);
end-pi;
...
// to process optional parm
if %parms() >= %parmnum(optparm);
// do something with optparm;
endif;
d MyProgram pr ExtPgm('MYPROGRAM')
d parm1 10a
d parm2 10a
d optparm 10a options(*nopass)
d
d MyProgram pi
d parm1 10a
d parm2 10a
d optparm 10a options(*nopass)
*
/free
if %parms() >= 3;
// do something with optparm
endif;
C *Entry PLIST
C input1 PARM parm1
C input2 PARM parm2
C PARM optparm
C*
C if %parms() >= 3
C* do something with optparm
C endif
if %parms() >= ...
测试所有可选参数。结构,如果参数已通过,我将其移动到我在程序中定义的变量中。如果它不存在,我默认一个值。上面的固定格式示例适用于自 v3r2/v3r6 以来的所有 RPG IV 版本。如果您的 RPG 版本没有内置 %parms(),您可以使用程序状态数据结构中的字段来确定参数的数量。这真的可以追溯到过去,因为 %parms() 在 1990 年代中期的 RPG IV 的第二个版本中被引入。
https://stackoverflow.com/questions/43774227/