EGL 提供了几种方法来将控制权从一个程序切换到另一个程序:
- call 语句将控制权给予另一个程序并可以选择传递一系列值。当被调用程序结束时,控制权又返回至调用程序。如果被调用程序更改了任何作为变量传递的数据,则在调用程序中更改变量的内容。
虽然可能会发生服务器端自动提交,但是 call 语句不提交数据库或其它可恢复的资源。
可以通过设置链接选项部件的 callLink 元素来指定 call 语句的特征。有关详细信息,请参阅 call 和 callLink 元素。有关服务器端自动提交的详细信息,请参阅 callLink 元素中的 luwControl。
- transfer 语句将控制权从一个主程序转移到另一个主程序,
结束转移程序,并传递(可选)一条记录,该记录的数据被接受到接收程序的输入记录中。不能在被调用程序中使用 transfer 语句。
程序可以通过
transfer to a transaction 格式的语句或
transfer to a program 格式的语句来转移控制权:
- transfer to a transaction 执行下列操作:
- 在作为 Java™
主文本程序或主批处理程序运行的程序中,行为取决于构建描述符选项 synchOnTrxTransfer 的设置:
- 如果 synchOnTrxTransfer 的值为 YES,则 transfer 语句将提交可恢复的资源、关闭文件、关闭游标并在同一个运行单元中启动程序。
- 如果 synchOnTrxTransfer 的值为 NO(缺省值),则 transfer 语句也在同一个运行单元中启动程序,但不关闭或提交可供被调用程序使用的资源。
- transfer to a program 不提交或回滚可恢复的资源,但关闭文件、释放锁并在同一个运行单元中启动程序。
链接选项部件不影响任何一种类型的转移的特征。
在页面处理程序中,转移是无效的。
有关详细信息,请参阅 transfer。
- 系统函数 sysLib.startTransaction 以异步方式启动运行单元。此操作不结束转移程序也不影响数据库、文件和转移程序中的锁。您可以选择将数据传递到输入记录中,输入记录是接收程序中的一个区域。
如果程序调用 sysLib.startTransaction,则必须使用链接选项部件的 asynchLink 元素来生成程序。有关详细信息,请参阅 sysLib.startTransaction 和 asynchLink 元素。
- EGL show 语句结束文本应用程序中的当前主程序并通过表单向用户显示数据。(可选)用户提交表单后,show 语句将控制权转发至第二个主程序,该主程序接收从用户那里接收到的数据以及从起始程序按原样传递的数据。
show 语句受链接选项部件的 transferLink 元素设置的影响。
有关详细信息,请参阅 show。
- 最后,forward 语句是从程序或页面处理程序中调用的。此语句执行下列操作:
- 提交可恢复的资源、关闭文件并释放锁
- 转发控制权
- 结束代码
在这种情况下,目标是另一个程序或 Web 页面。有关详细信息,请参阅 forward。