Analyzing the report field
The Report field contains subfields; because of this, applications that need to check whether the sender of the message requested a particular report must use one of the techniques described.
Use bit operations
If the programming language supports bit operations, perform the following steps:- Select one of the following values, according to the type of report to be checked:
- MQRO_COA_WITH_FULL_DATA for COA report
- MQRO_COD_WITH_FULL_DATA for COD report
- MQRO_EXCEPTION_WITH_FULL_DATA for exception report
- MQRO_EXPIRATION_WITH_FULL_DATA for expiration report
Call the value A.
On z/OS, use the MQRO_*_WITH_DATA values instead of the MQRO_*_WITH_FULL_DATA values.
- Combine the Report field with A using the bitwise AND operation; call the result B.
- Test B for equality with each value that is possible for that type of report.
For example, if A is MQRO_EXCEPTION_WITH_FULL_DATA, test B for equality with each of the following to determine what was specified by the sender of the message:
- MQRO_NONE
- MQRO_EXCEPTION
- MQRO_EXCEPTION_WITH_DATA
- MQRO_EXCEPTION_WITH_FULL_DATA
The tests can be performed in whatever order is most convenient for the application logic.
Use a similar method to test for the MQRO_PASS_MSG_ID or MQRO_PASS_CORREL_ID options; select as the value A whichever of these two constants is appropriate, and then proceed as described previously.
Use arithmetic
If the programming language does not support bit operations, perform the following steps using integer arithmetic:- Select one of the following values, according to the type of report to be checked:
- MQRO_COA for COA report
- MQRO_COD for COD report
- MQRO_EXCEPTION for exception report
- MQRO_EXPIRATION for expiration report
Call the value A.
- Divide the Report field by A ; call the result B.
- Divide B by 8 ; call the result C.
- Multiply C by 8 and subtract from B ; call the result D.
- Multiply D by A ; call the result E.
- Test E for equality with each value that is possible for that type of report.
For example, if A is MQRO_EXCEPTION, test E for equality with each of the following to determine what was specified by the sender of the message:
- MQRO_NONE
- MQRO_EXCEPTION
- MQRO_EXCEPTION_WITH_DATA
- MQRO_EXCEPTION_WITH_FULL_DATA
The tests can be performed in whatever order is most convenient for the application logic.
The following pseudocode illustrates this technique for exception report messages:
A = MQRO_EXCEPTION B = Report/A C = B/8 D = B - C*8 E = D*A
Use a similar method to test for the MQRO_PASS_MSG_ID or MQRO_PASS_CORREL_ID options; select as the value A whichever of these two constants is appropriate, and then proceed as described previously, but replacing the value 8 in the previous steps by the value 2.
Parent topic: Report options and message flags