与xsd:anytype的BizTalk映射

时间:2015-01-28 20:24:58

标签: .net xml xsd biztalk biztalk-2013r2

我有一个我想要映射到的架构。在源端,我有一个包含很多字段的结构。在目的地方面,我有以下架构:

<xsd:element name="ServiceResponse">
  <xsd:sequence>
     <xsd:element ref="s:ServiceResponseHeader" />
     <xsd:element ref="s:ServiceResponseBody" />
  </xsd:sequence>
</xsd:element>
<xsd:element name="ServiceResponseHeader" type="s:HeaderType" />
<xsd:element name="ServiceResponseBody" type="xsd:anyType" />
<xsd:complexType name="HeaderType">
  <xsd:sequence>
     <xsd:element name="Timestamp" minOccurs="0" />
     .
     .
  </xsd:sequence>
</xsd:complexType>

其中包含以下示例文档:

<ServiceResponse>
  <ServiceResponseHeader>
    .
    .
  </ServiceResponseHeader>
  <ServiceResponseBody>
     <!-- XML message as anytype -->
  </ServiceResponseBody>
</ServiceResponse>

我正在创建一个地图,用于将字段从我的架构传输到此架构。地图将字段传输到ServiceResponseHeader。但是,对于正文,我需要传入一个XML文档。正文接受任何类型,因为可以传入各种文档。

但是,从BizTalk映射中,是否可以构造XML文档并在没有结构时通过body字段传递?

或者是否有其他方式通过BizTalk业务流程?

3 个答案:

答案 0 :(得分:0)

最有可能的是,您需要做的就是使用从源的根元素链接到输出中的Mass Copy Functoid。

答案 1 :(得分:0)

您可以将元素提升为可分辨字段,并在地图后的业务流程消息分配形状中将其分配。您分配的数据可以是业务流程中的消息或变量,包括另一个映射的输出。

答案 2 :(得分:0)

如果您真的必须在地图中执行此操作,请使用带有XSLT调用模板的脚本功能块。您可以传入任何您想要的参数,并为任何节点构建文档。然而,这很快就会变得笨拙。

确实,您无法宣传或区分它,但您仍然可以像这样进行xpath分配(在Orchestration中使用消息分配形状):

xpath(msg, "/ServiceResponse/ServiceResponseBody") = varXmlDoc.OuterXml;

或者如果你没有使用XmlDocument

xpath(msg, "/ServiceResponse/ServiceResponseBody") = xpath(msg2, "//*")