MQDXP-数据转换出口参数

数据转换出口参数块。

概述

用途:MQDXP 结构是队列管理器在调用出口以在 MQGET 调用处理过程中转换消息数据时传递到数据转换出口的参数。 请参阅 MQCONVX 调用的描述以获取数据转换出口的详细信息。

字符集和编码:MQDXP 中的字符数据位于本地队列管理器的字符集中; 这是由 CodedCharSetId 队列管理器属性提供的。 MQDXP 中的数字数据采用本机编码; 这是由 ENNAT 提供的。

用法: 出口只能更改 MQDXP 中的 DXLENDXCCDXREADXRES 字段; 忽略对其他字段的更改。 但是,如果要转换的消息是仅包含部分逻辑消息的段,那么无法更改 DXLEN 字段

当控制从出口返回到队列管理器时,队列管理器会检查 MQDXP 中返回的值。 如果返回的值无效,那么队列管理器将继续处理,就像出口在 DXRES 中返回了 XRFAIL 一样; 但是,在这种情况下,队列管理器将忽略出口返回的 DXCCDXREA 字段的值,而是使用这些字段在出口的 输入 上具有的值。 MQDXP 中的以下值导致发生此处理:
  • DXRES 字段不是X韩国,也不是 XRFAIL
  • DXCC 字段不是 CCOK ,也不是 CCWARN
  • 当要转换的消息是仅包含部分逻辑消息的段时, DXLEN 字段小于零或 DXLEN 字段已更改。

字段

MQDXP 结构包含以下字段; 这些字段按 字母顺序进行描述:

DXAOP (10 位带符号整数)

应用程序选项。

这是由发出 MQGET 调用的应用程序指定的 MQGMO 结构的 GMOPT 字段的副本。 出口可能需要检查这些选项以确定是否指定了 GMATM 选项。

这是出口的输入字段。

DXCC (10 位带符号整数)

完成代码。

调用出口时,如果出口选择不执行任何操作,那么这将包含将返回到发出 MQGET 调用的应用程序的完成代码。 它始终是 CCWARN ,因为消息已被截断,或者消息需要转换,但尚未执行此操作。

在出口输出时,此字段包含要在 MQGET 调用的 CMPCOD 参数中返回到应用程序的完成代码; 只有 CCOK 和 CCWARN 有效。 请参阅 DXREA 字段的描述,以获取有关出口应如何在输出上设置此字段的建议。

这是出口的输入/输出字段。

DXCSI (10 位有符号整数)

应用程序所需的字符集。

这是发出 MQGET 调用的应用程序所需的字符集的编码字符集标识; 请参阅 MQMD 结构中的 MDCSI 字段以获取更多详细信息。 如果应用程序在 MQGET 调用上指定了特殊值 CSQM ,那么在调用出口之前,队列管理器会将此值更改为队列管理器使用的字符集的实际字符集标识。

如果转换成功,那么出口应将其复制到消息描述符中的 MDCSI 字段。

这是出口的输入字段。

DXENC (10 位有符号整数)

应用程序所需的数字编码。

这是发出 MQGET 调用的应用程序所需的数字编码; 请参阅 MQMD 结构中的 MDENC 字段以获取更多详细信息。

如果转换成功,那么出口应将其复制到消息描述符中的 MDENC 字段。

这是出口的输入字段。

DXHCN (10 位有符号整数)

连接句柄。

这是可用于 MQXCNVC 调用的连接句柄。 此句柄不一定与发出 MQGET 调用的应用程序指定的句柄相同。

DXLEN (10 位带符号整数)

消息数据的长度 (以字节计)。

调用出口时,此字段包含应用程序消息数据的原始长度。 如果为了适合应用程序提供的缓冲区而截断了消息,那么提供给出口的消息的大小将 小于 DXLEN的值。 提供给出口的消息大小始终由出口的 INLEN 参数给出,而不考虑可能发生的任何截断。

截断由 DXREA 字段指示,该字段在出口的输入上具有值 RC2079 。

大多数转换都不需要更改此长度,但如果需要,出口可以这样做; 出口设置的值将返回到 MQGET 调用的 DATLEN 参数中的应用程序。 但是,如果要转换的消息是仅包含部分逻辑消息的段,那么 不能 更改此长度。 这是因为更改长度将导致逻辑消息中的后续段的偏移量不正确。

请注意,如果出口想要更改数据的长度,请注意队列管理器已根据 未转换 数据的长度决定消息数据是否适合应用程序的缓冲区。 此决策确定是从队列中除去消息 (还是对浏览请求移动了浏览光标) ,并且不受转换所导致的数据长度的任何更改影响。 因此,建议转换出口不会导致应用程序消息数据的长度发生更改。

如果字符转换确实意味着长度的更改,那么可以将字符串转换为另一个长度相同的字符串 (以字节为单位) ,截断尾部空格或根据需要填充空格。

如果消息不包含应用程序消息数据,那么不会调用出口; 因此 DXLEN 始终大于零。

这是出口的输入/输出字段。

DXREA (10 位有符号整数)

原因码限定 DXCC

调用出口时,如果出口选择不执行任何操作,那么这将包含将返回到发出 MQGET 调用的应用程序的原因码。 可能的值包括: RC2079(指示消息已截断以适合应用程序提供的缓冲区) 和 RC2119(指示消息需要转换但尚未执行此操作)。

在出口输出时,此字段包含要在 MQGET 调用的 REASON 参数中返回到应用程序的原因; 建议执行以下操作:
  • 如果 DXREA 在输入到出口时具有值 RC2079 ,那么无论转换是成功还是失败,都不应改变 DXREADXCC 字段。

    (如果 DXCC 字段不是 CCOK ,那么检索消息的应用程序可以通过将消息描述符中返回的 MDENCMDCSI 值与请求的值进行比较来识别转换失败; 相反,应用程序无法将截断的消息与刚安装了缓冲区的消息区分开来。 因此,应优先返回 RC2079 以代替指示转换失败的任何原因。)

  • 如果 DXREA 在输入到出口时具有任何其他值:
    • 如果转换成功,那么应将 DXCC 设置为 CCOK ,并将 DXREA 设置为 RCNONE。
    • 如果转换失败,或者消息扩展并且必须截断以适合缓冲区,那么应将 DXCC 设置为 CCWARN (或保持不变) ,并将 DXREA 设置为以下列表中的值之一,以指示失败的性质。
      请注意,如果转换后的消息对于缓冲区过大,那么仅当发出 MQGET 调用的应用程序指定了 GMATM 选项时,才应该截断该消息:
      • 如果指定了该选项,那么应返回原因 RC2079 。
      • 如果未指定该选项,那么应返回未转换的消息,原因码为 RC2120。

建议出口使用以下列表中的原因码来指示转换失败的原因,但是如果认为适当,该出口可以从 RC* 代码集中返回其他值。 此外,将分配值 RC0900 到 RC0999 的范围以供出口使用,以指示出口希望与发出 MQGET 调用的应用程序进行通信的条件。

注: 如果无法成功转换消息,那么出口 必须DXRES 字段中返回 XRFAIL ,以便队列管理器返回未转换的消息。 无论在 DXREA 字段中返回的原因码如何,都是如此。
RC0900
(900 , X'384 ') 应用程序定义的原因码的最低值。
RC0999
(999,X'3E7') 应用程序定义的原因代码的最高值。
RC2120
(2120 , X'848 ') 转换后的数据对于缓冲区太大。
RC2119
(2119 , X'847 ') 未转换消息数据。
RC2111
(2111,X'83F')源编码字符集标识符无效。
RC2113
(2113 , X'841 ') 无法识别消息中的压缩十进制编码。
RC2114
(2114 , X'842 ') 无法识别消息中的浮点编码。
RC2112
(2112 , X'840 ') 无法识别源整数编码。
RC2115
(2115 , X'843 ') 目标编码字符集标识无效。
RC2117
(2117 , X'845 ') 接收器指定的压缩十进制编码无法识别。
RC2118
(2118 , X'846 ') 接收器指定的浮点编码无法识别。
RC2116
(2116 , X'844 ') 无法识别目标整数编码。
RC2079
(2079,X'81F')已返回截断报文(处理已完成)。

这是出口的输入/输出字段。

DXRES (10 位带符号整数)

来自出口的响应。

此值由出口设置以指示转换是否成功。 它必须是下列其中一项:
西韩
转换成功。
如果出口指定此值,那么队列管理器将向发出 MQGET 调用的应用程序返回以下内容:
  • 出口输出中 DXCC 字段的值
  • 出口输出中 DXREA 字段的值
  • 出口输出中 DXLEN 字段的值
  • 出口的输出缓冲区 OUTBUF的内容。 返回的字节数是出口的 OUTLEN 参数的较小值,以及出口输出的 DXLEN 字段的值

如果出口的消息描述符参数中的 MDENCMDCSI 字段 未更改,那么队列管理器将返回:

  • 出口的 输入 上 MQDXP 结构中 MDENCMDCSI 字段的值
如果出口的消息描述符参数中的一个或两个 MDENCMDCSI 字段已更改,那么队列管理器将返回:
  • 出口输出时出口的消息描述符参数中 MDENCMDCSI 字段的值

XRFAIL
转换失败。
如果出口指定此值,那么队列管理器将向发出 MQGET 调用的应用程序返回以下内容:
  • 出口输出中 DXCC 字段的值
  • 出口输出中 DXREA 字段的值
  • 出口的 输入DXLEN 字段的值
  • 出口的输入缓冲区 INBUF的内容。 返回的字节数由 INLEN 参数给出

如果出口已变更 INBUF,那么结果未定义。

DXRES 是出口的输出字段。

DXSID (4 字节字符串)

结构标识。

该值必须为:
DXSIDV
数据转换出口参数结构的标识。

这是出口的输入字段。

DXVER (10 位有符号整数)

结构版本号。

该值必须为:
DXVER1
数据转换出口参数结构的版本号。
以下常量指定当前版本的版本号:
DXVERC
当前版本的数据转换出口参数结构。
注: 引入此结构的新版本时,不会更改现有部件的布局。 因此,出口应检查 DXVER 字段是否等于或大于包含出口需要使用的字段的最低版本。

这是出口的输入字段。

DXXOP (10 位有符号整数)

已保留。

这是保留字段; 其值为 0

RPG 声明 (复制文件 CMQDXPH)

     D*..1....:....2....:....3....:....4....:....5....:....6....:....7..
     D* MQDXP Structure
     D*
     D* Structure identifier
     D  DXSID                  1      4
     D* Structure version number
     D  DXVER                  5      8I 0
     D* Reserved
     D  DXXOP                  9     12I 0
     D* Application options
     D  DXAOP                 13     16I 0
     D* Numeric encoding required by application
     D  DXENC                 17     20I 0
     D* Character set required by application
     D  DXCSI                 21     24I 0
     D* Length in bytes of message data
     D  DXLEN                 25     28I 0
     D* Completion code
     D  DXCC                  29     32I 0
     D* Reason code qualifying DXCC
     D  DXREA                 33     36I 0
     D* Response from exit
     D  DXRES                 37     40I 0
     D* Connection handle
     D  DXHCN                 41     44I 0