在架构上,我将节点的 Body XPath 设置为包含结果元素的最终节点之上的节点。我为什么要这样做,具体是做什么的?
我对结果的模糊理解是它从底部节点获取结果记录,并使用该 Body XPath 作为从何处获取子节点/元素以创建新消息的参考?
我(也是?)理解措辞 Body XPath 背后的原因有些困难,因为它实际上是您选择的信封。
它在做什么:您告诉 BizTalk 该节点下的所有记录都应被视为单独的消息。它不必是单个记录,甚至不是单一类型的消息。因此,您可以从单个数据源收集一堆不同的消息,并单独处理它们。
它本身不是“最终/底部”节点上方的节点,因为信封可以包含许多其他类型(如果您想对接收部分进行一些验证)。
first link 中的示例几乎允许正文下方的任何 XML,因为它使用 Any 元素。这意味着我可以在他们的示例中添加 Warning 记录:
<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>
使用所描述的debatching方法,这个单一的传入消息将导致消息框中的三个消息;
<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>
...然后您可以订阅。
在我看来,如果您有一个消息源,其中每条消息都针对另一个目的地(例如不同的客户),或者目的地要求每条消息单独发送(例如目标发票),这在我看来特别有用模式,每个文件只允许一张发票)。
此方法的替代方法是一次只从源中选择一条记录。