如果已经定义了多段式消息,则至少有一条消息嵌入在另一条消息中。在表示外部消息的全部复杂类型中,您可以使用以下方式中的一种对内部消息进行建模:
- 将元素(以下示例中称为 E_outer1)的 Type 属性设置为一个复杂类型,该复杂类型的 Composition 属性已经被设置为 Message
- 复杂类型的 Composition 属性设置为 Message(在下例中称为 t_Embedded)
取决于您使用了以上何种模型,您需要编写以处理内部消息的 ESQL 会有所不同。例如,假设您已经定义了以下内容:
- 外部消息 M_outer,它的 Type 属性被设置为 t_Outer。
- 内部消息 M_inner1,它的 Type 被设置为 t_Inner1
- 内部消息 M_inner2,它的 Type 被设置为 t_Inner2
- 类型 t_Outer,它的第一个子元素命名为 E_outer1,第二个子代被定义为名为 t_Embedded 的复杂类型
- 类型 t_Embedded,它的 Composition 属性被设置为 Message
- 类型 t_Inner1,它的第一个子元素命名为 E_inner11
- 类型 t_Inner2,它的第一个子元素命名为 E_inner21
- 类型 t_outer1,它的 Composition 属性被设置为 Message
- Element E_outer1,它的 Type 属性被设置为 t_outer1
如果要设置 E_inner11 的值,请编写以下 ESQL 代码:
SET OutputRoot.MRM.E_outer1.M_inner1.E_inner11 = 'FRED';
如果要设置 E_inner21 的值,请编写以下 ESQL 代码:
SET OutputRoot.MRM.M_inner2.E_inner21 = 'FRED';
如果您将消息头从输入消息复制到输出消息,并且输入消息类型包含路径,则仅将路径中最外层的名称复制到输出消息类型。
当您配置消息流以处理嵌入式消息时,您可以指定MQRFH2 头(如果输入消息中存在一个)或输入节点消息类型属性中的消息类型的路径来代替名称(例如,上面构建模型的消息,路径可以指定为 M_Outer/M_Inner1/M_Inner2 来代替仅 M_Outer)。
如果您已指定输入消息的物理格式是 CWF 或 XML,任何消息类型前缀连接在来自 MQRFH2 或输入节点的消息类型前,给出要使用的最终路径(有关更多信息,请参阅多段式消息)。MRM 使用路径中第一项作为最外层消息类型,然后当它找到 Composition 属性设置为 Message 的复杂类型时,逐渐向内工作。
如果您已指定输入消息的物理格式是 TDS,则实现一个不同的使用消息的进程。这在 TDS 格式:多段式消息中有所描述。
有关路径连接的更多信息,请参阅消息集属性。