[IBM i]

IBM i 上的 MQRFH (规则和格式化头)

MQRFH 结构定义规则和格式化头的布局。

概述

用途: 此头可用于以 "名称/值" 对的形式发送字符串数据。

格式名称:FMRFH。

字符集和编码:MQRFH 结构 (包括 RFNVS) 中的字段是由 MQRFH 之前的头结构中的 MDCSIMDENC 字段提供的字符集和编码,或者 MQMD 结构中的那些字段 (如果 MQRFH 位于应用程序消息数据的开头) 提供的编码。

字符集必须是对队列名称中有效的字符具有单字节字符的字符集。

字段

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

RFCSI (10 位带符号整数)

RFNVS之后的数据的字符集标识。

这指定 RFNVS 之后的数据的字符集标识; 它不适用于 MQRFH 结构本身中的字符数据。

在 MQPUT 或 MQPUT1 调用上,应用程序必须将此字段设置为适合于数据的值。 可以使用以下特殊值:
CSINHT
继承此结构的字符集标识。

此结构 后面 的数据中的字符数据与此结构位于同一字符集中。

队列管理器将消息中发送的结构中的此值更改为结构的实际字符集标识。 如果未发生错误,那么 MQGET 调用不会返回值 CSINHT。

如果 MQMD 中 MDPAT 字段的值为 ATBRKR ,那么不能使用 CSINHT。

此字段的初始值为 CSUNDF。

RFNVS之后的数据的数字编码。

这将指定 RFNVS 之后的数据的数字编码; 它不适用于 MQRFH 结构本身中的数字数据。

在 MQPUT 或 MQPUT1 调用上,应用程序必须将此字段设置为适合于数据的值。

此字段的初始值为 ENNAT。

RFFLG (10 位有符号整数)

标志。

可以指定以下内容:
没有标志。

此字段的初始值为 RFNONE。

RFFMT (8 字节字符串)

RFNVS之后的数据的格式名称。

这将指定 RFNVS后面的数据的格式名。

在 MQPUT 或 MQPUT1 调用上,应用程序必须将此字段设置为适合于数据的值。 此字段的编码规则与 MQMD 中 MDFMT 字段的编码规则相同。

此字段的初始值为 FMNONE。

RFLEN (10 位带符号整数)

MQRFH 的总长度,包括 RFNVS

这是 MQRFH 结构的长度 (以字节计) ,包括结构末尾的 RFNVS 字段。 该长度不包含跟随 RFNVS 字段的任何用户数据。

为避免在某些环境中发生用户数据转换问题,请考虑使用 RFLEN 作为四的倍数。

以下常量给出结构的 fixed 部分的长度,即不包括 RFNVS 字段的长度:
RFLENV
MQRFH 结构的固定部分的长度。

此字段的初始值为 RFLENV。

RFNVS (n 字节字符串)

包含 "名称/值" 对的字符串。

这是包含以下格式的 "名称/值" 对的可变长度字符串:
name1 value1 name2 value2 name3 value3 ...
每个名称或值必须与相邻的名称或值用一个或多个空白字符分隔; 这些空白不重要。 名称或值可以包含重要空格,方法是使用引号字符作为名称或值的前缀和后缀; 开头引号和匹配的右引号之间的所有字符都被视为重要字符。 在以下示例中,名称为 FAMOUS_WORDS,值为 Hello World:
FAMOUS_WORDS "Hello World"
名称或值可以包含除空字符以外的任何字符 (充当 RFNVS的定界符)。 但是,为了帮助实现互操作性,应用程序可能倾向于将名称限制为以下字符:
  • 第一个字符: 大写或小写字母 (A 到 Z 或 a 到 z) 或下划线。
  • 后续字符: 大写或小写字母,十进制数字 (0 到 9) ,下划线,连字符或点。
如果名称或值包含一个或多个引号,那么必须将名称或值括在引号中,并且字符串中的每个引号都必须加倍:
Famous_Words "The program displayed ""Hello World"""
名称和值区分大小写,即,不会将小写字母视为与大写字母相同。 例如, FAMOUS_WORDSFamous_Words 是两个不同的名称。

RFNVS 的长度 (以字节计) 等于 RFLEN 减去 RFLENV。 为避免在某些环境中用户数据的数据转换出现问题,建议此长度应为 4 的倍数。 RFNVS 必须为此长度填充空格,或者通过在字符串中的最后一个有效字符后面放置空字符来提前终止。 将忽略空字符及其后面的字节 (最多为指定长度 RFNVS)。

注: 由于此字段的长度不固定,因此将从为受支持编程语言提供的结构声明中省略此字段。
RFSID (4 字节字符串)

结构标识。

该值必须为:
RFSIDV
规则和格式化头结构的标识。

此字段的初始值为 RFSIDV。

RFVER (10 位带符号整数)

结构版本号。

该值必须为:
RFVER1
Version-1 规则和格式化头结构。

此字段的初始值为 RFVER1。

初始值

表 1. MQRFH 中字段的初始值
字段名称 常量的名称 常量值
RFSID RFSIDV 'RFH¬'
RFVER RFVER1 1
RFLEN RFLENV 32
RFENC ENNAT 取决于环境
RFCSI CSUNDF 0
RFFMT FMNONE 空白
RFFLG 0
备注信息:
  1. 符号 ¬ 表示单个空白字符。

RPG 声明

     D*..1....:....2....:....3....:....4....:....5....:....6....:....7..
     D* MQRFH Structure
     D*
     D* Structure identifier
     D  RFSID                  1      4    INZ('RFH ')
     D* Structure version number
     D  RFVER                  5      8I 0 INZ(1)
     D* Total length of MQRFH includingNameValueString
     D  RFLEN                  9     12I 0 INZ(32)
     D* Numeric encoding of data that followsNameValueString
     D  RFENC                 13     16I 0 INZ(273)
     D* Character set identifier of data thatfollows NameValueString
     D  RFCSI                 17     20I 0 INZ(0)
     D* Format name of data that followsNameValueString
     D  RFFMT                 21     28    INZ('        ')
     D* Flags
     D  RFFLG                 29     32I 0 INZ(0)