BizTalk信封模式和取消匹配的说明

BizTalk信封模式和取消匹配的说明,biztalk,biztalk-2013r2,envelope-schema,Biztalk,Biztalk 2013r2,Envelope Schema,作为新角色的一部分,我目前正在自学BizTalk,并学习了开发编排和配置管道的核心概念。 最近,我一直在尝试使用信封模式将包含多个记录的结果集分解为单独的消息,并最终在上周通过使用以下教程使其正常工作 如果可能的话,我正在寻找一位足够善良的人,让我了解所涉及的机制,以便我能够确认我对过程的理解,并将其完全纳入我的解决方案中 我的理解是: 接收管道使用XML反汇编程序来分解我的消息,因为我已经将接收模式标记为信封 这就是我的问题所在。在模式上,我将父节点的主体XPath设置为包含结果元素的最终

作为新角色的一部分,我目前正在自学BizTalk,并学习了开发编排和配置管道的核心概念。 最近,我一直在尝试使用信封模式将包含多个记录的结果集分解为单独的消息,并最终在上周通过使用以下教程使其正常工作

如果可能的话,我正在寻找一位足够善良的人,让我了解所涉及的机制,以便我能够确认我对过程的理解,并将其完全纳入我的解决方案中

我的理解是: 接收管道使用XML反汇编程序来分解我的消息,因为我已经将接收模式标记为信封

这就是我的问题所在。在模式上,我将父节点的主体XPath设置为包含结果元素的最终节点上方的节点的主体XPath。我为什么要这样做,它到底做了什么

我对结果的模糊理解是,它从底部节点获取结果记录,并使用主体XPath作为从何处获取子节点/元素以创建新消息的参考

在模式上,我将节点的主体XPath设置为包含结果元素的最终节点上方的节点的主体XPath。我为什么要这样做,它到底是什么

我对结果的模糊理解是,它从底部节点获取结果记录,并使用主体XPath作为从何处获取子节点/元素以创建新消息的参考

我(也是?)在理解BodyXPath这一措辞背后的原因时遇到了一些困难,因为它实际上是您正在选择的信封

其作用:您告诉BizTalk,该节点下的所有记录都应被视为单独的消息。它不必是单一记录,甚至不必是单一类型的消息。因此,您可以从单个数据源收集一组不同的消息,并单独处理它们

它本身并不是“final/bottom”节点之上的节点,因为信封可以包含一组其他类型(如果您想对接收部分进行验证)

您的示例几乎允许正文下面的任何XML,因为它使用
any
元素。这意味着我可以在他们的示例中添加一条
警告
记录:

<Envelope xmlns="http://BasicXMLEnvelope">
  <Error>
    <ID>102</ID>
    <Type>0</Type>
    <Priority>High</Priority>
    <Description>Sprocket query fails.</Description>
    <ErrorDateTime>1999-05-31T13:20:00.000-05:00</ErrorDateTime>
  </Error>
  <Error>
    <ID>16502</ID>
    <Type>2</Type>
    <Priority>Low</Priority>
    <Description>Time threshold exceeded.</Description>
    <ErrorDateTime>1999-05-31T13:20:00.000-05:00</ErrorDateTime>
  </Error>
  <Warning>
    <ID>333</ID>
    <Description>Just a warning.</Description>
    <WarningDateTime>2019-10-07T15:15:00.000+02:00</WarningDateTime>
  </Warning>
</Envelope>

102
0
高
链轮查询失败。
1999-05-31T13:20:00.000-05:00
16502
2.
低
超过了时间阈值。
1999-05-31T13:20:00.000-05:00
333
只是一个警告。
2019-10-07T15:15:00.000+02:00
使用所述的去匹配方法,该单个传入消息将在消息框中产生三条消息

<Error>
  <ID>102</ID>
  <Type>0</Type>
  <Priority>High</Priority>
  <Description>Sprocket query fails.</Description>
  <ErrorDateTime>1999-05-31T13:20:00.000-05:00</ErrorDateTime>
</Error>

102
0
高
链轮查询失败。
1999-05-31T13:20:00.000-05:00
。。。而且

<Error>
  <ID>16502</ID>
  <Type>2</Type>
  <Priority>Low</Priority>
  <Description>Time threshold exceeded.</Description>
  <ErrorDateTime>1999-05-31T13:20:00.000-05:00</ErrorDateTime>
</Error>
<Warning>
  <ID>333</ID>
  <Description>Just a warning.</Description>
  <WarningDateTime>2019-10-07T15:15:00.000+02:00</WarningDateTime>
</Warning>

16502
2.
低
超过了时间阈值。
1999-05-31T13:20:00.000-05:00
。。。而且

<Error>
  <ID>16502</ID>
  <Type>2</Type>
  <Priority>Low</Priority>
  <Description>Time threshold exceeded.</Description>
  <ErrorDateTime>1999-05-31T13:20:00.000-05:00</ErrorDateTime>
</Error>
<Warning>
  <ID>333</ID>
  <Description>Just a warning.</Description>
  <WarningDateTime>2019-10-07T15:15:00.000+02:00</WarningDateTime>
</Warning>

333
只是一个警告。
2019-10-07T15:15:00.000+02:00
。。。然后您可以订阅

在我看来,如果您有一个单一的消息源,其中每条消息都指向另一个目的地(例如,不同的客户),或者目的地要求单独发送每条消息(例如,每个文件只允许一张发票的目标发票模式),这一点尤其有用


这种方法的替代方法是一次只从源代码中选择一条记录。

太好了,谢谢@Ruud-很高兴看到我走的是正确的道路!