我有来自2个不同系统(SystemA和SystemB)的2个相关传入消息,我只想基本上将几个字段从SystemA消息复制到SystemBmessage。
所以我的Construct Message形状如下所示:
消息分配形状中只包含此代码:
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 在地图中复制的那些字段,以及在消息分配预加载中分配的所有其他段/字段。
这是预期的行为,在这种情况下,我将不得不对地图中的所有段进行批量复制吗?或者有没有办法像我想要的那样预加载/复制邮件,然后只映射几个字段?
答案 0 :(得分:2)
是的,这是预期的行为,因为转换将创建新消息。您不能使用Xslt以这种方式修改文档。
Dijkgraaf的解决方案将起作用。或者,您可以使用Orchestration xpath()函数在Message中读取和设置特定值。请参阅:http://msdn.microsoft.com/en-us/library/ee268159(v=bts.10).aspx
答案 1 :(得分:1)
是的,这是预期的行为。
你想做的是
msgDestination.record.field = msgSource.record.field;
格式的每个字段只有一行(注意:您可能有多个级别的记录)。这仅适用于非重复发生的字段。对于重复出现的字段,您需要使用多部分地图。