基本示例

创建通道并将其传递到第二个程序的程序的简单示例。

图 1 显示 COBOL 程序 CLIENT1 ,该程序:
  1. 使用 PUT CONTAINER ( container-name ) CHANNEL ( channel-name ) 用于创建名为 inqcustrec 的通道并向其添加两个容器 ( custnobranchno ) 的命令; 这些容器分别包含客户编号和分支编号。
  2. 使用 LINK PROGRAM ( program-name ) CHANNEL ( channel-name ) 用于链接到程序 SERVER1 的命令,传递 inqcustrec 通道。
  3. 使用 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 部分中,对使用的通道和容器进行命名。 第二个 (在链接部分中) 定义存储结构。
图 1。 创建通道并将其传递到第二个程序的程序的简单示例

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 从已传递的 custnobranchno 容器中检索数据,并使用该数据在其数据库中找到完整的客户记录。 然后,它将在同一通道上创建新的容器 custrec ,并返回其中的客户记录。

请注意,程序员尚未在 SERVER1 中的 GETPUT 命令上指定 CHANNEL 关键字: 如果未显式指定通道,那么将使用当前通道-即调用程序所使用的通道。
图 2。 链接到程序的简单示例,该程序从已传递的通道中检索数据。 此程序由程序 CLIENT1 链接到,如 图 1中所示。

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.