MainframeMaster

CICS Error Handling Management

Comprehensive error handling is critical for building reliable CICS applications. This includes proper response code checking, ab-end management, condition handlers, and graceful degradation strategies.

Understanding CICS Response Codes

Response Code Structure

All CICS commands return response information through RESP and RESP2 parameters:

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
WORKING-STORAGE SECTION. 01 WS-CICS-RESPONSE. 02 WS-RESPONSE PIC S9(8) COMP. 02 WS-RESPONSE2 PIC S9(8) COMP. PROCEDURE DIVISION. STANDARD-CICS-COMMAND. EXEC CICS READ FILE('CUSTOMER') INTO(WS-CUSTOMER-RECORD) RIDFLD(WS-CUSTOMER-ID) RESP(WS-RESPONSE) RESP2(WS-RESPONSE2) END-EXEC.

Common Response Codes

CodeResponseMeaningAction
0NORMALOperation successfulContinue processing
16INVREQInvalid requestCheck parameters
20NOTFNDResource not foundHandle missing resource
22LENGERRLength errorAdjust data length
24RESUMEResume stateHandle resume condition

Condition Handlers

HANDLE CONDITION

Use HANDLE CONDITION for specific error management:

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
CONDITION-HANDLER-PATTERN. * Define condition handlers EXEC CICS HANDLE CONDITION LENGERR(ERROR-LENGTH-ERROR) NOTFND(ERROR-NOT-FOUND) FILEERR(ERROR-FILE-ERROR) END(ERROR-FILE-END) ENDFILE(ERROR-FILE-END) END-EXEC. * Protected code section EXEC CICS READ FILE('CUSTOMER') INTO(WS-CUSTOMER-RECORD) RIDFLD(WS-CUSTOMER-ID) END-EXEC. * Normal processing continues... PERFORM PROCESS-CUSTOMER-DATA EXEC CICS RETURN END-EXEC. ERROR-LENGTH-ERROR. DISPLAY 'ERROR: Data length exceeded maximum' PERFORM LOG-ERROR-DETAILS PERFORM SEND-ERROR-TO-USER EXEC CICS RETURN END-EXEC. ERROR-NOT-FOUND. DISPLAY 'ERROR: Customer not found' PERFORM LOG-CUSTOMER-NOT-FOUND PERFORM HANDLE-MISSING-CUSTOMER EXEC CICS RETURN END-EXEC. ERROR-FILE-ERROR. DISPLAY 'ERROR: File access failed' PERFORM LOG-FILE-ERROR PERFORM HANDLE-FILE-FAILURE EXEC CICS RETURN END-EXEC. ERROR-FILE-END. DISPLAY 'SUCCESS: File exhausted' PERFORM HANDLE-FILE-EXHAUSTED EXEC CICS RETURN END-EXEC.

HANDLE ABEND

Handle severe errors that cause ab-ends:

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
ABEND-HANDLER-PATTERN. * Identify ab-end handler label EXEC CICS HANDLE ABEND LABEL(ABEND-EXIT-ONLY) RESP(WS-RESPONSE) END-EXEC. * Perform risky operation PERFORM HIGH-RISK-DATABASE-OPERATION * Normal completion EXEC CICS RETURN END-EXEC. ABEND-EXIT-ONLY. * Retrieve ab-end information EXEC CICS ASSIGN ABEND-INFO(WS-ABEND-TIME) RESP(WS-RESPONSE) END-EXEC. * Log ab-end details PERFORM LOG-ABEND-INFORMATION PERFORM CLEANUP-FROM-ABEND PERFORM NOTIFY-OPERATIONS-TEAM * Terminate gracefully EXEC CICS RETURN ABEND END-EXEC.

Error Recovery Strategies

Immediate Recovery

Handle errors that can be resolved immediately:

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
IMMEDIATE-RECOVERY-PATTERN. PERFORM ATTEMPT-CRITICAL-OPERATION IF WS-RESPONSE NOT = DFHRESP(NORMAL) PERFORM LOG-OPERATION-FAILURE * Attempt immediate recovery PERFORM ATTEMPT-RECOVERY-ACTION IF WS-RECOVERY-SUCCESSFUL = 'Y' PERFORM CONTINUE-PROCESSING ELSE PERFORM GRACEFUL-DEGRADATION END-IF END-IF.

Retry Logic

Implement retry mechanisms for transient failures:

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
RETRY-LOGIC-PATTERN. MOVE ZERO TO WS-RETRY-COUNT SET WS-OPERATION-SUCCESSFUL TO FALSE PERFORM UNTIL WS-OPERATION-SUCCESSFUL OR WS-MAX-RETRIES-REACHED ADD 1 TO WS-RETRY-COUNT PERFORM ATTEMPT-OPERATION EVALUATE WS-RESPONSE WHEN DFHRESP(NORMAL) SET WS-OPERATION-SUCCESSFUL TO TRUE WHEN DFHRESP(COMMFAIL) WHEN DFHRESP(SESSERR) IF WS-RETRY-COUNT < MAX-RETRY-ATTEMPTS PERFORM WAIT-BETWEEN-RETRIES ELSE PERFORM ABORT-RETRY-ATTEMPTS END-IF WHEN OTHER PERFORM ABORT-RETRY-ATTEMPTS END-EVALUATE END-PERFORM.

Error Logging and Monitoring

Centralized Error Logging

Implement comprehensive error logging:

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
WORKING-STORAGE SECTION. 01 WS-ERROR-LOG-ENTRY. 02 WS-LOG-TIMESTAMP PIC X(26). 02 WS-LOG-SEVERITY PIC X(10). 02 WS-LOG-TRANSID PIC X(4). 02 WS-LOG-PROGRAM PIC X(8). 02 WS-LOG-ERROR-CODE PIC S9(8) COMP. 02 WS-LOG-RETURN-CODE PIC S9(8) COMP. 02 WS-LOG-RETURN-CODE2 PIC S9(8) COMP. 02 WS-LOG-ERROR-MESSAGE PIC X(100). PROCEDURE DIVISION. CENTRALIZED-ERROR-LOGGING. PERFORM GET-CURRENT-TIME PERFORM LOG-CURRENT-FAUTRE-TIME-OF-DAY IF WS-ABEND-AVAILABLE = 'Y' PERFORM LOG-ABEND-INFORMATION END-IF PERFORM LOG-RETURN-CODES PERFORM LOG-GENERAL-PROGRAM-ERROR CHECK-ERROR-TYPE. IF WS-RESPONSE = DFHRESP(IOERR) PERFORM LOG-IO-ERROR-DETAILS ELSE IF WS-RESPONSE NOT = DFHRESP(NORMAL) PERFORM LOG-GENERAL-CICS-ERROR END-IF END-IF.

Error Categories

Categorize errors for better management:

CategoryExamplesRecovery Action
Data ErrorsLENGERR, INVREQValidate input data
Resource ErrorsNOTFND, FILEERRVerify resource availability
System ErrorsIOERR, COMMUNICATION FAILEscalate to operations
Ab-end ErrorsProgram checkout errorsEmergency procedures

Advanced Error Management

Condition Propagation

Handle condition propagation across program invocations:

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
CONDITION-PROPAGATION-PATTERN. * Establish condition handlers EXEC CICS HANDLE CONDITION LENGERR(ERROR-LENGTH-PROPAGATION) INVREQ(ERROR-PROPAGATE-INVALID-REQUEST) FILEERR(ERROR-PROPAGATE-FILE-ERROR) TIMEDOUT(PG01AA) END-EXEC. PROGRAM-RETURN. EVALUATE WS-RESPONSE WHEN DFHRESP(NORMAL) PERFORM NORMAL-RETURN-PROCESSING WHEN DFHRESP(LENGERR) PERFORM LENGERR-HANDLER WHEN DFHRESP(INVREQ) PERFORM INVREQ-HANDLER WHEN DFHRESP(FILEERR) PERFORM FILEERR-HANDLER WHEN DFHRESP(TIMEDOUT) PERFORM TIMEOUT-HANDLER END-EVALUATE. EXEC CICS RETURN TRANSID(WS-RETURN-TRANSID) COMMAREA(WS-ERROR-RESPONSE) END-EXEC. ERROR-LENGTH-PROPAGATION. PERFORM HANDLE-LENGERR-FAILURE ERROR-PROPAGATE-INVALID-REQUEST. PERFORM HANDLE-INVREQ-FAILURE ERROR-PROPAGATE-FILE-ERROR. PERFORM HANDLE-FILEERR-FAILURE PG01AA. PERFORM HANDLE-TIMEDOUT-FAILURE EXEC CICS RETURN END-EXEC.

Dynamic Error Handling

Implement dynamic error handling based on runtime conditions:

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
DYNAMIC-ERROR-HANDLING. * Determine error handling strategy based on environment PERFORM CHECK-RUN-ENVIRONMENT EVALUATE WS-RUN-ENVIRONMENT WHEN 'PRODUCTION' PERFORM SET-PRODUCTION-ERROR-HANDLERS WHEN 'TEST' PERFORM SET-TEST-ERROR-HANDLERS WHEN 'DEVELOPMENT' PERFORM SET-DEVELOPMENT-ERROR-HANDLERS END-EVALUATE. SET-PRODUCTION-ERROR-HANDLERS. EXEC CICS HANDLE CONDITION INVREQ(PRODUCTION-INVALID-REQUEST) FILEERR(PRODUCTION-FILE-ERROR) ABEND(PRODUCTION-ABEND-EXIT) END-EXEC. SET-TEST-ERROR-HANDLERS. EXEC CICS HANDLE CONDITION INVREQ(TEST-INVALID-REQUEST) FILEERR(TEST-FILE-ERROR) ALL(DUMP-AND-RETURN) END-EXEC. VERIFY-ERROR-HANDLER-UPDATES. PERFORM CHECK-CIRCUIT-COGNITUS-CHECK PERFORM VERIFY-INCOMING-CIRCUIT-RESULTS PERFORM CHECK-SYSTEM-COUNT-VALIDITY. CHECK-SESSION-TICKET-TYPE. IF WS-TICKET-TYPE = 'ABEND' MOVE SPACE TO WS-SEVERITY-TYPE COMPUTE WS-SEVERITY-VALUE = ZERO END-IF. CHECK-SYSTEM-COUNT-VALIDITY. PERFORM VERIFY-INCOMING-CIRCUIT-CHECK-RESULTS IF WS-RESTART-TICKET-RECOVERY-PARAMETER = 'Y' PERFORM RESTART-SESSION-RECOVERY END-IF. VERIFY-INCOMING-CIRCUIT-CHECK-RESULTS. IF WS-RESTART-TICKET-RECOVERY-PARAMETER = 'Y' PERFORM RESTART-SESSION-RECOVERY END-IF.

Error Prevention

Input Validation

Prevent errors through robust input validation:

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
INPUT-VALIDATION-PATTERN. PERFORM VALIDATE-INPUT-DATA-FORMAT PERFORM VALIDATE-INPUT-DATA-BOUNDS PERFORM VALIDATE-BUSINESS-RULES IF WS-VALIDATION-SUCCESSFUL = 'N' PERFORM DISPLAY-VALIDATION-ERRORS PERFORM REQUEST-CORRECTED-INPUT GO TO INPUT-VALIDATION-PATTERN END-IF. VALIDATE-INPUT-DATA-FORMAT. * Check numeric fields INSPECT WS-INPUT-FIELD REPLACING ALL SPACES BY '0' * Validate date format IF WS-DATE-FIELD NOT NUMERIC SET WS-VALIDATION-ERROR TO TRUE DISPLAY 'ERROR: Invalid date format' END-IF. * Check field lengths IF LENGTH OF WS-CUSTOMER-ID NOT = EXPECTED-LENGTH SET WS-VALIDATION-ERROR TO TRUE DISPLAY 'ERROR: Customer ID length invalid' END-IF.

Resource Verification

Verify resources before using them:

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
RESOURCE-VERIFICATION-PATTERN. * Check file availability EXEC CICS INQUIRE PROGRAM('FILE-CHECKER') STATUS(STARTED) RESP(WS-RESPONSE) END-EXEC. IF WS-RESPONSE NOT = DFHRESP(NORMAL) PERFORM HANDLE-FILE-UNAVAILABLE END-IF. * Check terminal status EXEC CICS EXTRACT ATTRIBUTES TERMID(WS-TERMINAL-ID) RESP(WS-RESPONSE) END-EXEC. IF WS-RESPONSE NOT = DFHRESP(NORMAL) PERFORM HANDLE-TERMINAL-UNAVAILABLE END-IF.

Best Practices Summary

Error Handling Checklist

  • Always check RESP and RESP2 codes
  • Implement appropriate condition handlers
  • Log errors with sufficient detail
  • Provide meaningful error messages to users
  • Have different error strategies for different environments
  • Test error conditions thoroughly
  • Document error recovery procedures
  • Monitor error trends and patterns

Common Mistakes to Avoid

  • Not checking response codes
  • Ignoring ab-end conditions
  • Using single error handler for all conditions
  • Not cleaning up after errors
  • Exposing internal errors to end users
  • Not testing error conditions