基本示例
创建通道并将其传递到第二个程序的程序的简单示例。
图 1 显示 COBOL 程序
CLIENT1 ,该程序:- 使用 PUT CONTAINER ( container-name ) CHANNEL ( channel-name ) 用于创建名为
inqcustrec的通道并向其添加两个容器 (custno和branchno) 的命令; 这些容器分别包含客户编号和分支编号。 - 使用 LINK PROGRAM ( program-name ) CHANNEL ( channel-name ) 用于链接到程序
SERVER1的命令,传递inqcustrec通道。 - 使用 GET CONTAINER ( container-name ) CHANNEL ( channel-name ) 用于检索
SERVER1返回的客户记录的命令。 客户记录位于inqcustrec通道的custrec容器中。
请注意,客户机和服务器程序都使用相同的 COBOL 副本 INQINTC 。 副本的行 3 和行 5 到 7 表示 INQUIRY-CHANNEL 及其容器。 这些行对于程序的工作不是严格必需的,因为通道和容器是通过在例如 PUT CONTAINER 命令上命名而创建的; 它们不必定义。 但是,将这些行包含在两个程序所使用的副本中可以更轻松地进行维护; 它们会记录所使用的容器的名称。
建议
为了便于维护使用通道的客户机/服务器应用程序,请创建用于记录所使用容器的名称的副本,并定义映射到容器的数据字段。 在客户机和服务器程序中都包含副本。
注: 此示例显示了两个 COBOL 程序。 可以在 CICS支持的任何其他语言中使用相同的方法。 但是, 仅适用于 COBOL 程序 ,如果服务器程序在 EXEC
CICS GET CONTAINER 命令上使用 SET 选项 (而不是 INTO) ,那么必须在程序的链接部分中定义 SET 指向的存储器结构。 这意味着您将需要两个副本而不是一个副本。 第一个是在程序的 WORKING-STORAGE 部分中,对使用的通道和容器进行命名。 第二个 (在链接部分中) 定义存储结构。
IDENTIFICATION DIVISION.
PROGRAM-ID. CLIENT1.
WORKING-STORAGE SECTION.
COPY INQINTC
* copybook INQINTC
* Channel name
* 01 INQUIRY-CHANNEL PIC X(16) VALUE 'inqcustrec'.
* Container names
* 01 CUSTOMER-NO PIC X(16) VALUE 'custno'.
* 01 BRANCH-NO PIC X(16) VALUE 'branchno'.
* 01 CUSTOMER-RECORD PIC X(16) VALUE 'custrec'.
* Define the data fields used by the program
* 01 CUSTNO PIC X(8).
* 01 BRANCHNO PIC X(5).
* 01 CREC.
* 02 CUSTNAME PIC X(80).
* 02 CUSTADDR1 PIC X(80).
* 02 CUSTADDR2 PIC X(80).
* 02 CUSTADDR3 PIC X(80).
PROCEDURE DIVISION.
MAIN-PROCESSING SECTION.
*
* INITIALISE CUSTOMER RECORD
*
... CREATE CUSTNO and BRANCHNO
*
* GET CUSTOMER RECORD
*
EXEC CICS PUT CONTAINER(CUSTOMER-NO) CHANNEL(INQUIRY-CHANNEL)
FROM(CUSTNO) FLENGTH(LENGTH OF CUSTNO)
END-EXEC
EXEC CICS PUT CONTAINER(BRANCH-NO) CHANNEL(INQUIRY-CHANNEL)
FROM(BRANCHNO) FLENGTH(LENGTH OF BRANCHNO)
END-EXEC
EXEC CICS LINK PROGRAM('SERVER1') CHANNEL(INQUIRY-CHANNEL)
END-EXEC
EXEC CICS GET CONTAINER(CUSTOMER-RECORD)
CHANNEL(INQUIRY-CHANNEL)
INTO(CREC) END-EXEC
*
* PROCESS CUSTOMER RECORD
*
... FURTHER PROCESSING USING CUSTNAME and CUSTADDR1 etc...
EXEC CICS RETURN END-EXEC
EXIT.
图 2 显示了 CLIENT1链接到的 SERVER1 程序。 SERVER1 从已传递的 custno 和 branchno 容器中检索数据,并使用该数据在其数据库中找到完整的客户记录。 然后,它将在同一通道上创建新的容器 custrec ,并返回其中的客户记录。
请注意,程序员尚未在 图 2。 链接到程序的简单示例,该程序从已传递的通道中检索数据。 此程序由程序 CLIENT1 链接到,如 图 1中所示。
SERVER1 中的 GET 和 PUT 命令上指定 CHANNEL 关键字: 如果未显式指定通道,那么将使用当前通道-即调用程序所使用的通道。
IDENTIFICATION DIVISION.
PROGRAM-ID. SERVER1.
WORKING-STORAGE SECTION.
COPY INQINTC
* copybook INQINTC
* Channel name
* 01 INQUIRY-CHANNEL PIC X(16) VALUE 'inqcustrec'.
* Container names
* 01 CUSTOMER-NO PIC X(16) VALUE 'custno'.
* 01 BRANCH-NO PIC X(16) VALUE 'branchno'.
* 01 CUSTOMER-RECORD PIC X(16) VALUE 'custrec'.
* Define the data fields used by the program
* 01 CUSTNO PIC X(8).
* 01 BRANCHNO PIC X(5).
* 01 CREC.
* 02 CUSTNAME PIC X(80).
* 02 CUSTADDR1 PIC X(80).
* 02 CUSTADDR2 PIC X(80).
* 02 CUSTADDR3 PIC X(80).
PROCEDURE DIVISION.
MAIN-PROCESSING SECTION.
EXEC CICS GET CONTAINER(CUSTOMER-NO)
INTO(CUSTNO) END-EXEC
EXEC CICS GET CONTAINER(BRANCH-NO)
INTO(BRANCHNO) END-EXEC
... USE CUSTNO AND BRANCHNO TO FIND CREC IN A DATABASE
EXEC CICS PUT CONTAINER(CUSTOMER-RECORD)
FROM(CREC)
FLENGTH(LENGTH OF CREC) END-EXEC
EXEC CICS RETURN END-EXEC
EXIT.