0

我有来自 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 消息映射到 SystemB 消息。

但似乎一旦我应用地图,它就会msgComboWithAttach在执行转换之前清除预加载的消息,然后应用地图。然后,生成的消息包含在映射中复制的那些字段,并且不包含在消息分配pre-load中分配的其他段/字段。

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

4

2 回答 2

2

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

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

于 2014-08-06T23:31:21.343 回答
1

是的,这是预期的行为。

你想做的是

  1. 区分模式中的字段(目标和源,在您的情况下,如果我理解您在说什么,它们可能是相同的)。
  2. 首先让地图确保您的地图创建了您要使用一些虚拟值填充的字段。
  3. 之后有一个分配形状,格式中的每个字段只有一行 msgDestination.record.field = msgSource.record.field; (注意:您可能有多个级别的记录)。

这仅适用于非重复出现的字段。对于重复出现的字段,您需要改用多部分地图。

于 2014-08-06T23:22:00.697 回答