ASG
IBM
Zystems
Cressida
Icon
Netflexity
 
  MQSeries.net
Search  Search       Tech Exchange      Education      Certifications      Library      Info Center      SupportPacs      LinkedIn  Search  Search                                                                   FAQ  FAQ   Usergroups  Usergroups
 
Register  ::  Log in Log in to check your private messages
 
RSS Feed - WebSphere MQ Support RSS Feed - Message Broker Support

MQSeries.net Forum Index » IBM MQ API Support » mq get with syncpoint

Post new topic  Reply to topic
 mq get with syncpoint « View previous topic :: View next topic » 
Author Message
avigosa
PostPosted: Thu Mar 20, 2003 8:02 pm    Post subject: mq get with syncpoint Reply with quote

Newbie

Joined: 20 Mar 2003
Posts: 9
Location: Singapore

Hi there

I have written a program in cobol to read message from a queue with syncpoint. which means the message is not deleted from the queue till the transaction is commited or backed out.

In one of the scenario I am crashing the program after the csqbget and the message is getting lost from the queue.. in actaul fact it should reinstate the message in the queue...

any help is greatly appreciated....

thanks
Back to top
View user's profile Send private message MSN Messenger
nimconsult
PostPosted: Thu Mar 20, 2003 11:31 pm    Post subject: Reply with quote

Master

Joined: 22 May 2002
Posts: 268
Location: NIMCONSULT - Belgium

Can you describe the scenario?
_________________
Nicolas Maréchal
Senior Architect - Partner

NIMCONSULT Software Architecture Services (Belgium)
http://www.nimconsult.be
Back to top
View user's profile Send private message Send e-mail Visit poster's website
avigosa
PostPosted: Fri Mar 21, 2003 4:11 am    Post subject: Reply with quote

Newbie

Joined: 20 Mar 2003
Posts: 9
Location: Singapore

The complete scenario is :

1. I am making connection,opening a queue and enquiring the queue. This is a persistant queue.

2. getting the message from the queue with the following option.
(a) gmo wait, quescecing, convert, syncpoint. here wait period is unlimited.
(b) make a call to the idms routine to update the db.
(c) commit
(d) if error backout
(e) disconnect.

I am putting a junk message so that before idms db update is performed the job fails with system abend. due to this abend the job crashes. this is happening after the get and before commit or rollback step.

Rightfully the message should go back to the local queue. But in this scenario the message is not going to the local queue neither backout queue.

All the call are dynamic calls. using csqbget etc..
_________________
contact admin
HCL Perot Systems Pte. Ltd.
Back to top
View user's profile Send private message MSN Messenger
mqonnet
PostPosted: Fri Mar 21, 2003 6:39 am    Post subject: Reply with quote

Grand Master

Joined: 18 Feb 2002
Posts: 1114
Location: Boston, Ma, Usa.

I am not sure what your csqbget is doing, but under normal circumstances the message should go back to the queue. Be it a persistent or a non-persistent message.

Check to see if you have any other getters aginst this queue running simultaneously that might pull of this message which you think is lost, which in fact was backed out.

I dont see any other scenario other than this. Would be of help if you posted your code here. Also did you check that there is ONLY 1 and ONLY 1 ipprocs when you are doing all this.

Cheers
Kumar
_________________
IBM Certified WebSphere MQ V5.3 Developer
IBM Certified WebSphere MQ V5.3 Solution Designer
IBM Certified WebSphere MQ V5.3 System Administrator
Back to top
View user's profile Send private message Send e-mail Visit poster's website
avigosa
PostPosted: Mon Mar 24, 2003 1:42 am    Post subject: Reply with quote

Newbie

Joined: 20 Mar 2003
Posts: 9
Location: Singapore

Heres the code:

Quote:

**********************************************************
* 100-MAIN-MODULE - MAIN PROGRAM LOGIC *
**********************************************************
100-MAIN-MODULE.
DISPLAY 'IN MAIN AREA PROGRAM, RCRPAPP '.
PERFORM 800-INITIALIZATION THRU 800-EXIT.
PERFORM 200-MQ-CONNECT THRU 200-EXIT.
PERFORM 300-MQ-OPEN THRU 300-EXIT.
PERFORM 400-MQ-GET-MSGS THRU 400-EXIT UNTIL NO-MORE-MSGS.
PERFORM 600-MQ-CLOSE THRU 600-EXIT.
PERFORM 700-MQ-DISCONN THRU 700-EXIT.
100-MAIN-EXIT.
EXIT PROGRAM.


***********************************************************
* 200-MQ-CONNECT - PERFORMED FROM 100-MAIN-MODULE. *
* CONNECTS TO THE LOCAL QUEUE MANAGER *
***********************************************************
200-MQ-CONNECT.

MOVE 0 TO MQ-HCONN
MQ-COMPCODE
MQ-REASON.
MOVE 'CSQBCONN' TO WS-MQ-PROGRAM.
CALL WS-MQ-PROGRAM USING MQ-QM-NAME
MQ-HCONN
MQ-COMPCODE
MQ-REASON.

EVALUATE MQ-REASON
WHEN 0
DISPLAY 'CONNECTED TO QM : ', MQ-QM-NAME
WHEN OTHER
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '200-MQ-CONNECT' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
MOVE 'CSQBCONN' TO LK-MQ-CALL OF
LK-MQ-ERROR-DETAILS
MOVE MQ-COMPCODE TO LK-MQ-CC OF
LK-MQ-ERROR-DETAILS
MOVE MQ-REASON TO LK-MQ-RC OF
LK-MQ-ERROR-DETAILS
MOVE '8888' TO LK-RESPONSE-CODE
SET LK-MQ-ERROR TO TRUE
PERFORM 999-ABNORMAL-EXIT
END-EVALUATE.

200-EXIT.
EXIT.

***********************************************************
* 300-MQ-OPEN - PERFORMED FROM 100-MAIN-MODULE. *
* OPENS THE LOCAL QUEUE BEFORE GETTING THE MESSAGES *
***********************************************************
300-MQ-OPEN.
MOVE MQM-OBJECT-DESCRIPTOR-I TO MQM-OBJECT-DESCRIPTOR.
INITIALIZE MQ-OPEN-OPTIONS
MQ-QLHOBJ
MQ-COMPCODE
MQ-REASON.

COMPUTE MQ-OPEN-OPTIONS = MQOO-INPUT-AS-Q-DEF
+ MQOO-INQUIRE +
+ MQOO-FAIL-IF-QUIESCING.
MOVE MQOT-Q TO MQOD-OBJECTTYPE
OF MQOD OF MQM-OBJECT-DESCRIPTOR.
MOVE MQ-Q-NAME TO MQOD-OBJECTNAME
OF MQOD OF MQM-OBJECT-DESCRIPTOR.

MOVE 'CSQBOPEN' TO WS-MQ-PROGRAM.
CALL WS-MQ-PROGRAM USING MQ-HCONN
MQOD OF MQM-OBJECT-DESCRIPTOR
MQ-OPEN-OPTIONS
MQ-QLHOBJ
MQ-COMPCODE
MQ-REASON.

EVALUATE MQ-REASON
WHEN 0
MOVE MQ-QLHOBJ TO MQ-INPUT-QUEUE-HOBJ
MOVE 'Q OPENED' TO WS-INFO
MOVE MQ-Q-NAME TO WS-QMNAME
DISPLAY WS-HEADER
PERFORM 310-INQUIRE-ALIAS
PERFORM 320-OPEN-BASE-QUEUE
WHEN OTHER
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '300-MQ-OPEN' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
MOVE MQ-Q-NAME TO LK-Q-NAME
MOVE MQ-QM-NAME TO LK-QM-NAME
MOVE 'CSQBOPEN' TO LK-MQ-CALL OF
LK-MQ-ERROR-DETAILS
MOVE MQ-COMPCODE TO LK-MQ-CC OF
LK-MQ-ERROR-DETAILS
MOVE MQ-REASON TO LK-MQ-RC OF
LK-MQ-ERROR-DETAILS
MOVE '8888' TO LK-RESPONSE-CODE
SET LK-MQ-ERROR TO TRUE
PERFORM 990-MQ-BACKOUT THRU 990-EXIT
PERFORM 999-ABNORMAL-EXIT
END-EVALUATE.

MOVE MQCA-BACKOUT-REQ-Q-NAME TO MQ-SELECTOR(1).
MOVE MQIA-BACKOUT-THRESHOLD TO MQ-SELECTOR(2).
MOVE 2 TO MQ-SELCOUNT.
MOVE 1 TO MQ-INTATTRCOUNT.
MOVE LENGTH OF MQ-BACKOUT-QUEUE TO MQ-CHARATTRLEN.
MOVE 'CSQBINQ' TO WS-MQ-PROGRAM.
CALL WS-MQ-PROGRAM USING MQ-HCONN
MQ-BASE-QUEUE-HOBJ
MQ-SELCOUNT
MQ-SELECTORS
MQ-INTATTRCOUNT
MQ-INTATTRS
MQ-CHARATTRLEN
MQ-BACKOUT-QUEUE
MQ-COMPCODE
MQ-REASON.

EVALUATE MQ-REASON
WHEN 0
MOVE MQ-INTATTR(1) TO MQ-BACKOUT-THRESHOLD
MOVE 'Q INQUIRED' TO WS-INFO
DISPLAY 'MQ-BACKOUT-QUEUE: ', MQ-BACKOUT-QUEUE
DISPLAY 'MQ-BACKOUT-THRESHOLD: ', MQ-BACKOUT-THRESHOLD
WHEN OTHER
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '300-MQ-OPEN' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
MOVE 'CSQBINQ' TO LK-MQ-CALL OF
LK-MQ-ERROR-DETAILS
MOVE MQ-COMPCODE TO LK-MQ-CC OF
LK-MQ-ERROR-DETAILS
MOVE MQ-REASON TO LK-MQ-RC OF
LK-MQ-ERROR-DETAILS
MOVE '8888' TO LK-RESPONSE-CODE
SET LK-MQ-ERROR TO TRUE
PERFORM 999-ABNORMAL-EXIT
END-EVALUATE.
300-EXIT.
EXIT.

**********************************************************
* 310-INQUIRE-ALIAS-PERFORMED FROM 300-MQ-OPEN. *
* INQUIRES ALIAS QUEUE TO GET BASE QUEUE NAME *
**********************************************************
310-INQUIRE-ALIAS.

MOVE MQCA-BASE-Q-NAME TO MQ-SELECTOR(1).
MOVE 1 TO MQ-SELCOUNT.
MOVE 0 TO MQ-INTATTRCOUNT.
MOVE MQ-Q-NAME-LENGTH TO MQ-CHARATTRLEN.
MOVE 'CSQBINQ' TO WS-MQ-PROGRAM.
CALL WS-MQ-PROGRAM USING MQ-HCONN
MQ-INPUT-QUEUE-HOBJ
MQ-SELCOUNT
MQ-SELECTORS
MQ-INTATTRCOUNT
MQ-INTATTRS
MQ-CHARATTRLEN
MQ-BASE-QUEUE
MQ-COMPCODE
MQ-REASON.

EVALUATE MQ-REASON
WHEN 0
MOVE 'Q INQUIRED' TO WS-INFO
WHEN OTHER
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '310-INQUIRE-BASE' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
MOVE 'CSQBINQ' TO LK-MQ-CALL OF
LK-MQ-ERROR-DETAILS
MOVE MQ-COMPCODE TO LK-MQ-CC OF
LK-MQ-ERROR-DETAILS
MOVE MQ-REASON TO LK-MQ-RC OF
LK-MQ-ERROR-DETAILS
MOVE '8888' TO LK-RESPONSE-CODE
SET LK-MQ-ERROR TO TRUE
PERFORM 999-ABNORMAL-EXIT
END-EVALUATE.

310-EXIT.
EXIT.

**********************************************************
* 320-OPEN-BASE-QUEUE. PERFORMED FROM 300-MQ-OPEN. *
* OPENS BASE QUEUE TO INQUIRE. *
**********************************************************
320-OPEN-BASE-QUEUE.
MOVE MQM-OBJECT-DESCRIPTOR-I TO MQM-OBJECT-DESCRIPTOR.
INITIALIZE MQ-OPEN-OPTIONS
MQ-QLHOBJ
MQ-COMPCODE
MQ-REASON.

COMPUTE MQ-OPEN-OPTIONS = MQOO-INQUIRE
+ MQOO-FAIL-IF-QUIESCING.
MOVE MQOT-Q TO MQOD-OBJECTTYPE
OF MQOD OF MQM-OBJECT-DESCRIPTOR.
MOVE MQ-BASE-QUEUE TO MQOD-OBJECTNAME
OF MQOD OF MQM-OBJECT-DESCRIPTOR.

MOVE 'CSQBOPEN' TO WS-MQ-PROGRAM.
CALL WS-MQ-PROGRAM USING MQ-HCONN
MQOD OF MQM-OBJECT-DESCRIPTOR
MQ-OPEN-OPTIONS
MQ-QLHOBJ
MQ-COMPCODE
MQ-REASON.

EVALUATE MQ-REASON
WHEN 0
MOVE MQ-QLHOBJ TO MQ-BASE-QUEUE-HOBJ
MOVE 'Q OPENED' TO WS-INFO
WHEN OTHER
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '320-OPEN-BASE-QUEUE' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
MOVE MQ-BASE-QUEUE TO LK-Q-NAME
MOVE MQ-QM-NAME TO LK-QM-NAME
MOVE 'CSQBOPEN' TO LK-MQ-CALL OF
LK-MQ-ERROR-DETAILS
MOVE MQ-COMPCODE TO LK-MQ-CC OF
LK-MQ-ERROR-DETAILS
MOVE MQ-REASON TO LK-MQ-RC OF
LK-MQ-ERROR-DETAILS
MOVE '8888' TO LK-RESPONSE-CODE
SET LK-MQ-ERROR TO TRUE
PERFORM 990-MQ-BACKOUT THRU 990-EXIT
PERFORM 999-ABNORMAL-EXIT
END-EVALUATE.

320-EXIT.
EXIT.


**********************************************************
* 400-MQ-GET-MSGS -PERFORMED FROM 100-MAIN-MODULE. *
* RETRIEVES MESSAGES FROM LOCAL QUEUE. *
**********************************************************
400-MQ-GET-MSGS.
MOVE MQM-MESSAGE-DESCRIPTOR-I
TO MQM-MESSAGE-DESCRIPTOR.
MOVE MQM-GET-MESSAGE-OPTIONS-I
TO MQM-GET-MESSAGE-OPTIONS.
INITIALIZE MQ-QLHOBJ
MQ-ACTUAL-GET-LENGTH
MQ-COMPCODE
MQ-REASON.

MOVE MQ-INPUT-QUEUE-HOBJ TO MQ-QLHOBJ.
COMPUTE MQGMO-OPTIONS OF MQM-GET-MESSAGE-OPTIONS =
MQGMO-WAIT +
MQGMO-FAIL-IF-QUIESCING +
MQGMO-CONVERT +
MQGMO-SYNCPOINT.
MOVE MQWI-UNLIMITED TO MQGMO-WAITINTERVAL OF
MQM-GET-MESSAGE-OPTIONS.

MOVE 'CSQBGET' TO WS-MQ-PROGRAM.
CALL WS-MQ-PROGRAM USING MQ-HCONN
MQ-QLHOBJ
MQMD OF MQM-MESSAGE-DESCRIPTOR
MQGMO OF MQM-GET-MESSAGE-OPTIONS
WS-MAX-MESSAGE-LENGTH
WS-REQUEST-MESSAGE
MQ-ACTUAL-GET-LENGTH
MQ-COMPCODE
MQ-REASON.

EVALUATE MQ-REASON
WHEN 0
MOVE FUNCTION CURRENT-DATE TO TEST-DATE
DISPLAY 'REQUEST MSG READ AT : ', TEST-DATE
MOVE MQ-ACTUAL-GET-LENGTH TO WS-REQUEST-DATA-LENGTH
MOVE FUNCTION UPPER-CASE(WS-REQUEST-MESSAGE) TO
WS-REQUEST-MESSAGE-U-CASE
MOVE WS-REQUEST-MESSAGE-U-CASE TO WS-REQUEST-MESSAGE
DISPLAY 'REQUEST-MESSAGE: ', WS-REQUEST-MESSAGE
DISPLAY 'BACKOUT COUNT FOR MSG: '
DISPLAY MQMD-BACKOUTCOUNT OF MQMD
OF MQM-MESSAGE-DESCRIPTOR
DISPLAY 'REQUEST MSG LENGTH: ',WS-REQUEST-DATA-LENGTH
IF MQMD-BACKOUTCOUNT OF MQMD
OF MQM-MESSAGE-DESCRIPTOR >= MQ-BACKOUT-THRESHOLD
SET ERROR-IN-DATA TO TRUE
END-IF
IF WS-REQUEST-MESSAGE(1: = "TIME-OUT"
SET NO-MORE-MSGS TO TRUE
DISPLAY 'TIME-OUT MESSAGE RECEIVED'
DISPLAY 'APPLICATION JOB SHUTTING DOWN'
ELSE
MOVE MQM-MESSAGE-DESCRIPTOR TO
MQM-MESSAGE-DESCRIPTOR-BACKOUT
MOVE MQMD-MSGID OF MQMD
OF MQM-MESSAGE-DESCRIPTOR
TO WS-MQ-MSGID
MOVE MQMD-CORRELID OF MQMD
OF MQM-MESSAGE-DESCRIPTOR
TO WS-MQ-CORRLID
MOVE MQMD-REPLYTOQ
OF MQMD OF MQM-MESSAGE-DESCRIPTOR
TO WS-REPLY-QNAME

MOVE MQMD-REPLYTOQMGR
OF MQMD OF MQM-MESSAGE-DESCRIPTOR
TO WS-REPLY-QMNAME
EVALUATE WS-REPLY-QMNAME(1:6)
WHEN 'RPSNT1'
MOVE 'AQ01' TO WS-QUEUE-TP-CD
MOVE 'OQ' TO WS-QUEUE-DIRECTION
WHEN 'RPSNT2'
MOVE 'AQ02' TO WS-QUEUE-TP-CD
MOVE 'OQ' TO WS-QUEUE-DIRECTION
WHEN 'RPSNT3'
MOVE 'AQ03' TO WS-QUEUE-TP-CD
MOVE 'OQ' TO WS-QUEUE-DIRECTION
WHEN 'RPSNT4'
MOVE 'AQ04' TO WS-QUEUE-TP-CD
MOVE 'OQ' TO WS-QUEUE-DIRECTION
WHEN OTHER
MOVE 'XXXX' TO WS-QUEUE-TP-CD
END-EVALUATE
DISPLAY 'REPLY TO QUEUE: ', WS-REPLY-QNAME
END-IF
WHEN OTHER
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '400-MQ-GET-MSGS' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
MOVE MQ-BASE-QUEUE TO LK-Q-NAME
MOVE MQ-QM-NAME TO LK-QM-NAME
MOVE 'CSQBGET' TO LK-MQ-CALL OF
LK-MQ-ERROR-DETAILS
MOVE MQ-COMPCODE TO LK-MQ-CC OF
LK-MQ-ERROR-DETAILS
MOVE MQ-REASON TO LK-MQ-RC OF
LK-MQ-ERROR-DETAILS
MOVE '8888' TO LK-RESPONSE-CODE
SET LK-MQ-ERROR TO TRUE
PERFORM 990-MQ-BACKOUT THRU 990-EXIT
PERFORM 999-ABNORMAL-EXIT
END-EVALUATE.
BIND RUN-UNIT ON ANY-ERROR-STATUS
MOVE '9999' TO LK-RESPONSE-CODE
MOVE 'BIND RUN UNIT FAILED,ERROR-STATUS IS : ' TO WS-MSG1
MOVE ERROR-STATUS TO WS-MSG2
MOVE WS-MSG TO
LK-ERROR-MESSAGE OF LK-USER-ERROR-DETAILS
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '400-MQ-GET-MSGS' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
PERFORM 990-MQ-BACKOUT THRU 990-EXIT
PERFORM 999-ABNORMAL-EXIT.
IF NOT NO-MORE-MSGS
PERFORM 410-PROCESS-PARA THRU 410-EXIT
UNTIL WS-RETRY-FLAG = 'NO'
END-IF.
MOVE 'YES' TO WS-RETRY-FLAG.
MOVE 1 TO WS-RETRY-COUNT.
400-EXIT.
EXIT.

***********************************************************
* 410-PROCESS-PARA - PERFORMED FROM 400-MQ-GET-MSGS *
* EVALUATES THE MESSAGE TYPE AND THEN CALL *
* CORRESPONDING IDMS ROUTINE TO PROCESS THE MESSAGE*
***********************************************************
410-PROCESS-PARA.
IF ERROR-IN-DATA
DISPLAY 'PERFORMING BACKOUT PROCESS'
MOVE 'NO' TO WS-BACKOUT-FLAG
MOVE MQ-BACKOUT-QUEUE TO WS-REPLY-QNAME
DISPLAY 'BACKOUT QUEUE : ', WS-REPLY-QNAME
PERFORM 411-OPEN-RESPONSE-QUEUE-PARA THRU 411-EXIT
PERFORM 414-MQ-PUT-MSGS-BACKOUT THRU 414-EXIT
PERFORM 500-MQ-COMMIT-PARA THRU 500-EXIT
MOVE 'NO' TO WS-RETRY-FLAG
FINISH
ELSE
MOVE WS-REQUEST-MESSAGE(1: TO WS-MESSAGE-NAME
DISPLAY 'MESSAGE TYPE :', WS-MESSAGE-NAME
EVALUATE WS-MESSAGE-NAME
WHEN 'RPSAP01 '
MOVE 'RCRPFMD' TO WS-IDMS-PROGRAM
DISPLAY 'CALLING: ', WS-IDMS-PROGRAM
MOVE FUNCTION CURRENT-DATE TO TEST-DATE
DISPLAY 'CALLING IDMS PGM AT : ', TEST-DATE
CALL WS-IDMS-PROGRAM USING WS-MESSAGE-DETAILS
SUBSCHEMA-CTRL
MOVE FUNCTION CURRENT-DATE TO TEST-DATE
DISPLAY 'AFTER CALLING IDMS PGM : ', TEST-DATE
DISPLAY 'RETURNING FROM : ', WS-IDMS-PROGRAM
DISPLAY 'REPLY MESSAGE : ', WS-REPLY-MESSAGE
DISPLAY 'REPLY DATA LENGTH : ',WS-REPLY-DATA-LENGTH
DISPLAY 'ERROR-STATUS RETURNED FROM IDMS ROUTINE',
ERROR-STATUS
IF WS-REPLY-MESSAGE(21:2) = '90'
IF ERROR-STATUS(3:2) = '29' OR '69'
BIND RUN-UNIT
DISPLAY ' RETURN CODE = 90'
ADD 1 TO WS-RETRY-COUNT
DISPLAY 'IDMS ROLLBACK, RETRY-COUNT',WS-RETRY-COUNT
ELSE
MOVE '9999' TO LK-RESPONSE-CODE
MOVE 'RETURN CODE IS 90, ABNORMAL EXIT' TO
LK-ERROR-MESSAGE OF LK-USER-ERROR-DETAILS
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '410-PROCESS-PARA' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
PERFORM 990-MQ-BACKOUT THRU 990-EXIT
PERFORM 999-ABNORMAL-EXIT
END-IF
ELSE
IF WS-REPLY-MESSAGE(21:2) NOT = '00'
ROLLBACK
DISPLAY 'NON ZERO RC FROM IDMS ROUTINE'
BIND RUN-UNIT
END-IF
END-IF
IF (WS-REPLY-MESSAGE(21:2) NOT = '90') OR
WS-RETRY-COUNT > 2
DISPLAY 'PROCESSING RESPONSE'
FINISH
SET INQUIRY TO TRUE
PERFORM 411-OPEN-RESPONSE-QUEUE-PARA THRU 411-EXIT
PERFORM 413-MQ-PUT-MSGS THRU 413-EXIT
PERFORM 500-MQ-COMMIT-PARA THRU 500-EXIT
MOVE 'NO' TO WS-RETRY-FLAG
END-IF
WHEN 'RPSAP02 '
MOVE 'RCRPBCF ' TO WS-IDMS-PROGRAM
PERFORM 420-UPDATE-2-PHASE-COMMIT
WHEN 'RPSAP03 '
MOVE 'RCRPFHD' TO WS-IDMS-PROGRAM
DISPLAY 'CALLING: ', WS-IDMS-PROGRAM
MOVE FUNCTION CURRENT-DATE TO TEST-DATE
DISPLAY 'CALLING IDMS PGM AT : ', TEST-DATE
CALL WS-IDMS-PROGRAM USING WS-MESSAGE-DETAILS
SUBSCHEMA-CTRL
MOVE FUNCTION CURRENT-DATE TO TEST-DATE
DISPLAY 'AFTER CALLING IDMS PGM : ', TEST-DATE
DISPLAY 'RETURNING FROM : ', WS-IDMS-PROGRAM
DISPLAY 'REPLY MESSAGE : ', WS-REPLY-MESSAGE
DISPLAY 'REPLY DATA LENGTH : ',WS-REPLY-DATA-LENGTH
DISPLAY 'ERROR-STATUS RETURNED FROM IDMS ROUTINE',
ERROR-STATUS
IF WS-REPLY-MESSAGE(21:2) = '90'
IF ERROR-STATUS(3:2) = '29' OR '69'
BIND RUN-UNIT
DISPLAY ' RETURN CODE = 90'
ADD 1 TO WS-RETRY-COUNT
DISPLAY 'IDMS ROLLBACK, RETRY-COUNT',WS-RETRY-COUNT
ELSE
MOVE '9999' TO LK-RESPONSE-CODE
MOVE 'RETURN CODE IS 90, ABNORMAL EXIT' TO
LK-ERROR-MESSAGE OF LK-USER-ERROR-DETAILS
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '410-PROCESS-PARA' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
PERFORM 990-MQ-BACKOUT THRU 990-EXIT
PERFORM 999-ABNORMAL-EXIT
END-IF
ELSE
IF WS-REPLY-MESSAGE(21:2) NOT = '00'
ROLLBACK
DISPLAY 'NON ZERO RC FROM IDMS ROUTINE'
BIND RUN-UNIT
END-IF
END-IF
IF (WS-REPLY-MESSAGE(21:2) NOT = '90') OR
WS-RETRY-COUNT > 2
DISPLAY 'PROCESSING RESPONSE'
FINISH
SET INQUIRY TO TRUE
PERFORM 411-OPEN-RESPONSE-QUEUE-PARA THRU 411-EXIT
PERFORM 413-MQ-PUT-MSGS THRU 413-EXIT
PERFORM 500-MQ-COMMIT-PARA THRU 500-EXIT
MOVE 'NO' TO WS-RETRY-FLAG
END-IF
WHEN 'RPSAP04 '
MOVE 'RCRPMHD ' TO WS-IDMS-PROGRAM
PERFORM 420-UPDATE-2-PHASE-COMMIT
WHEN 'RPSAP05 '
MOVE 'RCRPCHA ' TO WS-IDMS-PROGRAM
PERFORM 420-UPDATE-2-PHASE-COMMIT
WHEN 'RPSAP06 '
MOVE 'RCRPCIE ' TO WS-IDMS-PROGRAM
PERFORM 420-UPDATE-2-PHASE-COMMIT
WHEN 'RPSAP07 '
MOVE 'RCRPVMB' TO WS-IDMS-PROGRAM
DISPLAY 'CALLING RCRPVMB'
MOVE FUNCTION CURRENT-DATE TO TEST-DATE
DISPLAY 'CALLING IDMS PGM AT : ', TEST-DATE
CALL WS-IDMS-PROGRAM USING WS-MESSAGE-DETAILS
SUBSCHEMA-CTRL
MOVE FUNCTION CURRENT-DATE TO TEST-DATE
DISPLAY 'AFTER CALLING IDMS PGM : ', TEST-DATE
DISPLAY 'RETURNING FROM : ', WS-IDMS-PROGRAM
DISPLAY 'REPLY MESSAGE : ', WS-REPLY-MESSAGE
DISPLAY 'REPLY DATA LENGTH : ',WS-REPLY-DATA-LENGTH
DISPLAY 'ERROR-STATUS RETURNED FROM IDMS ROUTINE',
ERROR-STATUS
IF WS-REPLY-MESSAGE(21:2) = '90'
IF ERROR-STATUS(3:2) = '29' OR '69'
BIND RUN-UNIT
DISPLAY ' RETURN CODE = 90'
ADD 1 TO WS-RETRY-COUNT
DISPLAY 'IDMS ROLLBACK, RETRY-COUNT',WS-RETRY-COUNT
ELSE
MOVE '9999' TO LK-RESPONSE-CODE
MOVE 'RETURN CODE IS 90, ABNORMAL EXIT' TO
LK-ERROR-MESSAGE OF LK-USER-ERROR-DETAILS
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '410-PROCESS-PARA' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
PERFORM 990-MQ-BACKOUT THRU 990-EXIT
PERFORM 999-ABNORMAL-EXIT
END-IF
ELSE
IF WS-REPLY-MESSAGE(21:2) NOT = '00'
ROLLBACK
DISPLAY 'IDMS ROUTINE RETURNED 99'
BIND RUN-UNIT
END-IF
END-IF
IF (WS-REPLY-MESSAGE(21:2) NOT= '90') OR
WS-RETRY-COUNT > 2
DISPLAY 'PROCESSING RESPONSE'
FINISH
SET INQUIRY TO TRUE
PERFORM 411-OPEN-RESPONSE-QUEUE-PARA THRU 411-EXIT
PERFORM 413-MQ-PUT-MSGS THRU 413-EXIT
PERFORM 500-MQ-COMMIT-PARA THRU 500-EXIT
MOVE 'NO' TO WS-RETRY-FLAG
END-IF
WHEN 'RPSAP08 '
MOVE 'RCRPLBS' TO WS-IDMS-PROGRAM
DISPLAY 'CALLING RCRPLBS'
MOVE FUNCTION CURRENT-DATE TO TEST-DATE
DISPLAY 'CALLING IDMS PGM AT : ', TEST-DATE
CALL WS-IDMS-PROGRAM USING WS-MESSAGE-DETAILS
SUBSCHEMA-CTRL
MOVE FUNCTION CURRENT-DATE TO TEST-DATE
DISPLAY 'AFTER CALLING IDMS PGM : ', TEST-DATE
DISPLAY 'RETURNING FROM : ', WS-IDMS-PROGRAM
DISPLAY 'REPLY MESSAGE : ', WS-REPLY-MESSAGE
DISPLAY 'REPLY DATA LENGTH : ',WS-REPLY-DATA-LENGTH
DISPLAY 'ERROR-STATUS RETURNED FROM IDMS ROUTINE',
ERROR-STATUS
IF WS-REPLY-MESSAGE(21:2) = '90'
IF ERROR-STATUS(3:2) = '29' OR '69'
BIND RUN-UNIT
DISPLAY ' RETURN CODE = 90'
ADD 1 TO WS-RETRY-COUNT
DISPLAY 'IDMS ROLLBACK, RETRY-COUNT',WS-RETRY-COUNT
ELSE
MOVE '9999' TO LK-RESPONSE-CODE
MOVE 'RETURN CODE IS 90, ABNORMAL EXIT' TO
LK-ERROR-MESSAGE OF LK-USER-ERROR-DETAILS
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '410-PROCESS-PARA' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
PERFORM 990-MQ-BACKOUT THRU 990-EXIT
PERFORM 999-ABNORMAL-EXIT
END-IF
ELSE
IF WS-REPLY-MESSAGE(21:2) NOT = '00'
ROLLBACK
DISPLAY 'IDMS ROUTINE RETURNED 99'
BIND RUN-UNIT
END-IF
END-IF
IF (WS-REPLY-MESSAGE(21:2) NOT = '90') OR
WS-RETRY-COUNT > 2
DISPLAY 'PROCESSING RESPONSE'
FINISH
SET INQUIRY TO TRUE
PERFORM 411-OPEN-RESPONSE-QUEUE-PARA THRU 411-EXIT
PERFORM 413-MQ-PUT-MSGS THRU 413-EXIT
PERFORM 500-MQ-COMMIT-PARA THRU 500-EXIT
MOVE 'NO' TO WS-RETRY-FLAG
END-IF
WHEN 'RPSAP09 '
MOVE 'RCRPHWA' TO WS-IDMS-PROGRAM
DISPLAY 'CALLING RCRPHWA'
MOVE FUNCTION CURRENT-DATE TO TEST-DATE
DISPLAY 'CALLING IDMS PGM AT : ', TEST-DATE
CALL WS-IDMS-PROGRAM USING WS-MESSAGE-DETAILS
SUBSCHEMA-CTRL
MOVE FUNCTION CURRENT-DATE TO TEST-DATE
DISPLAY 'AFTER CALLING IDMS PGM : ', TEST-DATE
DISPLAY 'RETURNING FROM : ', WS-IDMS-PROGRAM
DISPLAY 'REPLY MESSAGE : ', WS-REPLY-MESSAGE
DISPLAY 'REPLY DATA LENGTH : ',WS-REPLY-DATA-LENGTH
DISPLAY 'ERROR-STATUS RETURNED FROM IDMS ROUTINE',
ERROR-STATUS
IF WS-REPLY-MESSAGE(21:2) = '90'
IF ERROR-STATUS(3:2) = '29' OR '69'
BIND RUN-UNIT
DISPLAY ' RETURN CODE = 90'
ADD 1 TO WS-RETRY-COUNT
DISPLAY 'IDMS ROLLBACK, RETRY-COUNT',WS-RETRY-COUNT
ELSE
MOVE '9999' TO LK-RESPONSE-CODE
MOVE 'RETURN CODE IS 90, ABNORMAL EXIT' TO
LK-ERROR-MESSAGE OF LK-USER-ERROR-DETAILS
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '410-PROCESS-PARA' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
PERFORM 990-MQ-BACKOUT THRU 990-EXIT
PERFORM 999-ABNORMAL-EXIT
END-IF
ELSE
IF WS-REPLY-MESSAGE(21:2) NOT = '00'
ROLLBACK
DISPLAY 'IDMS ROUTINE RETURNED 99'
BIND RUN-UNIT
END-IF
END-IF
IF (WS-REPLY-MESSAGE(21:2) NOT = '90') OR
WS-RETRY-COUNT > 2
DISPLAY 'PROCESSING RESPONSE'
FINISH
SET INQUIRY TO TRUE
PERFORM 411-OPEN-RESPONSE-QUEUE-PARA THRU 411-EXIT
PERFORM 413-MQ-PUT-MSGS THRU 413-EXIT
PERFORM 500-MQ-COMMIT-PARA THRU 500-EXIT
MOVE 'NO' TO WS-RETRY-FLAG
END-IF
WHEN OTHER
DISPLAY 'ERROR MESSAGE RECEIVED: ', WS-MESSAGE-NAME
MOVE 'NO' TO WS-RETRY-FLAG
FINISH
END-EVALUATE
END-IF.
410-EXIT.
EXIT.

**********************************************************
* 411-OPEN-RESPONSE-QUEUE-PARA - PERFORMED FROM *
* 410-PROCESS-PARA. *
* PUTS THE RESPONSE MESSAGE IF THE REMOTE QUEUE IS *
* ALREADY OPEN OTHERWISE OPENS THE Q AND PUTS THE MESSAGE*
**********************************************************

411-OPEN-RESPONSE-QUEUE-PARA.
MOVE 'Y' TO WS-Q-HANDLE-EXIST.
SET MQ-REPLY-INX TO 1.
SEARCH WS-MQ-REPLY-QUEUE
AT END
CONTINUE
WHEN (MQ-REPLY-QNAME(MQ-REPLY-INX) = WS-REPLY-QNAME
AND MQ-REPLY-QMNAME(MQ-REPLY-INX) = WS-REPLY-QMNAME)
MOVE 'N' TO WS-Q-HANDLE-EXIST

END-SEARCH.
IF WS-Q-HANDLE-EXIST ='Y'

SET MQ-REPLY-INX TO 1

SEARCH WS-MQ-REPLY-QUEUE

AT END

MOVE '9999' TO LK-RESPONSE-CODE
DISPLAY 'ALL Qs ARE OPENED'
MOVE 'ALL Qs ARE OPENED' TO LK-ERROR-MESSAGE
OF LK-USER-ERROR-DETAILS
PERFORM 999-ABNORMAL-EXIT
WHEN (MQ-REPLY-QNAME(MQ-REPLY-INX) = SPACES

AND MQ-REPLY-QMNAME(MQ-REPLY-INX)= SPACES)
PERFORM 412-MQ-REPLY-Q-OPEN THRU 412-EXIT
END-SEARCH
END-IF.

411-EXIT.
EXIT.

**********************************************************
* 412-MQ-REPLY-Q-OPEN - PERFORMED FROM *
* 411-OPEN-RESPONSE-QUEUE-PARA. *
* IT OPENS THE REPLY Q *
**********************************************************
412-MQ-REPLY-Q-OPEN.
MOVE MQM-OBJECT-DESCRIPTOR-I TO MQM-OBJECT-DESCRIPTOR.
INITIALIZE MQ-OPEN-OPTIONS
MQ-QLHOBJ
MQ-COMPCODE
MQ-REASON.

COMPUTE MQ-OPEN-OPTIONS = MQOO-OUTPUT
+ MQOO-FAIL-IF-QUIESCING.
* assuming as of now that reply-q-name = remote qname on OS/390
MOVE MQOT-Q TO MQOD-OBJECTTYPE
OF MQOD OF MQM-OBJECT-DESCRIPTOR.
MOVE WS-REPLY-QNAME TO MQOD-OBJECTNAME
OF MQOD OF MQM-OBJECT-DESCRIPTOR.
DISPLAY "OPENING REPLY QUEUE : ", WS-REPLY-QNAME.
MOVE 'CSQBOPEN' TO WS-MQ-PROGRAM.
CALL WS-MQ-PROGRAM USING MQ-HCONN
MQOD OF MQM-OBJECT-DESCRIPTOR
MQ-OPEN-OPTIONS
MQ-QLHOBJ
MQ-COMPCODE
MQ-REASON.

EVALUATE MQ-REASON
WHEN 0
MOVE WS-REPLY-QNAME TO MQ-REPLY-QNAME(MQ-REPLY-INX)
MOVE WS-REPLY-QMNAME TO MQ-REPLY-QMNAME(MQ-REPLY-INX)
MOVE MQ-QLHOBJ TO MQ-REPLY-HOBJ(MQ-REPLY-INX)
WHEN OTHER
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '400-MQ-GET-MSGS' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
MOVE WS-REPLY-QNAME TO LK-Q-NAME
MOVE MQ-QM-NAME TO LK-QM-NAME
MOVE 'CSQBOPEN' TO LK-MQ-CALL OF
LK-MQ-ERROR-DETAILS
MOVE MQ-COMPCODE TO LK-MQ-CC OF
LK-MQ-ERROR-DETAILS
MOVE MQ-REASON TO LK-MQ-RC OF
LK-MQ-ERROR-DETAILS
MOVE '8888' TO LK-RESPONSE-CODE
SET LK-MQ-ERROR TO TRUE
PERFORM 990-MQ-BACKOUT THRU 990-EXIT
PERFORM 999-ABNORMAL-EXIT
END-EVALUATE.

412-EXIT.
EXIT.

**********************************************************
* 413-MQ-PUT-MSGS - PERFORMED FROM 410-PROCESS-PARA *
* IT PUTS THE MESSAGE IN THE REPLY Q *
* *
**********************************************************
413-MQ-PUT-MSGS.
MOVE MQM-MESSAGE-DESCRIPTOR-I TO MQM-MESSAGE-DESCRIPTOR.
MOVE MQM-PUT-MESSAGE-OPTIONS-I TO MQM-PUT-MESSAGE-OPTIONS.
INITIALIZE MQ-QLHOBJ
MQ-COMPCODE
MQ-REASON.

MOVE MQ-REPLY-HOBJ(MQ-REPLY-INX) TO MQ-QLHOBJ.
IF INQUIRY
MOVE WS-MQ-MSGID TO MQMD-CORRELID OF MQMD OF
MQM-MESSAGE-DESCRIPTOR
MOVE MQ-MSG-EXPIRY TO MQMD-EXPIRY OF MQMD OF
MQM-MESSAGE-DESCRIPTOR
ELSE
MOVE WS-MQ-CORRLID TO MQMD-CORRELID OF MQMD OF
MQM-MESSAGE-DESCRIPTOR
END-IF.
MOVE MQFMT-STRING TO MQMD-FORMAT OF MQMD OF
MQM-MESSAGE-DESCRIPTOR.

COMPUTE MQPMO-OPTIONS OF MQM-PUT-MESSAGE-OPTIONS =
MQPMO-FAIL-IF-QUIESCING +
MQPMO-SYNCPOINT.

MOVE 'CSQBPUT' TO WS-MQ-PROGRAM.
CALL WS-MQ-PROGRAM USING MQ-HCONN
MQ-QLHOBJ
MQMD OF MQM-MESSAGE-DESCRIPTOR
MQPMO OF MQM-PUT-MESSAGE-OPTIONS
WS-REPLY-DATA-LENGTH
WS-REPLY-MESSAGE
MQ-COMPCODE
MQ-REASON.

EVALUATE MQ-REASON
WHEN 0
CONTINUE
MOVE FUNCTION CURRENT-DATE TO TEST-DATE
DISPLAY 'REPLY MESSAGE SENT AT : ', TEST-DATE
WHEN OTHER
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '413-MQ-PUT-MSGS' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
MOVE WS-REPLY-QNAME TO LK-Q-NAME
MOVE MQ-QM-NAME TO LK-QM-NAME
MOVE 'CSQBPUT' TO LK-MQ-CALL OF
LK-MQ-ERROR-DETAILS
MOVE MQ-COMPCODE TO LK-MQ-CC OF
LK-MQ-ERROR-DETAILS
MOVE MQ-REASON TO LK-MQ-RC OF
LK-MQ-ERROR-DETAILS
MOVE '8888' TO LK-RESPONSE-CODE
SET LK-MQ-ERROR TO TRUE
PERFORM 990-MQ-BACKOUT THRU 990-EXIT
PERFORM 999-ABNORMAL-EXIT
END-EVALUATE.
413-EXIT.
EXIT.

*************************************************************
* 414-MQ-PUT-MSGS-BACKOUT - PERFORMED FROM 410-PROCESS-PARA *
* IT PUTS THE MESSAGE IN THE BACKOUT QUEUE *
* *
*************************************************************
414-MQ-PUT-MSGS-BACKOUT.
MOVE MQM-MESSAGE-DESCRIPTOR-BACKOUT
TO MQM-MESSAGE-DESCRIPTOR.
MOVE MQM-PUT-MESSAGE-OPTIONS-I TO MQM-PUT-MESSAGE-OPTIONS.
INITIALIZE MQ-QLHOBJ
MQ-COMPCODE
MQ-REASON.

MOVE MQ-REPLY-HOBJ(MQ-REPLY-INX) TO MQ-QLHOBJ.

COMPUTE MQPMO-OPTIONS OF MQM-PUT-MESSAGE-OPTIONS =
MQPMO-FAIL-IF-QUIESCING +
MQPMO-SYNCPOINT.

MOVE 'CSQBPUT' TO WS-MQ-PROGRAM.
CALL WS-MQ-PROGRAM USING MQ-HCONN
MQ-QLHOBJ
MQMD OF MQM-MESSAGE-DESCRIPTOR
MQPMO OF MQM-PUT-MESSAGE-OPTIONS
WS-REQUEST-DATA-LENGTH
WS-REQUEST-MESSAGE
MQ-COMPCODE
MQ-REASON.

EVALUATE MQ-REASON
WHEN 0
CONTINUE
MOVE FUNCTION CURRENT-DATE TO TEST-DATE
DISPLAY 'BACKOUT MESSAGE SENT AT : ', TEST-DATE
WHEN OTHER
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '414-MQ-PUT-MSGS-BACKOUT' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
MOVE WS-REPLY-QNAME TO LK-Q-NAME
MOVE MQ-QM-NAME TO LK-QM-NAME
MOVE 'CSQBPUT' TO LK-MQ-CALL OF
LK-MQ-ERROR-DETAILS
MOVE MQ-COMPCODE TO LK-MQ-CC OF
LK-MQ-ERROR-DETAILS
MOVE MQ-REASON TO LK-MQ-RC OF
LK-MQ-ERROR-DETAILS
MOVE '8888' TO LK-RESPONSE-CODE
SET LK-MQ-ERROR TO TRUE
PERFORM 990-MQ-BACKOUT THRU 990-EXIT
PERFORM 999-ABNORMAL-EXIT
END-EVALUATE.
414-EXIT.
EXIT.
**********************************************************
* 420-UPDATE-2-PHASE-COMMIT - PERFORMED FROM *
* 410-PROCESS-PARA *
* IT UPDATE THE MESSAGE IN IDMS AND BUILD THE 2-PHASE *
* COMMIT LOGIC. *
**********************************************************
420-UPDATE-2-PHASE-COMMIT.
SET UPDATE TO TRUE
MOVE WS-REPLY-QMNAME TO MQSCTL-MSG-Q-MGR-CODE
MOVE 'ARP0002' TO MQSCTL-MSG-APP-CODE
MOVE 'RPS IMAGING' TO MQSCTL-MSG-STD-CODE
MOVE WS-MQ-CORRLID TO MQSCTL-MSG-ID
DISPLAY 'OBTAINING MQSCTL-8460 WITH MSG-ID: ',MQSCTL-MSG-ID
BIND MQSCTL-8460
OBTAIN CALC MQSCTL-8460 ON DB-REC-NOT-FOUND
MOVE 'NO' TO WS-MQCTL-FLAG.
IF MQCTL-NOT-FOUND
DISPLAY 'CALLING: ', WS-IDMS-PROGRAM
CALL WS-IDMS-PROGRAM USING WS-MESSAGE-DETAILS
SUBSCHEMA-CTRL
DISPLAY 'RETURNING FROM : ', WS-IDMS-PROGRAM
DISPLAY 'REPLY MESSAGE : ', WS-REPLY-MESSAGE
DISPLAY 'REPLY DATA LENGTH : ',WS-REPLY-DATA-LENGTH
DISPLAY 'ERROR-STATUS RETURNED FROM IDMS ROUTINE',
ERROR-STATUS
IF WS-REPLY-MESSAGE(21:2) = '90'
IF ERROR-STATUS(3:2) = '29' OR '69'
BIND RUN-UNIT
DISPLAY ' RETURN CODE = 90'
ADD 1 TO WS-RETRY-COUNT
DISPLAY 'IDMS ROLLBACK, RETRY-COUNT',WS-RETRY-COUNT
ELSE
MOVE '9999' TO LK-RESPONSE-CODE
MOVE 'RETURN CODE IS 90, ABNORMAL EXIT' TO
LK-ERROR-MESSAGE OF LK-USER-ERROR-DETAILS
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '420-PROCESS-PARA' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
PERFORM 990-MQ-BACKOUT THRU 990-EXIT
PERFORM 999-ABNORMAL-EXIT
END-IF
ELSE
IF WS-REPLY-MESSAGE(21:2) NOT = '00'
ROLLBACK
DISPLAY 'NON ZERO RC FROM IDMS ROUTINE'
BIND RUN-UNIT
END-IF
END-IF
IF WS-REPLY-MESSAGE(21:2) NOT = '90'
OR WS-RETRY-COUNT > 2
BIND MQSCTL-8460
PERFORM 425-STORE-IDMS-PARA THRU 425-EXIT
DISPLAY 'MQ CTL STORED FOR MESSAGE ID: ',WS-MQ-MSGID
PERFORM 411-OPEN-RESPONSE-QUEUE-PARA THRU 411-EXIT
PERFORM 413-MQ-PUT-MSGS THRU 413-EXIT
DISPLAY 'REPLY SENT TO REPLY-TO-QUEUE: ',WS-REPLY-QNAME
COMMIT
FINISH
DISPLAY 'IDMS COMMIT DONE '
***** Added to test 2 phase algorithm
* DIVIDE 25 BY X-ZERO GIVING X-REM
**** Added to test 2 phase algorithm
IF DB-STATUS-OK
DISPLAY 'CALLING MQCOMMIT'
PERFORM 500-MQ-COMMIT-PARA THRU 500-EXIT
ELSE
PERFORM IDMS-STATUS
END-IF
MOVE 'NO' TO WS-RETRY-FLAG
END-IF
ELSE
DISPLAY 'MQS CTL EXISTS FOR THIS MSG-ID'
MOVE MQSCTL-MSG-RESP-Q-DATA
TO WS-REPLY-MESSAGE
MOVE MQSCTL-MSG-RESP-Q-NAME
TO WS-REPLY-QNAME
MOVE MQSCTL-MSG-RESP-Q-MGR-NAME
TO WS-REPLY-QMNAME
PERFORM 411-OPEN-RESPONSE-QUEUE-PARA THRU 411-EXIT
PERFORM 413-MQ-PUT-MSGS THRU 413-EXIT
PERFORM 500-MQ-COMMIT-PARA THRU 500-EXIT
MOVE 'NO' TO WS-RETRY-FLAG
END-IF.
420-EXIT.
EXIT.
****************************************************************
* 425-STOTE-IDMS-PARA- PERFORMED FROM 420-UPDATE-2-PHASE-COMMIT*
* IT STORES THE RECORD IN IDMS *
****************************************************************
425-STORE-IDMS-PARA.
MOVE WS-REPLY-QMNAME TO MQSCTL-MSG-Q-MGR-CODE
MOVE 'ARP0002' TO MQSCTL-MSG-APP-CODE
MOVE 'RCRPAPP' TO MQSCTL-MSG-REQ-PRG
MOVE 'RPS IMAGING' TO MQSCTL-MSG-STD-CODE
MOVE WS-MQ-CORRLID TO MQSCTL-MSG-ID.
MOVE FUNCTION CURRENT-DATE(1: TO MQSCTL-MSG-CTL-DTE.
MOVE FUNCTION CURRENT-DATE(9: TO MQSCTL-MSG-CTL-TIME.
MOVE WS-REPLY-QNAME TO MQSCTL-MSG-RESP-Q-NAME.
MOVE WS-REPLY-QMNAME TO MQSCTL-MSG-RESP-Q-MGR-NAME.
MOVE WS-REPLY-MESSAGE TO MQSCTL-MSG-RESP-Q-DATA.
DISPLAY 'STORING MQ CTL RECORD WITH MSG-ID : ',MQSCTL-MSG-ID.
STORE MQSCTL-8460.

425-EXIT.
EXIT.
****************************************************************
* 500-MQ-COMMIT-PARA - PERFORMED FROM 420-UPDATE-2-PHASE-COMMIT*
* AND 410-PROCESS-PARA *
* IT PERFORMS MQCOMMIT *
****************************************************************
500-MQ-COMMIT-PARA.
MOVE 0 TO MQ-COMPCODE.
MOVE 0 TO MQ-REASON.

MOVE 'CSQBCOMM' TO WS-MQ-PROGRAM.
CALL WS-MQ-PROGRAM USING MQ-HCONN
MQ-COMPCODE
MQ-REASON.
EVALUATE MQ-REASON
WHEN 0
CONTINUE
WHEN OTHER
PERFORM 990-MQ-BACKOUT THRU 990-EXIT
END-EVALUATE.

500-EXIT.
EXIT.
****************************************************************
* 600-MQ-CLOSE - PERFORMED FROM 100-MAIN-MODULE *
* IT QUITS THE ACCESS TO INPUT Q, AND OUPUT Q *
* *
****************************************************************
600-MQ-CLOSE.
INITIALIZE MQ-QLHOBJ
MQ-COMPCODE
MQ-REASON.
MOVE MQ-INPUT-QUEUE-HOBJ TO MQ-QLHOBJ.
MOVE 'CSQBCLOS' TO WS-MQ-PROGRAM.
CALL WS-MQ-PROGRAM USING MQ-HCONN
MQ-QLHOBJ
MQCO-NONE
MQ-COMPCODE
MQ-REASON
DISPLAY 'CLOSING,MQ-INPUT-QUEUE-HOBJ: ', MQ-INPUT-QUEUE-HOBJ
EVALUATE MQ-REASON
WHEN 0
DISPLAY 'CLOSED: ', MQ-INPUT-QUEUE-HOBJ
CONTINUE
WHEN OTHER
DISPLAY 'ERROR CLOSING : ', MQ-COMPCODE
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '600-MQ-CLOSE(INPUT Q)' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
MOVE MQ-Q-NAME TO LK-Q-NAME
MOVE MQ-QM-NAME TO LK-QM-NAME
MOVE 'CSQBCLOS' TO LK-MQ-CALL OF
LK-MQ-ERROR-DETAILS
MOVE MQ-COMPCODE TO LK-MQ-CC OF
LK-MQ-ERROR-DETAILS
MOVE MQ-REASON TO LK-MQ-RC OF
LK-MQ-ERROR-DETAILS
MOVE '8888' TO LK-RESPONSE-CODE
SET LK-MQ-ERROR TO TRUE
PERFORM 999-ABNORMAL-EXIT
END-EVALUATE.
PERFORM VARYING MQ-REPLY-INX FROM 1 BY 1 UNTIL
MQ-REPLY-INX > WS-MAX-MQ-Q
INITIALIZE MQ-QLHOBJ
MQ-COMPCODE
MQ-REASON
MOVE MQ-REPLY-HOBJ(MQ-REPLY-INX) TO MQ-QLHOBJ
DISPLAY MQ-QLHOBJ

IF MQ-QLHOBJ NOT = 0
MOVE 'CSQBCLOS' TO WS-MQ-PROGRAM
CALL WS-MQ-PROGRAM USING MQ-HCONN
MQ-QLHOBJ
MQCO-NONE
MQ-COMPCODE
MQ-REASON

EVALUATE MQ-REASON
WHEN 0
CONTINUE
WHEN OTHER
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '600-MQ-CLOSE' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
MOVE 'CSQBCLOS(OUTPUT Q)' TO LK-MQ-CALL OF
LK-MQ-ERROR-DETAILS
MOVE MQ-COMPCODE TO LK-MQ-CC OF
LK-MQ-ERROR-DETAILS
MOVE MQ-REASON TO LK-MQ-RC OF
LK-MQ-ERROR-DETAILS
MOVE '8888' TO LK-RESPONSE-CODE
SET LK-MQ-ERROR TO TRUE
PERFORM 999-ABNORMAL-EXIT
END-EVALUATE
END-IF
END-PERFORM
DISPLAY 'CLOSE PARA FINISHED'.
600-EXIT.
EXIT.

****************************************************************
* 700-MQ-DISCONN - PERFORMED FROM 100-MAIN-MODELE *
* IT DISCONNECTS THE Q MANAGER *
****************************************************************
700-MQ-DISCONN.
MOVE 0 TO MQ-COMPCODE.
MOVE 0 TO MQ-REASON.
MOVE 'CSQBDISC' TO WS-MQ-PROGRAM
CALL WS-MQ-PROGRAM USING MQ-HCONN
MQ-COMPCODE
MQ-REASON.

EVALUATE MQ-REASON
WHEN 0
DISPLAY 'DISCONNECT SUCCESSFUL'
CONTINUE
WHEN OTHER
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '700-MQ-DISCONN ' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
MOVE 'CSQBDISC' TO LK-MQ-CALL OF
LK-MQ-ERROR-DETAILS
MOVE MQ-COMPCODE TO LK-MQ-CC OF
LK-MQ-ERROR-DETAILS
MOVE MQ-REASON TO LK-MQ-RC OF
LK-MQ-ERROR-DETAILS
MOVE '8888' TO LK-RESPONSE-CODE
SET LK-MQ-ERROR TO TRUE
PERFORM 999-ABNORMAL-EXIT
END-EVALUATE.
700-EXIT.
EXIT.

****************************************************************
* 800-INITIALIZATION - PERFORMED FROM 100-MAIN-MODULE. *
* IT INTILIAZE THE REPLY QUEQE TABLE AND LINKAGE QM, Q *
* TO WORK VARIABLES. *
****************************************************************
800-INITIALIZATION.
MOVE 5 TO WS-MAX-MQ-Q.
PERFORM VARYING MQ-REPLY-INX FROM 1 BY 1 UNTIL
MQ-REPLY-INX > WS-MAX-MQ-Q
INITIALIZE WS-MQ-REPLY-QUEUE (MQ-REPLY-INX)
END-PERFORM.
MOVE LK-QM-NAME TO MQ-QM-NAME
WS-QMNAME.
MOVE LK-Q-NAME TO MQ-Q-NAME.

800-EXIT.
EXIT.
****************************************************************
* 990-MQBACK-PARA - PERFORMED FROM 500-MQ-COMMIT-PARA
* IT PERFORMS MQROLLBACK.
****************************************************************
990-MQ-BACKOUT.
MOVE 0 TO MQ-COMPCODE.
MOVE 0 TO MQ-REASON.
MOVE 'CSQBBACK' TO WS-MQ-PROGRAM.
CALL WS-MQ-PROGRAM USING MQ-HCONN
MQ-COMPCODE
MQ-REASON.
EVALUATE MQ-REASON
WHEN 0
DISPLAY ' MQ ROLLED BACK'
CONTINUE
WHEN OTHER
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '990-MQBACK-PARA' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
MOVE 'CSQBBACK' TO LK-MQ-CALL OF
LK-MQ-ERROR-DETAILS
MOVE MQ-COMPCODE TO LK-MQ-CC OF
LK-MQ-ERROR-DETAILS
MOVE MQ-REASON TO LK-MQ-RC OF
LK-MQ-ERROR-DETAILS
MOVE '8888' TO LK-RESPONSE-CODE
SET LK-MQ-ERROR TO TRUE
PERFORM 999-ABNORMAL-EXIT.
990-EXIT.
EXIT.
999-ABNORMAL-EXIT.
EXIT PROGRAM.

IDMS-ABORT SECTION.
IDMS-ABORT-EXIT.
EXIT.
COPY IDMS IDMS-STATUS.

_________________
contact admin
HCL Perot Systems Pte. Ltd.
Back to top
View user's profile Send private message MSN Messenger
avigosa
PostPosted: Wed Mar 26, 2003 4:54 am    Post subject: Reply with quote

Newbie

Joined: 20 Mar 2003
Posts: 9
Location: Singapore

anybody..there..pl.help....on this issue...
_________________
contact admin
HCL Perot Systems Pte. Ltd.
Back to top
View user's profile Send private message MSN Messenger
oz1ccg
PostPosted: Wed Mar 26, 2003 8:04 am    Post subject: Reply with quote

Yatiri

Joined: 10 Feb 2002
Posts: 628
Location: Denmark

Hi,

What sort environment are you dealing with ? Z/OS version ?
This is a batch program, right ?
Are you running under LE ?
Which system abend are you getting ?

If LE how is it configured with regard to abnormal termination ?
You might get a clue from this thread:
http://www.mqseries.net/phpBB2/viewtopic.php?t=4730&highlight=abend+move

Just my $0.02
_________________
Regards, Jørgen
Home of BlockIP2, the last free MQ Security exit ver. 3.00
Cert. on WMQ, WBIMB, SWIFT.
Back to top
View user's profile Send private message Send e-mail Visit poster's website MSN Messenger
bower5932
PostPosted: Wed Mar 26, 2003 12:42 pm    Post subject: Reply with quote

Jedi Knight

Joined: 27 Aug 2001
Posts: 3023
Location: Dallas, TX, USA

I'll start by saying that I didn't look at your code.... However, there are a couple of situations which can account for messages going away. One of them is in the client scenario when not using syncpoint:

http://www.mqseries.net/phpBB/viewtopic.php?t=8183

The other situation is when your program dies and doesn't issue an MQDISC. There is a discussion of this under the MQCMIT API in the Application Programming Guide. The behavior varies by platform. You might be running into this situation.
Back to top
View user's profile Send private message Send e-mail Visit poster's website AIM Address Yahoo Messenger
Display posts from previous:   
Post new topic  Reply to topic Page 1 of 1

MQSeries.net Forum Index » IBM MQ API Support » mq get with syncpoint
Jump to:  



You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
Protected by Anti-Spam ACP
 
 


Theme by Dustin Baccetti
Powered by phpBB © 2001, 2002 phpBB Group

Copyright © MQSeries.net. All rights reserved.