CICS CONVERSE (MRO) provides multiregion operation communication capabilities for programs and transactions. It enables programs to conduct conversations across CICS regions, manage MRO communication, and handle multiregion conversations in CICS environments.
CICS CONVERSE (MRO) is a command that allows programs to conduct conversations across multiple CICS regions. It provides multiregion operation communication capabilities, MRO conversation management, and cross-region communication for CICS applications.
123456789EXEC CICS CONVERSE CONVID(conversation-id) [FROM(data-area)] [FROMLENGTH(data-length)] [INTO(data-area)] [SET(pointer-variable)] [LENGTH(data-length)] [RESP(response-code)] END-EXEC
Communication between CICS regions
Transaction routing across regions
Data synchronization across regions
Resource sharing across regions
12345678910111213141516171819202122232425262728293031IDENTIFICATION DIVISION. PROGRAM-ID. CONVERSEMRO01. DATA DIVISION. WORKING-STORAGE SECTION. 01 CONVERSATION-ID PIC X(8) VALUE 'MROCONV1'. 01 SEND-DATA PIC X(80) VALUE 'Hello from region A'. 01 SEND-LENGTH PIC S9(4) COMP VALUE 20. 01 RECEIVE-DATA PIC X(80). 01 RECEIVE-LENGTH PIC S9(4) COMP. 01 RESPONSE-CODE PIC S9(8) COMP. PROCEDURE DIVISION. DISPLAY 'Starting MRO conversation' EXEC CICS CONVERSE CONVID(CONVERSATION-ID) FROM(SEND-DATA) FROMLENGTH(SEND-LENGTH) INTO(RECEIVE-DATA) LENGTH(RECEIVE-LENGTH) RESP(RESPONSE-CODE) END-EXEC IF RESPONSE-CODE = DFHRESP(NORMAL) DISPLAY 'MRO conversation successful' DISPLAY 'Received: ' RECEIVE-DATA(1:RECEIVE-LENGTH) ELSE DISPLAY 'MRO conversation failed' END-IF EXEC CICS RETURN END-EXEC.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364IDENTIFICATION DIVISION. PROGRAM-ID. CONVERSEMRO02. DATA DIVISION. WORKING-STORAGE SECTION. 01 CONVERSATION-ID PIC X(8). 01 SEND-DATA PIC X(80). 01 SEND-LENGTH PIC S9(4) COMP. 01 RECEIVE-DATA PIC X(80). 01 RECEIVE-LENGTH PIC S9(4) COMP. 01 RESPONSE-CODE PIC S9(8) COMP. 01 CONVERSATION-COUNT PIC S9(2) COMP VALUE 0. 01 MAX-CONVERSATIONS PIC S9(2) COMP VALUE 3. 01 REGION-LIST. 05 REGION-ITEM OCCURS 3 TIMES. 10 REGION-ID PIC X(8). 10 REGION-MESSAGE PIC X(80). 10 REGION-LENGTH PIC S9(4) COMP. PROCEDURE DIVISION. PERFORM INITIALIZE-REGIONS PERFORM CONDUCT-MRO-CONVERSATIONS EXEC CICS RETURN END-EXEC. INITIALIZE-REGIONS. MOVE 'REGION01' TO REGION-ID(1) MOVE 'Request data from region 1' TO REGION-MESSAGE(1) MOVE 26 TO REGION-LENGTH(1) MOVE 'REGION02' TO REGION-ID(2) MOVE 'Request data from region 2' TO REGION-MESSAGE(2) MOVE 26 TO REGION-LENGTH(2) MOVE 'REGION03' TO REGION-ID(3) MOVE 'Request data from region 3' TO REGION-MESSAGE(3) MOVE 26 TO REGION-LENGTH(3). CONDUCT-MRO-CONVERSATIONS. PERFORM VARYING CONVERSATION-COUNT FROM 1 BY 1 UNTIL CONVERSATION-COUNT > MAX-CONVERSATIONS MOVE REGION-ID(CONVERSATION-COUNT) TO CONVERSATION-ID MOVE REGION-MESSAGE(CONVERSATION-COUNT) TO SEND-DATA MOVE REGION-LENGTH(CONVERSATION-COUNT) TO SEND-LENGTH PERFORM CONDUCT-MRO-CONVERSATION IF RESPONSE-CODE = DFHRESP(NORMAL) DISPLAY 'MRO conversation ' CONVERSATION-COUNT ' successful' DISPLAY 'Response: ' RECEIVE-DATA(1:RECEIVE-LENGTH) ELSE DISPLAY 'MRO conversation ' CONVERSATION-COUNT ' failed' END-IF END-PERFORM. CONDUCT-MRO-CONVERSATION. EXEC CICS CONVERSE CONVID(CONVERSATION-ID) FROM(SEND-DATA) FROMLENGTH(SEND-LENGTH) INTO(RECEIVE-DATA) LENGTH(RECEIVE-LENGTH) RESP(RESPONSE-CODE) END-EXEC.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960IDENTIFICATION DIVISION. PROGRAM-ID. CONVERSEMRO03. DATA DIVISION. WORKING-STORAGE SECTION. 01 CONVERSATION-ID PIC X(8) VALUE 'MROCONV1'. 01 SEND-DATA PIC X(80) VALUE 'Test MRO message'. 01 SEND-LENGTH PIC S9(4) COMP VALUE 17. 01 RECEIVE-DATA PIC X(80). 01 RECEIVE-LENGTH PIC S9(4) COMP. 01 RESPONSE-CODE PIC S9(8) COMP. 01 RETRY-COUNT PIC S9(2) COMP VALUE 0. 01 MAX-RETRIES PIC S9(2) COMP VALUE 3. 01 MRO-CONVERSATION-SUCCESSFUL PIC X(1) VALUE 'N'. PROCEDURE DIVISION. PERFORM CONDUCT-MRO-CONVERSATION-WITH-RETRY EXEC CICS RETURN END-EXEC. CONDUCT-MRO-CONVERSATION-WITH-RETRY. PERFORM CONDUCT-MRO-CONVERSATION IF RESPONSE-CODE NOT = DFHRESP(NORMAL) AND RETRY-COUNT < MAX-RETRIES ADD 1 TO RETRY-COUNT DISPLAY 'Retry ' RETRY-COUNT ' MRO conversation' PERFORM CONDUCT-MRO-CONVERSATION-WITH-RETRY END-IF. CONDUCT-MRO-CONVERSATION. EXEC CICS CONVERSE CONVID(CONVERSATION-ID) FROM(SEND-DATA) FROMLENGTH(SEND-LENGTH) INTO(RECEIVE-DATA) LENGTH(RECEIVE-LENGTH) RESP(RESPONSE-CODE) END-EXEC EVALUATE RESPONSE-CODE WHEN DFHRESP(NORMAL) MOVE 'Y' TO MRO-CONVERSATION-SUCCESSFUL DISPLAY 'MRO conversation successful' WHEN DFHRESP(NOTAUTH) DISPLAY 'Not authorized for MRO conversation' WHEN DFHRESP(INVREQ) DISPLAY 'Invalid MRO conversation request' WHEN DFHRESP(CONVIDERR) DISPLAY 'Invalid MRO conversation ID' WHEN DFHRESP(CONVFAILED) DISPLAY 'MRO conversation failed' WHEN DFHRESP(CONVTIMEOUT) DISPLAY 'MRO conversation timeout' WHEN DFHRESP(MROERR) DISPLAY 'MRO communication error' WHEN DFHRESP(REGIONERR) DISPLAY 'Region communication error' WHEN OTHER DISPLAY 'Unexpected MRO conversation error' END-EVALUATE.
Think of CICS CONVERSE (MRO) like talking to friends in different rooms:
Create a program that conducts a simple MRO conversation.
Write a program that manages multiple MRO conversation operations.
Implement comprehensive error handling for MRO conversation failures.