Biztalk在Map转换之前预加载输出消息

时间:2014-08-06 23:02:30

标签: biztalk biztalk-mapper biztalk-2013 biztalk-orchestrations

我有来自2个不同系统(SystemA和SystemB)的2个相关传入消息,我只想基本上将几个字段从SystemA消息复制到SystemBmessage。

所以我的Construct Message形状如下所示:

enter image description here

消息分配形状中只包含此代码:

xmlIncomingNoAttachHolder = new System.Xml.XmlDocument();
xmlIncomingNoAttachHolder = msgMultiPartInNoAttachment.BodySegments;

// assigning the SsytemB version (no attachment) first.
// Also, since we are only copying a couple fields, this can serve as the base.
msgComboWithAttach = xmlIncomingNoAttachHolder;
msgComboWithAttach(XMLNORM.TargetCharset) = "UTF-8";

然后地图左边有2个输入(SystemA模式和SystemB模式)ORU消息,右边有输出ORU消息,它们也与SystemB输入消息共享相同的模式。

我希望我可以使用上面的消息分配代码来分配输出msgComboWithAttach消息,然后使用映射器将我们需要的几个字段映射到SystemA消息。 / p>

但似乎只要我应用地图,就会在执行变换之前清除预先加载的msgComboWithAttach消息,然后应用地图。然后,生成的消息包含 ONLY 在地图中复制的那些字段,以及在消息分配预加载中分配的所有其他段/字段。

这是预期的行为,在这种情况下,我将不得不对地图中的所有段进行批量复制吗?或者有没有办法像我想要的那样预加载/复制邮件,然后只映射几个字段?

2 个答案:

答案 0 :(得分:2)

是的,这是预期的行为,因为转换将创建消息。您不能使用Xslt以这种方式修改文档。

Dijkgraaf的解决方案将起作用。或者,您可以使用Orchestration xpath()函数在Message中读取和设置特定值。请参阅:http://msdn.microsoft.com/en-us/library/ee268159(v=bts.10).aspx

答案 1 :(得分:1)

是的,这是预期的行为。

你想做的是

  1. 区分架构中的字段(目标和来源,在您的情况下,如果我理解您所说的内容,它们可能是相同的。)
  2. 首先确保地图确保地图会创建要填充某些虚拟值的字段。
  3. 具有分配形状之后,对于msgDestination.record.field = msgSource.record.field;格式的每个字段只有一行(注意:您可能有多个级别的记录)。
  4. 这仅适用于非重复发生的字段。对于重复出现的字段,您需要使用多部分地图。