图8 使用CRTBNDRPG的ILE程序
1.3.2.2.1 ILE的作用
下面详细列出此种方式下ILE的作用:
程序调用
当应用程序启动时,如果活动组不存在,那么系统自动地建立它。
应用程序可包括动态的程序调用或静态的过程调用,连接程序中的过程 使用静态调用来彼此调用,过程调用ILE和OPM程序用动态调用。 数据
程序存储空间的生存期与活动组的生存期相同。存储空间一直保持活动
状态,直到活动组被删除为止。ILE RPG/400在运行期间维护数据。以 便使程序结束的语义和重新初始化的数据与OPM RPG相一致,即使当
OPM RPG程序结束时而实际的存储空间没有被删除。如果前次的过程调用以LR为ON结束或非正常结束,数据都要重新初始化。
支持的服务程序
*SRVPGM(Z)
ILERPG
*PGM(Y)
ILECL
*PGM(X)
SYZ活动组
作业
程序中被说明为进口和出口的数据(分别以EXPORT和IMPORT键字说
明)。对于每个模块来说都是外部的,它们只对连接成一个程序的那些 模块来说是可知的。 文件
在默认情况下,由系统做的文件处理(包括打开、共享、复盖和落实控
制)影响到活动组级。在不同活动组中的程序不能在数据管理级共享文 件。如果你想跨活动组共享文件,那么必须在复盖命令中用SHARE (*YES)参数指定它在作业级打开文件,或在建立文件时用SHARE(*YES)参
指定。
在同一活动组中调用ILE程序或过程时,如果由于前面的原因得到一个
错误
数
异常时,它会显示一个询问信息,那么现在调用的程序就会首先看到这
个异常信息。
如果调用的程序有错误指示器或*PSSR,那么获得异常的程序或过程就 会非正常结束而不显示询问信息。调用的程序也会做相同的动作(错误
指示器会置为ON,并激活*PSSR)。
调用不同活动组中的OPM程序或过程时,那么异常处理就与OPM RPG一样,每个程序各自处理自身的异常。看到信息可能有新的信息编码,因 每种语言处理它本身的错误并且能处理用其它ILE语言编写的模块中发
此,如果监视某条特定的信息,那么你需要修改那个信息编码。
生的错误。例如,如果程序中有错误指示器的编码,那么RPG可以处理 任何C的错误。C也可以处理任何RPG的错误。
1.3.2.3 相关信息
1.3.3 策略3 使用CRTRPGMOD的ILE应用程序
这种策略允许你全面地利用ILE所提供的概念。然而,越灵活,涉及的内容越多。 本部分讨论了建立程序的三种方案:
单一语言的应用程序
转换到RPGⅣ 一步建立 方法 活动组 RCLRSC
附录1.2.2中的“转换你的源程序”
第五章2.2节中的“使用CRTBNDRPG命令建立程序” 2.5.6节中的“活动组管理” 2.5.6.5节中的“回收资源”命令
第九章2.6节中的“程序和过程调用”和ILE概念 3.2.1.1.1节中的OPM和ILE RPG/400异常处理的差 4.2.1中的“复盖和更改文件输入输出”及4.2.4 中的“共享打开的数据路径“,也参考ILE概念。
ILE静态连接 异常处理差异
异。
复盖和打开的作用范围
多种语言的应用程序 高级应用程序
ILE作用与1.3.2.2.1中“ILE作用”相同。 使用本方法应对基本的ILE概念有所了解。
1.3.3.1 方法
因为这种方法是最灵活的,它包括你建立ILE应用程序的若干种途径。以下给出了需要做的主要步骤。
1.3.3.2 单一语言的ILE应用程序方案
在此方案中,把多个源文件编译成一个模块,然后把它连接成为供ILE RPG/400调用的程序。图9显示了这个应用程序的运行时视图。
*PGM(Y)
XY活动组
*PGM(X) RPG
作业 1、用专用的命令从源成员建立模块。例如,用CRTRPGMOD处理RPG源成员,CRTCLMOD 处理CL源成员,等等。 2、确定应用程序的ILE特性,例如:
确定哪一个模块作为应用程序的起始点,选择的入口模块就是第一个取得控制 的模块。在OPM应用程序中是命令处理程序,或是菜单选择项调用的程序。 确定程序运行的活动组。(与在命名的活动组中运行类似,该活动组的名字是 基于应用程序的名字)。
3、确定是否连接某些模块来建立服务程序。如果是的话,那么使用CRTSRVPGM命令建 立服务程序。
4、用CRTPGM命令连接适当的模块和服务程序。指定根据第2步确定的特性参数值。 使用这种方法建立的应用程序可以在完全保护方式下运行。也就是说,只限于它 本身的活动组中。而且,可以用UPDPGM和UPDSRVPGM命令方便地更新。使用这些
命令可以增加或替换一个或多个模块,而不必重新建立程序目标。
RPG模块 (Y1) RPG模块 (Y2)
RPG模块 (Y3) RPG模块 (Y4)
图9 使用CRTRPGMOD和CRTPGM的单一语言应用程序
程序X对程序Y的调用是动态调用,程序Y中模块间的调用是静态调用。
参见1.3.2.2.1节中的“ILE作用”,其中介绍了应用程序处理调用,数据,文件和错误过程中ILE作用的详细资料。
1.3.3.3 多种语言的ILE程序方案
在此方案中,建立了集成的多语言的应用程序。用某种ILE语言写的主模块,调用其它ILE语言写的过程。主模块打开文件,而其它模块共享这些文件。由于使用了不同语言,你可能认为是不兼容的。然而,ILE保证了这一点。
图10显示了包括一个多种语言ILE程序的应用程序运行期间视图,在程序中一个模块调用不可连接的API,QUSCRTUS(建立用户空间)。
RPG *MODULE(Y2) 缺省活动组 C *MODULE(Y3)
CL *MODULE(Y1)
*PGM(Y)
Y活动组
作业
*PGM(QUSCRTUS) RPG *MODULE(Y4)
图10 多种语言的应用程序
程序Y对OPM API的调用是动态调用,程序Y中的各模块间的调用是静态调用。 参见1.3.2.2.1节中的“ILE作用”,其中介绍了应用程序处理调用,数据,文件及错误的过程中ILE作用的详细资料。
1.3.3.4 高级应用程序方案
在此方案中,你用了包括服务程序在内的ILE功能的全部益处。特别当服务程序在调用它的程序的活动组中运行时,使用了模块和服务程序间的过程的连接调用,特别能提高性能。
图11显示了一个ILE程序被连接到两个服务程序上的例子。
C *MODULE(Z1)
*SRVPGM(Z)
RPG *MODULE(X2) RPG
CL *MODULE(X1) *SRVPGM(1)
*PGM(X)
XYZ活动组
作业