3

マップしようとしているスキーマがあります。ソース側には、多くのフィールドを持つ構造があります。宛先側には、次のスキーマがあります。

<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 ドキュメントを渡す必要があります。さまざまなドキュメントを渡すことができるため、body は anytype を受け入れます。

しかし、BizTalk マップから XML ドキュメントを構築し、構造がない場合に body フィールドを介してこれを渡すことは可能ですか?

または、BizTalk オーケストレーションを介した別の方法はありますか?

4

3 に答える 3

0

どうしてもマップでこれを行う必要がある場合は、スクリプト Functoid を XSLT 呼び出しテンプレートと共に使用します。必要なパラメーターを渡して、その方法で任意のノードのドキュメントを作成できます。ただし、それはすぐに扱いにくくなります。

それを促進したり区別したりすることはできませんが、(オーケストレーションでメッセージ割り当て図形を使用して) そのように xpath 割り当てを実行できるはずです。

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

または、XmlDocument を使用していない場合

xpath(msg, "/ServiceResponse/ServiceResponseBody") = xpath(msg2, "//*")
于 2015-02-07T07:02:16.493 に答える