Uses PUT CONTAINER(container-name) CHANNEL(channel-name)
commands to create a channel called inqcustrec and
add two containers, custno and branchno,
to it; these contain a customer number and a branch number, respectively.
Uses a LINK PROGRAM(program-name) CHANNEL(channel-name)
command to link to program SERVER1, passing the inqcustrec channel.
Uses a GET CONTAINER(container-name) CHANNEL(channel-name)
command to retrieve the customer record returned by SERVER1.
The customer record is in the custrec container of
the inqcustrec channel.
Note that the same COBOL copybook, INQINTC, is
used by both the client and server programs. Line 3 and lines 5 through
7 of the copybook represent the INQUIRY-CHANNEL and
its containers. These lines are not strictly necessary to the working
of the programs, because channels and containers are created by being
named on, for example, PUT CONTAINER commands;
they do not have to be defined. However, the inclusion of these lines
in the copybook used by both programs makes for easier maintenance;
they record the names of the containers used.
Recommendation
For ease of maintenance
of a client/server application that uses a channel, create a copybook
that records the names of the containers used and defines the data
fields that map to the containers. Include the copybook in both the
client and the server program.
Note: This example shows two COBOL
programs. The same techniques can be used in any of the other languages
supported by CICS. However, for COBOL programs only, if the
server program uses the SET option (instead of INTO) on the EXEC
CICS GET CONTAINER command, the structure of the storage
pointed to by SET must be defined in the LINKAGE section of the program.
This means that you will require two copybooks rather than one. The
first, in the WORKING-STORAGE section of the program, names the channel
and containers used. The second, in the LINKAGE section, defines the
storage structure.
Figure 2 shows the SERVER1 program
linked to by CLIENT1. SERVER1 retrieves
the data from the custno and branchno containers
it has been passed, and uses it to locate the full customer record
in its database. It then creates a new container, custrec,
on the same channel, and returns the customer record in it.
Note that the programmer hasn't specified the CHANNEL keyword
on the GET and PUT commands in SERVER1:
if the channel isn't specified explicitly, the current channel is
used—that is, the channel that the program was invoked with.