Previous Topic: Type 2 Response

Standard REXX and EDQ Output

Every execution of an IMS Type 2 command will result in one overall return code and one overall reason code. If multiple IMS systems are participating, some may encounter errors while others may not. Error information specific to an IMS system is grouped together by that system’s name. A minimum number of REXX variables or EDQ records are always created to allow further error analysis if necessary. The actual number will vary depending on specific error conditions and the number of participating IMS systems.

Every invocation of ADDRESS OPER containing the IMSPLEX keyword will always result in the creation of a number of REXX variables. OPSCMD execution will result in EDQ records where the execution environment allows.

prefix.CTL.IMSRC

Returns with the overall return code.

prefix.CTL.IMSRSN

Returns with the overall reason code. If this is not 0, it will be followed by the following two messages:

  1. prefix.CTL.RSNMSG – Returns the number of the appropriate IMS Type 2 message.
  2. prefix.CTL.RSNTXT – Returns the message text of the above message.
prefix.CMDSECERR.SAF.IMSRC

Returns null, or the overall security return code.

prefix.CMDSECERR.SAF.RACFRC

Returns null, or the specific security return code

prefix.CMDSECERR.SAF.RACFRSN

Returns null, or the security reason code

prefix.CMDERR.0

Returns the number of participating member IMS systems with error information. A 0 value indicates no member is reporting errors. If this variable returns with a positive integer, n, the following are created:

prefix.CMDERR.n.0

Returns with number of individual error lines from the member identified as n. If multiple members are reporting errors, each will create a unique set per member, with the index n incrementing to n+1, n+2, and so on.

This sample shows five error lines, but the design allows for a variable amount.

  1. prefix.CMDERR.n.TYP – Returns an error type indicator
  2. prefix.CMDERR.n.NAME – Returns the member name corresponding to n.
  3. prefix.CMDERR.n.IMSRC – Returns the return code specific to that member’s results.
  4. prefix.CMDERR.n.IMSRSN – Returns the reason code specific to that member’s results.
  5. prefix.CMDERR.n.RSNTXN – Returns the text describing the reason code above.

Example 3: REXX and EDQ Output

The following example is from an actual run. The sequence is arranged to match the description above. The indentation is intended to show the cause and effect relationship where the creation of one variable can result in more variables. REXX and EDQ output are very similar. In the case of REXX, the character string to the left of the first blank is the REXX variable name, and is followed by its value. The following are EDQ records:

IMSTYP2.CTL.IMSRC   0200000C
IMSTYP2.CTL.IMSRSN   00003000
IMSTYP2.CTL.RSNMSG   CSLN023I
IMSTYP2.CTL.RSNTXT   At least one request was successful.
IMSTYP2.CMDSECERR.SAF.IMSRC 
IMSTYP2.CMDSECERR.SAF.RACFRC
IMSTYP2.CMDSECERR.SAF.RACFRSN
IMSTYP2.CMDERR.0   1
  IMSTYP2.CMDERR.1.0   5
IMSTYP2.CMDERR.1.TYP   UNKWN
IMSTYP2.CMDERR.1.NAME   IMST
IMSTYP2.CMDERR.1.IMSRC   02000010
IMSTYP2.CMDERR.1.IMSRSN   00004008
IMSTYP2.CMDERR.1.RSNTXT   MU is not registered

Example 4: VERBOSE(YES) Output

The following is an example of the granulated tokenization when the VERBOSE(YES) option is selected. Each word on every response line results in a unique REXX variable.

<?xml version="1.0"?>

IMS2.XML = xml version="1.0"
<!DOCTYPE imsout SYSTEM "imsout.dtd">
IMS2.DOC = DOCTYPE imsout SYSTEM "imsout.dtd"

<omname>OM2OM   </omname>
IMS2.CTL.OMNAME = OM2OM

<xmlvsn>20  </xmlvsn>
IMS2.CTL.XMLVSN = 20

<statime>2008.268 18:56:31.852817</statime>
IMS2.CTL.STATIME = 2008.268 18:56:31.852817

<stotime>2008.268 18:56:31.853002</stotime>
IMS2.CTL.STOTIME = 2008.268 18:56:31.853002

<rc>0200000C</rc>
IMS2.CTL.IMSRC = 0200000C

<rsn>00003000</rsn>
IMS2.CTL.IMSRSN = 00003000

<rsnmsg>CSLN023I</rsnmsg>
IMS2.CTL.RSNMSG = CSLN023I

<cmderr>
<mbr name="SVPA    ">
IMS2.CMDERR.1.NAME = SVPA

<typ>UNKWN   </typ>
IMS2.CMDERR.1.TYP = UNKWN

<rc>02000010</rc>
IMS2.CMDERR.1.IMSRC = 02000010

<rsn>00004004</rsn>
IMS2.CMDERR.1.IMSRSN = 00004004

</mbr>
IMS2.CMDERR.1.0 = 3

<userid>NESAS01 </userid>
IMS2.CMD.USERID = NESAS01

<verb>QRY </verb>
IMS2.CMD.VERB = QRY

<kwd>IMSPLEX         </kwd
IMS2.CMD.KWD = IMSPLEX

<input>QUERY IMSPLEX </input>
IMS2.CMD.INPUT = QUERY IMSPLEX

<hdr slbl="IMSPLX" llbl="IMSplex" scope="LCL" sort="A" key="1" scroll="NO" len="8" dtype="CHAR" align="left" />
IMS2.HDR.1.SLBL = IMSPLX
IMS2.HDR.1.LLBL = IMSplex
IMS2.HDR.1.SCOPE = LCL
IMS2.HDR.1.SORT = A
IMS2.HDR.1.KEY = 1
IMS2.HDR.1.SCROLL = NO
IMS2.HDR.1.LEN = 8
IMS2.HDR.1.DTYPE = CHAR
IMS2.HDR.1.ALIGN = left

<hdr slbl="MBR" llbl="MbrName" scope="LCL" sort="N" key="0" scroll="YES" len="8" dtype="CHAR" align="left" />
IMS2.HDR.2.SLBL = MBR
IMS2.HDR.2.LLBL = MbrName
IMS2.HDR.2.SCOPE = LCL
IMS2.HDR.2.SORT = N
IMS2.HDR.2.KEY = 0
IMS2.HDR.2.SCROLL = YES
IMS2.HDR.2.LEN = 8
IMS2.HDR.2.DTYPE = CHAR
IMS2.HDR.2.ALIGN = left

<hdr slbl="CC" llbl="CC" scope="LCL" sort="N" key="0" scroll="YES" len="4" dtype="INT" align="right" />
IMS2.HDR.3.SLBL = CC
IMS2.HDR.3.LLBL = CC
IMS2.HDR.3.SCOPE = LCL
IMS2.HDR.3.SORT = N
IMS2.HDR.3.KEY = 0
IMS2.HDR.3.SCROLL = YES
IMS2.HDR.3.LEN = 4
IMS2.HDR.3.DTYPE = INT
IMS2.HDR.3.ALIGN = right

<hdr slbl="IMSMBR" llbl="Member" scope="LCL" sort="N" key="0" scroll="NO" len="8" dtype="CHAR" align="left" />
IMS2.HDR.4.SLBL = IMSMBR
IMS2.HDR.4.LLBL = Member
IMS2.HDR.4.SCOPE = LCL
IMS2.HDR.4.SORT = N
IMS2.HDR.4.KEY = 0
IMS2.HDR.4.SCROLL = NO
IMS2.HDR.4.LEN = 8
IMS2.HDR.4.DTYPE = CHAR
IMS2.HDR.4.ALIGN = left

</cmdrsphdr>
IMS2.HDR.0 = 4

<rsp>IMSPLX(CSLPLEX1) MBR(OM2OM) IMSMBR(SVD9CQS) CC(   0)</rsp>
IMS2.RSP.1.1 = IMSPLX(CSLPLEX1)
IMS2.RSP.1.2 = MBR(OM2OM)
IMS2.RSP.1.3 = IMSMBR(SVD9CQS)
IMS2.RSP.1.4 = CC(   0)
IMS2.RSP.1.0 = 4

<rsp>IMSPLX(CSLPLEX1) MBR(OM2OM) IMSMBR(SCI1SC) CC(   0)</rsp>
IMS2.RSP.2.1 = IMSPLX(CSLPLEX1)
IMS2.RSP.2.2 = MBR(OM2OM)
IMS2.RSP.2.3 = IMSMBR(SCI1SC)
IMS2.RSP.2.4 = CC(   0)
IMS2.RSP.2.0 = 4

<rsp>IMSPLX(CSLPLEX1) MBR(OM2OM) IMSMBR(SVPA) CC(   0)</rsp>
IMS2.RSP.3.1 = IMSPLX(CSLPLEX1)
IMS2.RSP.3.2 = MBR(OM2OM)
IMS2.RSP.3.3 = IMSMBR(SVPA)
IMS2.RSP.3.4 = CC(   0)
IMS2.RSP.3.0 = 4

<rsp>IMSPLX(CSLPLEX1) MBR(OM2OM) IMSMBR(SCI2SC) CC(   0)</rsp>
IMS2.RSP.4.1 = IMSPLX(CSLPLEX1)
IMS2.RSP.4.2 = MBR(OM2OM)
IMS2.RSP.4.3 = IMSMBR(SCI2SC)
IMS2.RSP.4.4 = CC(   0)
IMS2.RSP.4.0 = 4

<rsp>IMSPLX(CSLPLEX1) MBR(OM2OM) IMSMBR(OM2OM) CC(   0)</rsp>
IMS2.RSP.5.1 = IMSPLX(CSLPLEX1)
IMS2.RSP.5.2 = MBR(OM2OM)
IMS2.RSP.5.3 = IMSMBR(OM2OM)
IMS2.RSP.5.4 = CC(   0)
IMS2.RSP.5.0 = 4

<rsp>IMSPLX(CSLPLEX1) MBR(OM2OM) IMSMBR(RM2RM) CC(   0)</rsp>
IMS2.RSP.6.1 = IMSPLX(CSLPLEX1)
IMS2.RSP.6.2 = MBR(OM2OM)
IMS2.RSP.6.3 = IMSMBR(RM2RM)
IMS2.RSP.6.4 = CC(   0)
IMS2.RSP.6.0 = 4

<rsp>IMSPLX(CSLPLEX1) MBR(OM2OM) IMSMBR(SVD10HWS) CC(   0)</rsp>
IMS2.RSP.7.1 = IMSPLX(CSLPLEX1)
IMS2.RSP.7.2 = MBR(OM2OM)
IMS2.RSP.7.3 = IMSMBR(SVD10HWS)
IMS2.RSP.7.4 = CC(   0)
IMS2.RSP.7.0 = 4

<rsp>IMSPLX(CSLPLEX1) MBR(OM2OM) IMSMBR(SVP9) CC(   0)</rsp>
IMS2.RSP.8.1 = IMSPLX(CSLPLEX1)
IMS2.RSP.8.2 = MBR(OM2OM)
IMS2.RSP.8.3 = IMSMBR(SVP9)
IMS2.RSP.8.4 = CC(   0)
IMS2.RSP.8.0 = 4

<rsp>IMSPLX(CSLPLEX1) MBR(OM2OM) IMSMBR() CC(   0)</rsp>
IMS2.RSP.9.1 = IMSPLX(CSLPLEX1)
IMS2.RSP.9.2 = MBR(OM2OM)
IMS2.RSP.9.3 = IMSMBR()
IMS2.RSP.9.4 = CC(   0)
IMS2.RSP.9.0 = 4

<rsp>IMSPLX(CSLPLEX1) MBR(OM2OM) IMSMBR(SVD91HWS) CC(   0)</rsp>
IMS2.RSP.10.1 = IMSPLX(CSLPLEX1)
IMS2.RSP.10.2 = MBR(OM2OM)
IMS2.RSP.10.3 = IMSMBR(SVD91HWS)
IMS2.RSP.10.4 = CC(   0)
IMS2.RSP.10.0 = 4

<rsp>IMSPLX(CSLPLEX1) MBR(OM2OM) IMSMBR(SVDACQS) CC(   0)</rsp>
IMS2.RSP.11.1 = IMSPLX(CSLPLEX1)
IMS2.RSP.11.2 = MBR(OM2OM)
IMS2.RSP.11.3 = IMSMBR(SVDACQS)
IMS2.RSP.11.4 = CC(   0)
IMS2.RSP.11.0 = 4

</cmdrspdata>
IMS2.RSP.0 = 11