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:
  1. 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.

  2. Combine the Report field with A using the bitwise AND operation; call the result B.
  3. 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:
  1. 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.

  2. Divide the Report field by A ; call the result B.
  3. Divide B by 8 ; call the result C.
  4. Multiply C by 8 and subtract from B ; call the result D.
  5. Multiply D by A ; call the result E.
  6. 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