语言写的过程时是很有用的。RPGⅣ提供了CALLB操作码,以支持过程调用和参数省略。关于运行程序的详细信息,参见第八章2.5节的“运行一个程序”。关于程序/过程调用的详细信息,参见第九章2.6节的“调用程序和过程”。
1.2.4 源程序调试
在ILE中,你可以对任何单一语言或混合语言的ILE应用程序进行源语句级的调试。在程序运行期间用调试命令控制程序的流程。可以在程序运行前设置有条件的或无条件的断点。在调用程序后,可以指定语句号码做单步运行,显示或修改变量的值。当程序由于遇到断点,单步命令或运行期间错误而停止时,在程序停止处能显示相关的模块,这时,可以录入更多的调试命令。
关于调试程序的详细信息,参见第十章3.1节中的“程序调试”。
1.2.5 可连接的AP1
ILE提供了一些可以连接的AP1以补充当前ILE RPG/400提供的功能。可连接的AP1提供了程序调用和活动能力,条件和存储管理,数学函数和动态屏幕管理。 在ILE RPG/400应用程序中可以考虑使用下面一些AP1:
关于这些ILE可连接AP1的详细信息,参见第八章2.5节中的“运行程序”和系统API参考手册。
1.3 程序建立策略
使用ILE,你可以用很多方法建立程序,这部分介绍了使用ILE RPG/400或其它ILE语言建立ILE程序的三种一般策略。
1、使用CRTBNPRPG命令来建立程序与OPM存有最大的兼容性。 2、使用GRTBNDRPG建立ILE程序。
3、使用CRTRPGMOD和CRTPGM命令建立ILE程序。
CEETREC—表示立即终止条件 CEE4ABN—异常结束 CEEFRST—释放存储空间 CEEGTST—取得堆式存储空间 CEECZST—重分配存储空间 CEEDOD—分解操作描述
第一种策略是作为临时性的推荐。它是为了考虑到已经有OPM应用程序的用户,可能由于时间不够而不能把他们的应用程序一次转成ILE。 第二种也是一种临时的策略,它给你熟悉ILE的时间。但是也允许你立即使用它们的某些性能。第三种策略包含更广,且提供很大的灵活性。
第一和第二种策略都使用一步建立程序的方法,命令名为CRTBNDRPG,第三种策略采用两步建立程序的方法。先用CRTRPGMOD命令,然后用CRTPGM命令。
1.3.1 策略1 OPM兼容的应用程序
策略1可以产生与OPM程序兼容的ILE程序。可用RPGⅣ的增强功能,但不是全部。当要向ILE过渡时,你可能需要这样一个临时程序。
1.3.1.1 方法
使用下面的步骤建立程序:
1、使用CVTRPGSRC命令把原有的源程序转换为RPG IV。注意要转换源程序中使用/COPY
的成员。
2、用CRTBNDRPG命令建立程序目标。指定DFTACTGRP(*YES)。指定DPTACTGRP(*YES) 意味着程序目标只在默认的活动组中运行。(默认的活动组是所有OPM程序运行的 组)。这样就使程序目标与OPM程序,在复盖范围、打开范围和RCLRSC的区域一 致。
当使用这种方法时,就不能用ILE的静态连接。就是说,你的程序不能包括CALLB操作。而且,在建立程序时不能在CRTBNDRPG命令中使用BNDIR和ACTGRP参数。
1.3.1.2 OPM兼容程序的例子
图7显示了OPM兼容程序的运行时样本。它由一个CL程序和两个RPG程序组成。在这个例子中,一个RPG程序被转换成ILE,而其余的程序没有变化。
图7 OPM兼容的应用程序
1.3.1.2.1 ILE作用
以下是在你的应用程序处理时ILE的作用: 程序调用
OPM程序象从前一样动作,当启动作业时,系统自动地建立OPM默认活动
组,所有的OPM应用程序在其中运行,程序可以通过用动态调用的方法
调用该默认活动组中的其它程序。
静态数据的存储空间是在程序激活时建立的,并一直存在直到程序结
数据
OPMRPG
*PGM(Z)
ILERPG
*PGM(Y)
OPMCL
*PGM(X)
缺省活动组
作业 束。当程序结时(无论是正常或非正常结束),程序的存储空间被删除, 若要清除没有结束而返回的程序的存储空间,应使用回收资源命令 (RCLRSC)。 文件
文件处理与前面版本所讲的相同,文件在程序正常或非正常结束时被关
闭。
错误
就象在前面版本所讲的那样,编译程序独立地处理每个程序中的错误。
所看到的出现在程序中的错误与以前是相同的。然而,现在是错误可以
由ILE条件管理程序做程序之间的通信,以使你能看到程序间的不同信 息。这些信息可能会有新的信息标识,因此如果你的CL程序监控某个指 定的信息标识,那么要修改那个信息标识。
1.3.1.3 相关信息
转换为RPGIV—附录1.2.2中的“转换你的源程序”
1.3.2 策略2 使用CRTBNDRPG的ILE程序
策略2产生一个具有先进ILE静态连接的程序。由于可以使用连接目录连接几个模块或服务程序,因此,程序可以包括用CALLB的静态过程调用,你也可以指定程序运行的活动组。
1.3.2.1 方法
使用以下步骤来建立一个程序:
1、如果是由RPGⅢ源程序开始,那么首先使用CVTRPGSRC命令把你的源程序转换成 RPGⅣ。
转换时,要确认转换所有的/COPY成员和调用的程序。另外,如果使用CL来调该 程序的话,那么一定要确认用ILE CL程序而不是用OPM CL程序。 2、确定程序运行要使用的活动组。
也以象这个例子一样,在应用程序名字后命名它。
3、如果需要,给出所用的连接目录的名字。这里假定你要用连接目录,那么该目录是 已经建立好的。例如,要把你的源程序连接到第三部分程序上,那么要知道连接 目录的名字。
4、使用CRTBNDRPG建立ILE程序,指定DFTACTGRP(*NO),指定ACTGRP参数中的活动一步建立处理—第五章2.2节中的“使用CRTBNDRPG命令建立程序” ILE静态连接—第九章2.6节中的“程序和过程调用”和ILE概念 异常处理差异—3.2.1.1.1中的“OPM和ILE异常处理之间的差别”
组。如果有的话,还要指定BNDDIR参数中的连接目录。
注意,如果指定了ACTGRP(*CALLER)并且这个程序被一个在默认活动组中的程序调用,那么这个程序在复盖范围、打开范围和RCLRSC的范围方面的活动将和ILE语义一致。 这种策略的主要不利方面是,你不能有一个永久的模块目标,使它以后可以与其它模块相连接以建立ILE程序,而且任何过程调用必须是在连接目录中标识的模块或服务程序。如果想连接两个或更多的模块而不使用连接目录,那么你就需要使用第三种策略。
1.3.2.2 使用CRTBNDRPG的ILE程序例子
图8显示了一个应用程序运行期间的视图,在应用程序中,ILE CL程序调用了一个和服务程序相连接的ILE RPG/400程序。该应用程序在名为XYZ的活动组中运行。