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。将返回具有已知同义词的属性,如下所示:- 带有前缀 "mqps" 的属性。 作为 IBM® MQ 属性名称返回。 例如,返回的名称是"MQTopicString",而不是mqps.Top"
- 带有前缀 "jms" 的属性。 或 "mcd"。 作为 JMS 头字段名称返回,例如, "JMSExpiration" 是返回的名称,而不是 "jms.Exp"。
- 带有前缀 "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