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.
All CICS commands return response information through RESP and RESP2 parameters:
12345678910111213WORKING-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.
| Code | Response | Meaning | Action |
|---|---|---|---|
| 0 | NORMAL | Operation successful | Continue processing |
| 16 | INVREQ | Invalid request | Check parameters |
| 20 | NOTFND | Resource not found | Handle missing resource |
| 22 | LENGERR | Length error | Adjust data length |
| 24 | RESUME | Resume state | Handle resume condition |
Use HANDLE CONDITION for specific error management:
123456789101112131415161718192021222324252627282930313233343536373839404142CONDITION-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 severe errors that cause ab-ends:
12345678910111213141516171819202122232425ABEND-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.
Handle errors that can be resolved immediately:
123456789101112131415IMMEDIATE-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.
Implement retry mechanisms for transient failures:
1234567891011121314151617181920212223RETRY-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.
Implement comprehensive error logging:
12345678910111213141516171819202122232425262728293031WORKING-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.
Categorize errors for better management:
| Category | Examples | Recovery Action |
|---|---|---|
| Data Errors | LENGERR, INVREQ | Validate input data |
| Resource Errors | NOTFND, FILEERR | Verify resource availability |
| System Errors | IOERR, COMMUNICATION FAIL | Escalate to operations |
| Ab-end Errors | Program checkout errors | Emergency procedures |
Handle condition propagation across program invocations:
123456789101112131415161718192021222324252627282930313233343536373839CONDITION-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.
Implement dynamic error handling based on runtime conditions:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748DYNAMIC-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.
Prevent errors through robust input validation:
1234567891011121314151617181920212223242526INPUT-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.
Verify resources before using them:
12345678910111213141516171819RESOURCE-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.