System 语言环境支持执行命令和调用外部程序。
在初始化文件中添加以下配置语句,并且是在一行上:
ENVIRONMENT (DTW_SYSTEM) DTWSYS ( OUT RETURN_CODE )
参见环境配置语句,以进一步了解 Net.Data 初始化文件和语言环境 ENVIRONMENT 语句。
要发出一个命令,可以定义使用 System (DTW_SYSTEM) 语言环境的函数, 它包含一个路径,该路径指向要在 EXEC 语句中发出的命令。例如:
%FUNCTION(DTW_SYSTEM) sys1() { %EXEC { ADDLIBLE.CMD %} %}
如果使用 EXEC_PATH 配置变量来定义至包含可执行对象(例如,命令和程序)的目录的路径, 则可以缩短至该对象的路径。参见EXEC_PATH,以学习如何定义 EXEC_PATH 配置变量。
例 1:发出命令
%FUNCTION(DTW_SYSTEM) sys2() { %EXEC { MYPGM %} %}
例 2:调用程序
%FUNCTION(DTW_SYSTEM) sys3() { %EXEC {MYPGM.EXE %} %
有两种方式将信息传递到 System (DTW_SYSTEM) 语言环境调用的程序,直接和间接。
%DEFINE INPARM1 = "SWITCH1" %FUNCTION(DTW_SYSTEM) sys1() { %EXEC{ CALL1.CMD $(INPARM1) "literal string" %} %}
Net.Data 变量 INPARM1 被引用并被传递到程序。参数传递到程序的方式与从命令行调用程序时参数传递到程序的方式相同。使用这种方式传递给程序的 参数被认为是输入类型参数(传递给程序的参数可以由程序使用和处理,但对参数的更改并反映给 Net.Data)。
System 语言和不能直接传递或检索 Net.Data 变量,因此这些变量以如下方式使程序可以使用它们:
name="value"
对于复合数据项,可以用一个新行字符 或空字符分开每个项。
如果一个变量名称与输出参数的名称相同且使用上述语法, 则新的值将替换当前值。如果变量名不对应于输出参数,Net.Data 将把它忽略。
以下示例显示了 Net.Data 如何从一个宏传递变量。
%FUNCTION(DTW_SYSTEM) sys1 (IN P1, OUT P2, P3) { %EXEC { UPDPGM %} %}
您可以通过 System 语言环境将 Net.Data 表格传递给一个被调用的程序。该程序根据它们的 Net.Data 名来访问 Net.Data 宏表格参数的值。列标题和字段值都包含在用表格名和列号标识的变量中。例如,在表格 myTable 中,列标题是 myTable_N_j, 字段值是 myTable_V_i_j,其中 i 是行号, j 是列号。表格的行数与列数是 myTable_ROWS 和 myTable_COLS。
不建议您传递有许多行的表格,因为进程环境变量的个数是有限的。
以下示例显示了一个包含函数定义的宏,其中有三个参数 P1、P2 和 P3。P1 是一个输入 (IN) 参数,P2 和 P3 是输出 (OUT) 参数。函数调用程序 UPDPGM,它用 P1 的值更新参数 P2,并将 P3 设置为字符串。在处理 %EXEC 块中的语句之前,DTW_SYSTEM 语言环境在环境空间中存储 P1 和相应的值。
%DEFINE{ MYPARM2 = "ValueOfParm2" MYPARM3 = "ValueOfParm3" %} %FUNCTION(DTW_SYSTEM) sys1 (IN P1, OUT P2, P3) { %EXEC { UPDPGM %} %} %HTML(upd1) { <p> Passing data to a program. The current value of MYPARM2 is "$(MYPARM2)", and the current value of MYPARM3 is "$(MYPARM3)". Now we invoke the Web macro function. @sys1("ValueOfParm1", MYPARM2, MYPARM3) <p> After the function call, the value of MYPARM2 is "$(MYPARM2)", and the value of MYPARM3 is "$(MYPARM3)". %}