COBOL example: Getting a message
This example demonstrates how to use the MQGET call to remove a message from a queue.
This extract is taken from the Credit Check sample application.
For IBM® MQ for z/OS® this is program CSQ4CVB1.
For the names and locations of the sample applications, see the following topics:
⋮
* -------------------------------------------------------*
WORKING-STORAGE SECTION.
* -------------------------------------------------------*
*
* W03 - MQM API fields
*
01 W03-HCONN PIC S9(9) BINARY VALUE ZERO.
01 W03-HOBJ-RESPONSE PIC S9(9) BINARY.
01 W03-OPTIONS PIC S9(9) BINARY.
01 W03-BUFFLEN PIC S9(9) BINARY.
01 W03-DATALEN PIC S9(9) BINARY.
01 W03-COMPCODE PIC S9(9) BINARY.
01 W03-REASON PIC S9(9) BINARY.
*
01 W03-GET-BUFFER.
05 W03-CSQ4BAM.
COPY CSQ4VB2.
*
* API control blocks
*
01 MQM-MESSAGE-DESCRIPTOR.
COPY CMQMDV.
01 MQM-GET-MESSAGE-OPTIONS.
COPY CMQGMOV.
*
* MQV contains constants (for filling in the
* control blocks) and return codes (for testing
* the result of a call).
*
01 MQM-CONSTANTS.
COPY CMQV SUPPRESS.
* -------------------------------------------------------*
A-MAIN SECTION.
* -------------------------------------------------------*
⋮
* Open response queue.
⋮
* -------------------------------------------------------*
PROCESS-RESPONSE-SCREEN SECTION.
* -------------------------------------------------------*
* *
* This section gets a message from the response queue. *
* *
* When a correct response is received, it is *
* transferred to the map for display; otherwise *
* an error message is built. *
* *
* -------------------------------------------------------*
*
* Set get-message options
*
COMPUTE MQGMO-OPTIONS = MQGMO-SYNCPOINT +
MQGMO-ACCEPT-TRUNCATED-MSG +
MQGMO-NO-WAIT.
*
* Set msgid and correlid in MQMD to nulls so that any
* message will qualify.
* Set length to available buffer length.
*
MOVE MQMI-NONE TO MQMD-MSGID.
MOVE MQCI-NONE TO MQMD-CORRELID.
MOVE LENGTH OF W03-GET-BUFFER TO W03-BUFFLEN.
*
CALL 'MQGET' USING W03-HCONN
W03-HOBJ-RESPONSE
MQMD
MQGMO
W03-BUFFLEN
W03-GET-BUFFER
W03-DATALEN
W03-COMPCODE
W03-REASON.
EVALUATE TRUE
WHEN W03-COMPCODE NOT = MQCC-FAILED
⋮
* Process the message
⋮
WHEN (W03-COMPCODE = MQCC-FAILED AND
W03-REASON = MQRC-NO-MSG-AVAILABLE)
MOVE M01-MESSAGE-9 TO M00-MESSAGE
PERFORM CLEAR-RESPONSE-SCREEN
*
WHEN OTHER
MOVE 'MQGET ' TO M01-MSG4-OPERATION
MOVE W03-COMPCODE TO M01-MSG4-COMPCODE
MOVE W03-REASON TO M01-MSG4-REASON
MOVE M01-MESSAGE-4 TO M00-MESSAGE
PERFORM CLEAR-RESPONSE-SCREEN
END-EVALUATE.
![[UNIX, Linux, Windows, IBM i]](../common/../develop/ngmulti.gif)
![[z/OS]](../common/../develop/ngzos.gif)