MQINQMP-查询消息属性

MQINQMP 调用返回消息属性的值。

语法

MQINQMP (Hconn, Hmsg, InqPropOpts, 名称, PropDesc, 类型, 值长度, 价值, 数据长度, CompCode, 原因)

参数

Hconn
类型 :MQHCONN-输入

此句柄表示与队列管理器的连接。 Hconn 的值必须与用于创建 Hmsg 参数中指定的消息句柄的连接句柄相匹配。

如果消息句柄是使用 MQHC_UNASSOCIATED_HCONN 创建的,那么必须在查询消息句柄的属性的线程上建立有效连接,否则调用将失败并返回 MQRC_CONNECTION_BROKEN。

赫消息
类型 :MQHMSG-输入

这是要查询的消息句柄。 该值由先前的 MQCRTMH 调用返回。

InqPropOpts
类型 :MQIMPO-输入/输出

请参阅 MQIMPO 数据类型以获取详细信息。

名称
类型 :MQCHARV-输入/输出

要查询的属性的名称。

如果找不到具有此名称的属性,那么调用将失败,原因为 MQRC_PROPERTY_NOT_AVAILABLE。

可以在属性名末尾使用通配符百分号 (%)。 通配符与零个或多个字符匹配,包括句点 (.) 字符。 这允许应用程序查询许多属性的值。 使用选项 MQIMPO_INQ_FIRST 调用 MQINQMP 以获取第一个匹配属性,使用选项 MQIMPO_INQ_NEXT 再次调用 MQINQMP 以获取下一个匹配属性。 如果没有更多匹配属性可用,那么调用将失败并返回 MQRC_PROPERTY_NOT_AVAILABLE。 如果InqPropOpts结构的 "ReturnedName字段被初始化为返回属性名称的地址或偏移量,则在 MQINQMP 返回时,该字段将以已匹配的属性名称完成初始化。 如果 "InqPropOpts结构中 "ReturnedName的 "VSBufSize字段小于返回的属性名长度,则完成代码将被设置为 MQCC_FAILED,原因为 MQRC_PROPERTY_NAME_TO_BIG。

将返回具有已知同义词的属性,如下所示:
  1. 带有前缀 "mqps" 的属性。 作为 IBM® MQ 属性名称返回。 例如,返回的名称是"MQTopicString",而不是mqps.Top"
  2. 带有前缀 "jms" 的属性。 或 "mcd"。 作为 JMS 头字段名称返回,例如, "JMSExpiration" 是返回的名称,而不是 "jms.Exp"。
  3. 带有前缀 "usr." 的属性 返回时不带该前缀,例如,返回 "Color" 而不是 "usr.Color"。
带有同义词的属性仅返回一次。

在 C 编程语言中,定义了以下宏变量以查询所有属性,然后查询以 "usr." 开头的所有属性:

MQPROP_INQUIRE_ALL
查询消息的所有属性。
MQPROP_INQUIRE_ALL 可通过以下方式使用:
MQCHARV Name = {MQPROP_INQUIRE_ALL};
MQPROP_INQUIRE_ALL_USR
查询启动 "usr." 的消息的所有属性。 返回的名称不带 "usr"。 前缀。

如果指定了 MQIMP_INQ_NEXT ,但自上次调用以来名称已更改,或者这是第一次调用,那么将隐含 MQIMPO_INQ_FIRST。

请参阅 属性名属性名限制 ,以获取有关使用属性名的更多信息。

PropDesc
类型 :MQPD-输出

此结构用于定义属性的属性,包括不支持该属性时发生的情况,该属性所属的消息上下文以及应该将该属性复制到的消息。 请参阅 MQPD 以获取此结构的详细信息。

类型
类型 :MQLONG-输入/输出

从 MQINQMP 调用返回时,此参数设置为数据类型 。 数据类型可以是下列任何一项:

MQTYPE_BOOLEAN
布尔值。
MQTYPE_BYTE_STRING
字节字符串。
MQTYPE_INT8
8 位带符号整数。
MQTYPE_INT16
16 位带符号整数。
MQTYPE_INT32
32 位带符号整数。
MQTYPE_INT64
64 位带符号整数。
MQTYPE_FLOAT32
32 位浮点数。
MQTYPE_FLOAT64
64 位浮点数。
MQTYPE_STRING
字符串。
MQTYPE_NULL
该属性存在,但具有空值。

如果无法识别属性值的数据类型,那么将返回 MQTYPE_STRING ,并将该值的字符串表示法放入 区域中。 数据类型的字符串表示可以在InqPropOpts参数的TypeString字段中找到。 将返回警告完成代码,原因为 MQRC_PROP_TYPE_NOT_SUPPORTED。

此外,如果指定了选项 MQIMPO_CONVERT_TYPE ,那么将请求转换属性值。 使用 类型 作为输入,以指定要作为属性返回的数据类型。 有关数据类型转换的详细信息,请参阅 MQIMPO 结构的 MQIMPO_CONVERT_TYPE 选项的描述。

如果不请求类型转换,那么可以在输入上使用以下值:
MQTYPE_AS_SET
将返回该属性的值,而不转换其数据类型。
ValueLength
类型 :MQLONG-输入

"值" 区域的长度 (以字节为单位)。 为不需要返回值的属性指定零。 这些属性可以是应用程序设计为具有空值或空字符串的属性。 如果指定了 MQIMPO_QUERY_LENGTH 选项,那么还要指定零; 在这种情况下,不会返回任何值。

类型 :MQBYTEx ValueLength -输出

这是包含查询的属性值的区域。 缓冲区应该在适合于所返回值的边界上对齐。 未能执行此操作可能会导致稍后访问该值时发生错误。

如果 ValueLength 小于属性值的长度,那么会将尽可能多的属性值移动到 中,并且调用将失败,并返回完成代码 MQCC_FAILED 和原因 MQRC_PROPERTY_VALUE_TOO_BIG。

Value中数据的字符集由InqPropOpts参数中的ReturnedCCSID字段给出。 Value中数据的编码由InqPropOpts参数中的ReturnedEncoding字段给出。

在 C 编程语言中,该参数被声明为指向 void 的指针; 任何类型数据的地址都可以被指定为该参数。

如果 ValueLength 参数为零,那么不会引用 Value ,并且用 C 或 System/390 汇编程序编写的程序传递的值可以为空。

DataLength
类型:MQLONG - 输出

这是 区域中返回的实际属性值的长度 (以字节为单位)。

如果 DataLength 小于属性值长度,那么在从 MQINQMP 调用返回时仍会填充 DataLength 。 这允许应用程序确定容纳属性值所需的缓冲区大小,然后使用相应大小的缓冲区重新发出调用。

还可以返回以下值。

如果 Type 参数设置为 MQTYPE_STRING 或 MQTYPE_BYTE_STRING:
MQVL_EMPTY_STRING
该属性存在,但不包含任何字符或字节。
CompCode
类型:MQLONG - 输出
完成代码;此完成代码为以下其中一项:
MQCC_OK
成功完成。
MQCC_WARNING
警告(部分完成)。
MQCC_FAILED
调用失败。
原因
类型:MQLONG - 输出
如果 CompCode 为 MQCC_OK:
MQRC_NONE
(0, X'000') 没有要报告的原因。
如果 CompCode 为 MQCC_WARNING:
MQRC_PROP_NAME_NOT_汇率
(2492,X'09BC') 返回的属性名称未转换。
MQRC_PROP_VALUE_NOT_CONVERTED
(2466,X'09A2')属性值未转换。
MQRC_PROP_TYPE_NOT_SUPPORTED
(2467,X'09A3')不支持属性数据类型。
MQRC_RFH_FORMAT_ERROR
(2421 , X'0975 ') 无法解析包含属性的 MQRFH2 文件夹。
如果 CompCode 是 MQCC_FAILED:
MQRC_ADAPTER_NOT_AVAILABLE
(2204,X'089C')适配器不可用。
MQRC_ADAPTER_SERV_LOAD_ERROR
(2130 , X'0852 ') 无法装入适配器服务模块。
MQRC_ASID_MISMATCH
(2157,X'086D')主要 ASID 和家庭 ASID 不同。
MQRC_BUFFER_ERROR
(2004,X'07D4')参数值无效。
MQRC_BUFFER_LENGTH_ERROR
(2005,X'07D5')值长度参数无效。
MQRC_CALL_IN_PROGRESS
(2219,X'08AB') MQI 呼叫在前一个呼叫完成前进入。
MQRC_CONNECTION_BROKEN
(2009,X'07D9')与队列管理器的连接丢失。
MQRC_DATA_LENGTH_ERROR
(2010,X'07DA')数据长度参数无效。
MQRC_IMPO_ERROR
(2464,X'09A0') 查询报文属性选项结构无效。
MQRC_HMSG_ERROR
(2460,X'099C') 信息句柄无效。
MQRC_MSG_HANDLE_IN_USE
(2499,X'09C3') 消息句柄已在使用中。
MQRC_OPTIONS_ERROR
(2046,X'07F8') 选项无效或不一致。
MQRC_PD_ERROR
(2482,X'09B2')属性描述符结构无效。
MQRC_PROP_CONV_NOT_SUPPORTED
(2470,X'09A6')不支持从实际数据类型到请求数据类型的转换。
MQRC_PROPERTY_NAME_ERROR
(2442,X'098A')无效属性名。
MQRC_PROPERTY_NAME_TOO_BIG
(2465,X'09A1')属性名称对于返回的名称缓冲区来说太大。
MQRC_PROPERTY_NOT_AVAILABLE
(2471,X'09A7) 财产不可用。
MQRC_PROPERTY_VALUE_TOO_BIG
(2469,X'09A5')属性值对值区域来说太大。
MQRC_PROP_NUMBER_FORMAT_ERROR
(2472,X'09A8')数值数据中遇到数字格式错误。
MQRC_PROPERTY_TYPE_ERROR
(2473,X'09A9')请求的属性类型无效。
MQRC_SOURCE_CCSID_ERROR
(2111,X'083F') 属性名编码字符集标识符无效。
MQRC_STORAGE_NOT_AVAILABLE
(2071 , X'0871 ') 存储空间不足。
MQRC_UNEXPECTED_ERROR
(2195 , X'0893 ') 发生意外错误。

有关这些代码的详细信息,请参阅 消息和原因码

C 调用

MQINQMP (Hconn, Hmsg, &InqPropOpts, &Name, &PropDesc, &Type,
ValueLength, Value, &DataLength, &CompCode, &Reason);
按如下所示声明参数:
MQHCONN Hconn;       /* Connection handle */
MQHMSG  Hmsg;        /* Message handle */
MQIMPO  InqPropOpts; /* Options that control the action of MQINQMP */
MQCHARV Name;        /* Property name */
MQPD    PropDesc;    /* Property descriptor */
MQLONG  Type;        /* Property data type */
MQLONG  ValueLength; /* Length in bytes of the Value area */
MQBYTE  Value[n];    /* Area to contain the property value */
MQLONG  DataLength;  /* Length of the property value */
MQLONG  CompCode;    /* Completion code */
MQLONG  Reason;      /* Reason code qualifying CompCode */

COBOL 调用

CALL 'MQINQMP' USING HCONN, HMSG, INQMSGOPTS, NAME, PROPDESC, TYPE,
VALUELENGTH, VALUE, DATALENGTH, COMPCODE, REASON.
按如下所示声明参数:
**   Connection handle
 01  HCONN       PIC S9(9) BINARY.
**   Message handle
 01  HMSG		    PIC S9(18) BINARY.
**   Options that control the action of MQINQMP
 01  INQMSGOPTS.
     COPY CMQIMPOV.
**   Property name
 01  NAME.
     COPY CMQCHRVV.
**   Property descriptor
 01  PROPDESC.
     COPY CMQPDV.
**   Property data type
 01  TYPE        PIC S9(9) BINARY.
**   Length in bytes of the VALUE area
 01  VALUELENGTH PIC S9(9) BINARY.
**   Area to contain the property value
 01  VALUE       PIC X(n).
**   Length of the property value
 01  DATALENGTH  PIC S9(9) BINARY.
**   Completion code
 01  COMPCODE    PIC S9(9) BINARY.
**   Reason code qualifying COMPCODE
 01  REASON      PIC S9(9) BINARY.

PL/I 调用

call MQINQMP (Hconn, Hmsg, InqPropOpts, Name, PropDesc, Type,
ValueLength, Value, DataLength, CompCode, Reason);
按如下所示声明参数:
dcl Hconn       fixed bin(31);  /* Connection handle */
dcl Hmsg        fixed bin(63);  /* Message handle */
dcl InqPropOpts like MQIMPO;    /* Options that control the action of MQINQMP */
dcl Name        like MQCHARV;   /* Property name */
dcl PropDesc    like MQPD;      /* Property descriptor */
dcl Type        fixed bin (31); /* Property data type */
dcl ValueLength fixed bin (31); /* Length in bytes of the Value area */
dcl Value       char (n);       /* Area to contain the property value */
dcl DataLength  fixed bin (31); /* Length of the property value */
dcl CompCode    fixed bin (31); /* Completion code */
dcl Reason      fixed bin (31); /* Reason code qualifying CompCode */

高级汇编程序调用

CALL MQINQMP,(HCONN,HMSG,INQMSGOPTS,NAME,PROPDESC,TYPE,
VALUELENGTH,VALUE,DATALENGTH,COMPCODE,REASON)
按如下所示声明参数:
HCONN        DS         F     Connection handle
HMSG         DS         D     Message handle
INQMSGOPTS   CMQIMPOA   ,     Options that control the action of MQINQMP
NAME         CMQCHRVA   ,     Property name
PROPDESC     CMQPDA     ,     Property descriptor
TYPE         DS         F     Property data type
VALUELENGTH  DS         F     Length in bytes of the VALUE area
VALUE        DS         CL(n) Area to contain the property value
DATALENGTH   DS         F     Length of the property value
COMPCODE     DS         F     Completion code
REASON       DS         F     Reason code qualifying COMPCODE