精通COBOL--16.3.6 获取CICS的时间信息

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

 

  获取CICS的时间信息也是关于CICS的一项最基本的应用。该应用主要分为两步操作。其中第一步是通过ASKTIME得到时间的数据。第二步是通过FORMATTIME得到时间的格式。例如,以下代码将根据用户的请求而获得相应的时间信息:

IDENTIFICATION  DIVISION.

PROGRAM-ID.  TIMEPGM.

*

 ENVIRONMENT  DIVISION.

*

 DATA  DIVISION.

 WORKING-STORAGE  SECTION.

 01  WKAREA.

     05   LEN          PIC  S9(4)   USAGE  IS  COMP.

     05   ERR-CODE   PIC  S9(8)    COMP.

     05   GETTIME     PIC  S9(15)  COMP-3.            /*该变量用于接受时间数据*/

     05   TIMEOUT     PIC  X(8).                       /*该变量用于接受时间格式,并输出时间信息*/

 01  INAREA.

     05   TRANID      PIC   X(4).

     05   FILLER       PIC   X.

     05   REQUEST    PIC   X(4).

01  MSG    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  MSG

EXEC  CICS  SEND  CONTROL  CURSOR(1760)

                                  END-EXEC

EXEC  CICS  SEND              FROM(MSG)

                                  LENGTH(40)

                                  END-EXEC

EXEC  CICS  RETURN  END-EXEC.

IF   REQUEST  =  ‘TIME’

EXEC  CICS  ASKTIME        ABSTIME(GETTIME)

                          END-EXEC

EXEC  CICS  FORMATTIME    ABSTIME(GETTIME)

                           TIMESEP

                           TIME(TIMEOUT)

                           END-EXEC

STRING  ‘TIME  IS:    TIMEOUT

     DELIMITED  BY  SIZE  INTO  MSG

EXEC  CICS  SEND  CONTROL   CURSOR(80)

                                   END-EXEC

EXEC  CICS  SEND               FROM(MSG)

                                   LENGTH(20)

                                   END-EXEC

EXEC  CICS  RETURN  END-EXEC.

    GOBACK.

不妨假设在CICS中将以上程序关联到TRANSID为“TM01”的交易。则用户若要启动相应任务并提出显示时间的请求,可输入以下一段命令:

TM01 TIME

此时,系统将根据输入的“TM01”启动相应交易的一个任务。该任务便调用了以上程序。其后,系统再根据输入的“TIME”执行程序中相应的分支部分,最终显示出系统当前的时间。时间以小时制表示,以下为运行后屏幕上的一种显示情况:

TM01 TIME

TIME  IS:  20:05:12

在以上代码中,关于时间信息的获取,主要是通过两条CICS命令实现的。这两条CICS命令是该程序的关键部分,现将其提取如下:

……

EXEC  CICS  ASKTIME        ABSTIME(GETTIME)

                          END-EXEC

EXEC  CICS  FORMATTIME    ABSTIME(GETTIME)

                           TIMESEP

                           TIME(TIMEOUT)

                           END-EXEC

    ……

关于第一条CICS命令ASKTIME,主要有以下几点需要注意:

q      该命令含有一个ABSTIME选项,该选项中的内容应为一个15位长度的有符号整型数变量。该命令将得到的时间信息数据存放在这一变量中。

q      该命令可以更新CICS中的时间信息。

q      该命令可以更新EIB中的信息EIBTIME以及EIBDATE。其中EIBTIME反映了时间信息,而EIBDATE则反映了日期信息。关于日期信息,将在下一小节中讲到。

q      当任务启动后,该命令将反映时间戳(time stamp)的信息。

第二条CICS命令FORMATTIME在此处用来表示接受的为时间信息,同时设置时间信息的格式。对应于以上用法,该命令总共需要包含有3个选项。这3个选项分别为ABSTIMETIMESEP、以及TIME。其各自的功能分别如下:

q      ABSTIME:用来指明时间信息数据的来源。在以上程序中,该选项表示时间信息数据来源于变量GETTIME

q      TIMESEP:用来表明接受的为时间信息。这一选项十分重要。若指明的类型错误,系统有可能会接受日期信息,从而得不到预想的结果。

q      TIME:用来设置时间信息的格式,同时结合时间数据,一并存入变量TIMEOUT中。此时,该变量中的内容将为所求的结果信息。