AS/400 CL控制语言基础(3)
【AS400教程】◆第三章 程序间的通讯
程序间的通讯是指不同程序之间数据或参数的传递和交流。这种通讯可以出现在不同种类的程序中。如:RPG 与 C 语言,也可以出现在不同机器上,如:PC 与 AS/400。针对OS/400 而言,通常程序间的通讯具有三种方式:
* CALL、RETURN 命令
* 数据队列通讯
* 数据域通讯
3.1 CALL 命令的使用
调用程序: CALL PGM(PGMA) PARM(&A &B)
被调用程序:PGM PARM(&C &D)
有关 CALL 命令使用的几点说明:
* 参数值可以是字符常量、数值常量、逻辑常量或 CL 常量,最多可达 40 个。
* 参数值以 CALL 命令中出现的顺序传送,这必须与被调用程序的参数顺序相匹配,变量名不一定相同。
* 被调程序中的接收参数必须说明,但接收值不受变量说明中初值的影响。
* 接收参数值的改变会反映到调用程序中,但常量传送不会改变。
* 字符常量通常以 32 个字节传送,数字常量以 15.5 长度压缩格式传送。
3.2 数据队列的程序通讯
数据队列(*DTAQ)是系统目标中的一种类型,当建立了这种目标后,一个程序可以发送数据给它,另一个程序再从中接收数据,从而达到程序之间的数据通讯。
3.2.1 数据队列的优点
* 数据队列是两个作业之间进行异步通讯的最快方法。相对数据库文件、消息队列或数据域而言,它需要较少的额外开销。
* 多个作业可以向相同的数据队列送数据和取数据,而数据队列的先进先出、后进先出或要害字顺序排列属性,能够保证数据送取的正确性。
* 在任何高级语言程序中,通过调用系统提供的程序,就可以对数据队列进行操作,而且操作方法灵活方便。数据队列的操作和使用包括两类:第一类使用 CL 命令;第二类调用系统程序。
CL 命令:
CRTDTAQ 建立数据队列
DLTDTAQ 删除数据队列
WRKDTAQ 工作数据队列
系统程序:
QSNDDTAQ 发送数据队列
QRCVDTAQ 接收数据队列
QCLRDTAQ 清除数据队列
QMHQRDQD 检索数据队列
3.2.2 数据队列的发送
需要将数据发送给数据队列,只要在程序中调用QSNDDTAQ 。在 CL 程序中,调用的格式如下:
CALL PGM(QSNDDTAQ) PARM(&QNAME &LIB &FLDLEN &FIELD
&KEYLEN &KEY)
&QNAME: 是长度为10的字符型,它命名了数据队列,如:IN_Q。
&LIB: 是长度为10的字符型,它命名了数据队列所在的库,如:*LIBL。
&FLDLEN: 是长度为5的数字型,它规定了发送给数据队列的字符数,如:100。
&FIELD: 是长度为&FLDLEN的字符型,它包含了具体发送给数据队列的数据。
&KEYLEN: 是长度为3的数字型,它说明了传送给数据队列的要害字长度,如:6。
&KEY: 是长度为&KEYLEN的字符型,它包含了传送给数据队列的要害字数据。
注:后两个参数可以自选,假如说明了一个,则必须说明另一个。
3.2.3 数据队列的接收
需要从数据队列中接收数据,只要在程序中调用QRCVDTAQ 。在 CL 程序中,调用的格式如下:
CALL PGM(QRCVDTAQ) PARM(&QNAME &LIB &FLDLEN
&FIELD &WAIT &ORDER KEYLEN &KEY &SNDRLEN &SNDR)
&QNAME: 是长度为10的字符型,它命名了数据队列。如:OUT_Q。
&LIB: 是长度为10的字符型,它命名了数据队列所在的库。如:*LIBL。
&FLDLEN: 是长度为5的数字型,它规定了发送给数据队列的字符数。
&FIELD: 是长度为&FLDLEN的字符型,它包含了从数据队列中接收到的具体数据。
&WAIT: 是长度为5的数字型,它说明了等待接收数据的时间。负数表示无限制的等待;零表示不等待;正数示要等待的秒数,最大值是9999。这个参数只有在数据队列中无满足条件的数据时, 才起作用。
&ORDER: 是长度为2的字符型,它说明了按要害字接收数据的条件。可用的字符值是:GT、LT、EQ、GE、LE。
&KEYLEN: 是长度为3的数字型,它说明了接收数据队列的要害字长度。
&KEY: 是长度为&KEYLEN的字符型,它标识了用于从数据队列中接收数据的要害字变量。
&SNDRLEN:是长度为3的数字型,它规定了发送者标识的长度。
&SNDR: 是长度为&SNDRLEN 的字符型,它包含了发送者标识的数据。
注:后三个参数可以任选,但是&ORDER、&KEYLEN和&KEY 必须同时说明。
3.2.4 数据队列的清除
需要从数据队列中清除数据,只要在程序中调用 QCLRDTAQ在 CL 程序中,调用的格式如下:
CALL PGM(QCLRDTAQ) PARMM(&QNAME &LIB)
3.2.5 数据队列的检索
需要检索一个数据队列的描述项,只要在程序中调用QMHQRDQD。在 CL 程序中,调用的格式如下:
CALL PGM(QMHQRDQD) PARM(&RCVR &RCVRLEN
&FORMAT &DQNAME)
&RCVR: 是长度为&RCVRLEN的字符型,它标识了含有数据队列性的变量。
&RCVRLEN: 是长度为4的数字型,它说明了&RCVR长度。
&FORMAT: 是长度为8的字符型,它定义了接收模板的格式。
&DQNAME: 是长度为20的字符型,它标识了数据队列和所在库,前十个字符是队列名字,后十个字符是库名。
3.3 数据域的程序通讯
数据域(*DTAARA)是系统目标中的一种类型。当建立了这种目标后,可以用来存入数据,以便任何程序进行读取和修改。数据域的典型用途如下:
* 提供用于几个程序中的常数字段,易于共享和修改。如:标题、说明等。
* 在一个作业中提供一个传递信息的区域。
* 在一个作业中提供一个字段作为控制参数,以便轻易地得到修改。
数据域的 CL 命令包括:
CRTDTAARA 建立数据域,长度不超过2000
CHGDTAARA 改变数据域,改变时数据域被锁定
DSPDTAARA 显示数据域,可以以十六进制方式显示
RTVDTAARA 检索数据域,检索值需要存入 CL 变量
DLTDTAARA 删除数据域
WRKDTAARA 工作数据域