The pre-routing exit DFSYPRX0

You must first code a pre-routing exit DFSYPRX0. Parameters passed to this routine by IMS are documented in IMS/ESA Customization Guide.

This exit tests whether the message is intended for a known OTMA destination (in our example VCPEVCPE). If it is, the exit must check whether the transaction sending the message originated in OTMA. If so, it will already have an OTMA header, so you should exit from DFSYPRX0 with register 15 set to zero.

If you set the OTMA client name to one that is not known to IMS, your application CHNG or ISRT call returns an A1 status code.

For an IMS system communicating with more than one WebSphere MQ queue manager, you should repeat the logic above for each WebSphere MQ queue manager.

Sample assembler code to achieve the above is shown in Figure 38:

Figure 38. OTMA pre-routing exit assembler sample

         TITLE 'DFSYPRX0: OTMA PRE-ROUTING USER EXIT'
DFSYPRX0 CSECT
DFSYPRX0 AMODE 31
DFSYPRX0 RMODE ANY
*
         SAVE  (14,12),,DFSYPRX0&SYSDATE&SYSTIME
         SPACE 2
         LR    R12,R15               MODULE ADDRESSABILITY
         USING DFSYPRX0,R12
*
         L     R2,12(,R1)            R2 -> OTMA PREROUTE PARMS
*
         LA    R3,48(,R2)            R3 AT ORIGINAL OTMA CLIENT (IF ANY)
         CLC   0(16,R3),=XL16'00'    OTMA ORIG?
         BNE   OTMAIN                YES, GO TO THAT CODE
*
NOOTMAIN DS 0H                       NOT OTMA INPUT
         LA    R5,8(,R2)             R5 IS AT THE DESTINATION NAME
         CLC   0(8,R5),=C'VCPEVCPE'  IS IT THE OTMA UNSOLICITED DEST?
         BNE   EXIT0                 NO, NORMAL PROCESSING
*
         L     R4,80(,R2)            R4 AT ADDR OF OTMA CLIENT
         MVC   0(16,R4),=CL16'VCPE'  CLIENT OVERRIDE
         B     EXIT4                 AND EXIT
*
OTMAIN   DS 0H                       OTMA INPUT
         LA    R5,8(,R2)             R5 IS AT THE DESTINATION NAME
         CLC   0(8,R5),=C'VCPEVCPE'  IS IT THE OTMA UNSOLICITED DEST?
         BNE   EXIT8                 NO, NORMAL PROCESSING

*
EXIT0    DS 0H
         LA    R15,0                 RC = 0
         B     BYEBYE
*
EXIT4    DS 0H
         LA    R15,4                 RC = 4
         B     BYEBYE
*
EXIT8    DS 0H
         LA    R15,8                 RC = 8
         B     BYEBYE
*
BYEBYE   DS 0H
         RETURN (14,12),,RC=(15)     RETURN WITH RETURN CODE IN R15
         SPACE 2
         REQUATE
         SPACE 2
         END