call

EGL call 语句将控制权转移至另一程序并可以选择传递一系列值。当被调用程序结束时,控制返回到调用程序;并且,如果被调用程序更改了任何通过变量传递的数据,则可用于调用程序的存储区域也会更改。


call 语句的语法图
program name
被调用程序的名称。程序或者是由 EGL 生成的,或者被认为是以外部方式定义的

指定的名称不能是保留字。如果调用程序必须调用与 EGL 保留字同名的非 EGL 程序,则在 call 语句中使用另一个程序名,然后使用链接选项部件的 callLink 元素来指定别名,此别名是在运行时使用的名称。

如果被调用程序是 Java™ 程序,则被调用程序名区分大小写;calledProgramCALLEDPROGRAM 不同。除此之外,是否区分程序名的大小写取决于被调用程序所在的系统:对于 UNIX® 区分大小写,其它则不区分大小写。

在 EGL 调试器中,被调用程序的名称不区分大小写。

argument
一系列值引用之一,用逗号将每个自变量与下一个自变量分开。自变量可以是项、表单、记录、非数字文字、非数字常量或(如果 EGL 在生成时具有对被调用程序的访问权)较复杂的日期时间、数字或文本表达式。不能传递类型为 ANY 的字段。
externallyDefined
一个指示符,它指示程序是以外部方式定义的。仅当设置了 VisualAge® Generator 兼容性的项目属性时,此指示符才可用。

建议不是在 call 语句中而是在生成时使用的链接选项部件中将非 EGL 生成的程序标识为以外部方式定义。(相关属性位于链接选项部件的 callLink 元素中,并且也名为 externallyDefined。)

noRefresh
一个指示符,它指示当被调用程序返回控制权时将要避免刷新屏幕。

如果(在开发时)选择了程序属性 VAGCompatibility 或者(在生成时)将构建描述符选项 VAGCompatibility 设置为 yes,则支持此指示符。

如果调用程序位于将文本表单显示到屏幕上的运行单元中,并且存在下列任何一种情况时,此指示符是适合的:
  • 被调用程序不显示文本表单;或者
  • 调用程序在调用之后写全屏幕文本表单。

建议不要在 call 语句中指示屏幕刷新首选项,而是在生成时使用的链接选项部件中进行指示。(相关属性位于链接选项部件的 callLink 元素中,并且名为 refreshScreen。)

以下是一个示例:

  if (userRequest == "C")
    try
      call programA;
    onException
      myErrorHandler(12);
    end
    end
  

call 语句中自变量的个数、类型和顺序必须与被调用程序期望的值的个数、类型和顺序相对应。

强烈建议每个自变量中传递的字节数与期望的字节数相同。仅当对长度不匹配进行的运行时更正导致类型不匹配时,该不匹配才会导致错误:

例如,在将空格添加至类型为 NUM 的数据项时会发生错误,但将空格添加至类型为 CHAR 的数据项时就不会出错。

下列规则适用于文字和常量:

所有目标系统都支持递归调用。

调用受到生成时所使用的链接选项部件(如果有的话)的影响。(通过设置构建描述符选项 linkage 来包括链接选项部件。)

有关链接的详细信息,请参阅链接选项部件

相关概念
链接选项部件
语法图

相关参考
EGL 语句
异常处理
linkage
基本类型

使用条款 | 反馈
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.