ibm-midrange - 在 AS400 中的程序之间传递可选参数

我有一个从 PGMB(CL) 和 PGMC(CL) 调用的 PGMA(RPGLE)。 PGMB 用 2 个参数调用 PGMA,而 PGMC 用 3 个参数调用 PGMA。

我如何在 PGMA 中处理这个问题。我为第三个参数(可选)尝试了选项(* Nopass),但这仅适用于我猜的程序。我不能将此选项放在 PGMA 中 *entry 的 PLIST 中。

最佳答案

Options(*nopass)适用于程序和程序。我倾向于替换 *ENTRY PLISTdcl-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;

如果没有线性主规范,您只需将 PI 添加到程序的主体中,如下所示:
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;

这是一个v5版本
 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;

但是,如果您使用 PLIST,它甚至可以工作,但在这种情况下,您不能在因子 1 或 2 中包含条目。这仅在固定格式程序中允许,而且我通常不会在没有情有可原的情况下编写新的固定格式代码,所以我会将此归类为最后的选择。
 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

注:我没有在我的自由格式过程接口(interface)示例中添加任何原型(prototype),因为它们不再需要。但是,如果您的程序可以被另一个 RPG IV 程序或过程调用,最好创建一个副本来包含该原型(prototype),并将其包含在原始程序和任何调用程序中。这确保了原型(prototype)与调用者匹配。

在所有这些情况下,重要的是要了解您不能使用未传递的参数。因此,在程序开始时,我将使用 if %parms() >= ... 测试所有可选参数。结构,如果参数已通过,我将其移动到我在程序中定义的变量中。如果它不存在,我默认一个值。上面的固定格式示例适用于自 v3r2/v3r6 以来的所有 RPG IV 版本。如果您的 RPG 版本没有内置 %parms(),您可以使用程序状态数据结构中的字段来确定参数的数量。这真的可以追溯到过去,因为 %parms() 在 1990 年代中期的 RPG IV 的第二个版本中被引入。

https://stackoverflow.com/questions/43774227/

相关文章:

sql - 有条件的平均值

groovy - php 类似于 Groovy 中的关联数组

symfony - 如何为使用 stwe/DatatablesBundle 生成的表中的行着色?

php - 在 Symfony 3.1.1 表单的输入文本字段中添加掩码

c - 为什么需要为越来越多的指针数组重新分配内存?

r - big.matrix 文档中不可重现的示例(应用)

json - 通过 Spark SQL 读取嵌套的 JSON - [AnalysisExceptio

javascript - 在哪里发布代码以供开源使用?

azure-pipelines-release-pipeline - 将 KeyVault 访问集成

haxe - 是否有 atexit() 等同于 Haxe?