精通COBOL--16.3.5 获取CICS的终端信息

来源:互联网 发布:c语言例题 编辑:程序博客网 时间:2024/06/08 03:14

  在第一节中曾讲到,每一个任务都有一个与之对应的EIBCICS的终端信息正是通过EIB得到的。

需要注意的是,由于任务可以在不同的终端上启动,因此得到的终端信息也是不同的。也就是说,终端信息是基于任务而言的,这点同每一任务中EIB的惟一性是相对应的。

此处所说的终端信息,主要是指终端在CICS中的设备编号。终端编号是通过EIB中的信息EIBTRMID提供的。以下程序将直接通过EIBTRMID得到相应的终端设备编号,并从屏幕第二行的第一列开始将其输出:

IDENTIFICATION  DIVISION.

PROGRAM-ID.  TERMPGM1.

*

 ENVIRONMENT  DIVISION.

*

 DATA  DIVISION.

 WORKING-STORAGE  SECTION.

01  MSG1    PIC  X(80).

*

 PROCEDURE  DIVISION.

STRING  ‘TERMINAL  ID  IS:    EIBTRMID           /*此处通过EIBTRMID得到终端设备编号*/

     DELIMITED  BY  SIZE  INTO  MSG1

EXEC  CICS  SEND  CONTROL  CURSOR(80)

                                  END-EXEC

EXEC  CICS  SEND              FROM(MSG1)

                                  LENGTH(20)

                                  END-EXEC

EXEC  CICS  RETURN  END-EXEC.

   GOBACK.

不过,以上这种直接输出结果信息的方式并不能体现出CICS的交互功能,在实际中较为少见。通常情况下,实际的CICS程序往往是根据用户输入的请求而执行相应操作的。例如,以下程序将只在用户输入“TERM”的请求之后,方获取并显示相应终端信息:

IDENTIFICATION  DIVISION.

PROGRAM-ID.  TERMPGM2.

*

 ENVIRONMENT  DIVISION.

*

 DATA  DIVISION.

 WORKING-STORAGE  SECTION.

 01  WKAREA.

     05   LEN          PIC  S9(4)  USAGE  IS  COMP.

     05   ERR-CODE   PIC  S9(8)  COMP.

 01  INAREA.

     05   TRANID      PIC   X(4).

     05   FILLER       PIC   X.

     05   REQUEST    PIC   X(4).

01  MSG2    PIC  X(80).

*

 PROCEDURE  DIVISION.

MOVE  9  TO  LEN.

EXEC  CICS  RECEIVE           INTO(INAREA)

                                  LENGTH(LEN)

                                  RESP(ERR-CODE)

                                  END-EXEC

IF   ERR-CODE  =  DFHRESP(LENGERR)

     MOVE  ‘INPUT  DATA  TOO  LONG: MAX  IS  9  CHARS’

         TO  MSG2

EXEC  CICS  SEND  CONTROL  CURSOR(1760)

                                  END-EXEC

EXEC  CICS  SEND              FROM(MSG2)

                                  LENGTH(40)

                                  END-EXEC

EXEC  CICS  RETURN  END-EXEC.

    IF   REQUEST  =  ‘TERM’

STRING  ‘TERMINAL  ID  IS:    EIBTRMID          

     DELIMITED  BY  SIZE  INTO  MSG2

EXEC  CICS  SEND  CONTROL  CURSOR(80)

                                  END-EXEC

EXEC  CICS  SEND              FROM(MSG2)

                                  LENGTH(20)

                                  END-EXEC

EXEC  CICS  RETURN  END-EXEC.

    GOBACK.

需要注意的是,将以上程序关联到交易中后,用户首先需要输入相应的交易编号以启动一个任务。因此,在以上代码定义的输入区域INAREA中包含两个输入变量。其中前一个变量TRANID对应输入的交易编号;后一个变量REQUEST对应输入的请求。

同时,在以上代码中存在两处RETURN命令。由于RETURN命令表示结束任务逻辑,将控制权移交CICS系统。因此,当以上程序运行时满足第一个条件,并执行第一个RETURN命令后,任务将直接结束。此时,程序将不会执行第一条RETURN命令之后的内容。