MainframeMaster

COBOL CICS Programming

COBOL CICS programming enables the development of interactive transaction processing applications on mainframe systems. CICS (Customer Information Control System) provides a comprehensive environment for building online applications with screen handling, transaction management, and resource control capabilities.

Understanding CICS Programming

CICS programming combines COBOL with CICS commands to create interactive applications that can handle multiple users simultaneously. It provides transaction processing, screen management, database access, and program communication services.

CICS Program Structure

1. Basic CICS COBOL Program

A typical CICS COBOL program includes CICS commands, working storage, and transaction processing logic.

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
IDENTIFICATION DIVISION. PROGRAM-ID. CICS-SAMPLE. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-CICS-FIELDS. 05 WS-TRANID PIC X(4) VALUE 'SAMP'. 05 WS-MAPSET PIC X(8) VALUE 'SAMPMAP'. 05 WS-MAPNAME PIC X(8) VALUE 'SAMP01'. 05 WS-RESPONSE PIC S9(8) COMP. 05 WS-RESPONSE2 PIC S9(8) COMP. 01 WS-COMMAREA. 05 WS-FUNCTION PIC X(1). 88 WS-INITIAL VALUE 'I'. 88 WS-PROCESS VALUE 'P'. 05 WS-CUSTOMER-ID PIC 9(6). 05 WS-CUSTOMER-NAME PIC X(30). 05 WS-STATUS PIC X(1). LINKAGE SECTION. 01 DFHCOMMAREA. 05 LK-FUNCTION PIC X(1). 05 LK-CUSTOMER-ID PIC 9(6). 05 LK-CUSTOMER-NAME PIC X(30). 05 LK-STATUS PIC X(1). PROCEDURE DIVISION. MAIN-LOGIC. EXEC CICS HANDLE CONDITION ERROR(ERROR-ROUTINE) END-EXEC EXEC CICS RECEIVE INTO(WS-COMMAREA) LENGTH(LENGTH OF WS-COMMAREA) RESP(WS-RESPONSE) END-EXEC IF WS-RESPONSE = DFHRESP(NORMAL) PERFORM PROCESS-TRANSACTION ELSE PERFORM ERROR-ROUTINE END-IF EXEC CICS RETURN TRANSID(WS-TRANID) COMMAREA(WS-COMMAREA) LENGTH(LENGTH OF WS-COMMAREA) END-EXEC.

2. CICS Map Handling

Handle CICS maps for screen input and output using BMS (Basic Mapping Support) and CICS commands.

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
WORKING-STORAGE SECTION. 01 WS-MAP-FIELDS. 05 WS-MAP-INPUT PIC X(80). 05 WS-MAP-OUTPUT PIC X(80). 05 WS-CURSOR-POS PIC S9(4) COMP. 05 WS-MAP-LENGTH PIC S9(4) COMP VALUE 80. PROCEDURE DIVISION. HANDLE-MAP-INPUT. EXEC CICS RECEIVE MAP(WS-MAPNAME) MAPSET(WS-MAPSET) INTO(WS-MAP-INPUT) LENGTH(WS-MAP-LENGTH) RESP(WS-RESPONSE) END-EXEC IF WS-RESPONSE = DFHRESP(NORMAL) PERFORM PROCESS-MAP-DATA ELSE IF WS-RESPONSE = DFHRESP(MAPFAIL) PERFORM SEND-INITIAL-MAP ELSE PERFORM ERROR-ROUTINE END-IF END-IF. SEND-MAP-OUTPUT. EXEC CICS SEND MAP(WS-MAPNAME) MAPSET(WS-MAPSET) FROM(WS-MAP-OUTPUT) LENGTH(WS-MAP-LENGTH) CURSOR(WS-CURSOR-POS) ERASE END-EXEC. SEND-INITIAL-MAP. EXEC CICS SEND MAP(WS-MAPNAME) MAPSET(WS-MAPSET) FROM(WS-MAP-OUTPUT) LENGTH(WS-MAP-LENGTH) ERASE END-EXEC.

3. CICS File Operations

Perform file operations using CICS commands for reading, writing, and updating data files.

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
WORKING-STORAGE SECTION. 01 WS-FILE-CONTROL. 05 WS-FILE-NAME PIC X(8) VALUE 'CUSTFILE'. 05 WS-RECORD-KEY PIC X(6). 05 WS-RECORD-LENGTH PIC S9(4) COMP VALUE 100. 01 WS-CUSTOMER-RECORD. 05 WS-CUST-ID PIC 9(6). 05 WS-CUST-NAME PIC X(30). 05 WS-CUST-ADDRESS PIC X(50). 05 WS-CUST-PHONE PIC X(12). 05 WS-CUST-BALANCE PIC 9(8)V99. PROCEDURE DIVISION. READ-CUSTOMER-RECORD. EXEC CICS READ FILE(WS-FILE-NAME) INTO(WS-CUSTOMER-RECORD) LENGTH(WS-RECORD-LENGTH) RIDFLD(WS-RECORD-KEY) RESP(WS-RESPONSE) END-EXEC EVALUATE WS-RESPONSE WHEN DFHRESP(NORMAL) PERFORM PROCESS-CUSTOMER-DATA WHEN DFHRESP(NOTFND) PERFORM CUSTOMER-NOT-FOUND WHEN OTHER PERFORM FILE-ERROR-ROUTINE END-EVALUATE. WRITE-CUSTOMER-RECORD. EXEC CICS WRITE FILE(WS-FILE-NAME) FROM(WS-CUSTOMER-RECORD) LENGTH(WS-RECORD-LENGTH) RIDFLD(WS-RECORD-KEY) RESP(WS-RESPONSE) END-EXEC IF WS-RESPONSE NOT = DFHRESP(NORMAL) PERFORM FILE-ERROR-ROUTINE END-IF.

CICS Transaction Management

1. Program Linkage

Implement program linkage using XCTL, LINK, and RETURN commands for program communication and control transfer.

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
PROCEDURE DIVISION. TRANSFER-CONTROL. EXEC CICS XCTL PROGRAM('NEXT-PROGRAM') COMMAREA(WS-COMMAREA) LENGTH(LENGTH OF WS-COMMAREA) RESP(WS-RESPONSE) END-EXEC IF WS-RESPONSE NOT = DFHRESP(NORMAL) PERFORM XCTL-ERROR-ROUTINE END-IF. CALL-SUBPROGRAM. EXEC CICS LINK PROGRAM('SUB-PROGRAM') COMMAREA(WS-COMMAREA) LENGTH(LENGTH OF WS-COMMAREA) RESP(WS-RESPONSE) END-EXEC IF WS-RESPONSE NOT = DFHRESP(NORMAL) PERFORM LINK-ERROR-ROUTINE END-IF. END-TRANSACTION. EXEC CICS RETURN TRANSID(WS-TRANID) COMMAREA(WS-COMMAREA) LENGTH(LENGTH OF WS-COMMAREA) END-EXEC.

2. Error Handling

Implement comprehensive error handling using CICS HANDLE conditions and response code checking.

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
PROCEDURE DIVISION. SETUP-ERROR-HANDLING. EXEC CICS HANDLE CONDITION ERROR(ERROR-ROUTINE) MAPFAIL(MAPFAIL-ROUTINE) NOTFND(NOTFOUND-ROUTINE) DUPREC(DUPLICATE-ROUTINE) END-EXEC. ERROR-ROUTINE. MOVE 'E' TO WS-STATUS MOVE 'SYSTEM ERROR OCCURRED' TO WS-ERROR-MESSAGE PERFORM SEND-ERROR-MESSAGE EXEC CICS RETURN TRANSID(WS-TRANID) COMMAREA(WS-COMMAREA) LENGTH(LENGTH OF WS-COMMAREA) END-EXEC. MAPFAIL-ROUTINE. MOVE 'M' TO WS-STATUS MOVE 'INVALID MAP DATA' TO WS-ERROR-MESSAGE PERFORM SEND-ERROR-MESSAGE PERFORM SEND-INITIAL-MAP. NOTFOUND-ROUTINE. MOVE 'N' TO WS-STATUS MOVE 'RECORD NOT FOUND' TO WS-ERROR-MESSAGE PERFORM SEND-ERROR-MESSAGE. DUPLICATE-ROUTINE. MOVE 'D' TO WS-STATUS MOVE 'DUPLICATE RECORD' TO WS-ERROR-MESSAGE PERFORM SEND-ERROR-MESSAGE.

3. Resource Management

Manage CICS resources including temporary storage, transient data, and program resources.

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
WORKING-STORAGE SECTION. 01 WS-TEMP-STORAGE. 05 WS-TS-QUEUE PIC X(8) VALUE 'TEMPQUE'. 05 WS-TS-LENGTH PIC S9(4) COMP. 05 WS-TS-DATA PIC X(100). PROCEDURE DIVISION. WRITE-TEMP-STORAGE. EXEC CICS WRITEQ TS QUEUE(WS-TS-QUEUE) FROM(WS-TS-DATA) LENGTH(WS-TS-LENGTH) RESP(WS-RESPONSE) END-EXEC IF WS-RESPONSE NOT = DFHRESP(NORMAL) PERFORM TEMP-STORAGE-ERROR END-IF. READ-TEMP-STORAGE. EXEC CICS READQ TS QUEUE(WS-TS-QUEUE) INTO(WS-TS-DATA) LENGTH(WS-TS-LENGTH) RESP(WS-RESPONSE) END-EXEC EVALUATE WS-RESPONSE WHEN DFHRESP(NORMAL) PERFORM PROCESS-TEMP-DATA WHEN DFHRESP(QIDERR) PERFORM QUEUE-EMPTY-ROUTINE WHEN OTHER PERFORM TEMP-STORAGE-ERROR END-EVALUATE.

Best Practices for CICS Programming

Common CICS Programming Patterns