1

Bitzalk 2010 では、次の構造を持つ入力から XML にマップする必要があります。

<REQUEST>
  <PROGRAM name="PROGRAM123">
    <INPUT>
      <INSTRUCT name="INSTR1">
         <FIELD name="FIELD11">VALUE1</FIELD>
         <FIELD name="FIELD12">VALUE2</FIELD>
         <FIELD name="FIELD13">VALUE3</FIELD>
       </INSTRUCT>
       <INSTRUCT name="INSTR2">
         <FIELD name="FIELD21">VALUE4</FIELD>
         <FIELD name="FIELD22">VALUE5</FIELD>
         <FIELD name="FIELD23">VALUE6</FIELD>
         <FIELD name="FIELD24">VALUE7</FIELD>
       </INSTRUCT>
       <INSTRUCT name="INSTR2">
         <FIELD name="FIELD21">VALUE8</FIELD>
         <FIELD name="FIELD22">VALUE9</FIELD>
         <FIELD name="FIELD23">VALUE10</FIELD>
         <FIELD name="FIELD24">VALUE11</FIELD>
       </INSTRUCT>
     </INPUT>
   </PROGRAM>
</REQUEST>

生成された XSD は次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="REQUEST" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="REQUEST" msdata:IsDataSet="true" msdata:Locale="en-US">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="PROGRAM">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="INPUT" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="INSTRUCT" minOccurs="0" maxOccurs="unbounded">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="FIELD" nillable="true" minOccurs="0" maxOccurs="unbounded">
                            <xs:complexType>
                              <xs:simpleContent msdata:ColumnName="FIELD_Text" msdata:Ordinal="1">
                                <xs:extension base="xs:string">
                                  <xs:attribute name="name" type="xs:string" />
                                </xs:extension>
                              </xs:simpleContent>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                        <xs:attribute name="name" type="xs:string" />
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>    
            </xs:sequence>
            <xs:attribute name="name" type="xs:string" />
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>

生成された構造は単に「一般的」であり、テーブル ループ Functoid を使用して Biztalk にマップする必要がありました。私はこのソリューションから情報を得ました: http://hestia.typepad.com/flatlander/2007/01/mapping_fixed_e.html しかし、これは私にとって非常に面倒に思えます (いくつかの定数値を持つ 40 のフィールドがあります)。

もう 1 つの可能性は、XSLT を使用することです。しかし、私はそれについての経験がなく、Biztalk で (XSLT なしで) 直接マップすることを好みます。

XSD スキームを作成する可能性があるので、マップ エディターにすべてのフィールドを配置し、そこにマッピングを作成します (テーブル ループ Functoid を使用しません)。

アイデアやコメントをいただければ幸いです (答えが「XSLT を使用する」であっても)。

4

2 に答える 2

5

FWIWは、とにかく重要なマップにXSLTを使用することになります。

そして、BizTalkはとにかくあなたのためにXSLTを作成します:)

だからお勧めします:

  • BizTalkマッパーを使用してできる限り最善を尽くします(REQUEST、PROGRAM、INPUT、およびINSTRUCTはマップ可能のようです)
  • プロジェクトをコンパイルします
  • .btmVisual Studioのソリューションエクスプローラーでファイルをクリックし、上部にある[すべてのファイルを表示]を選択します。これで、隠しファイルが表示されますSameFileName.btm.cs。このファイルには、BizTalkが生成するXSLTが含まれています。このXSLTをコピーして、新しいファイルに貼り付けます。これを.xsltとして保存します。二重引用符を一重引用符に置き換える必要があります。
  • 元の.btm(マップ)を再度開きます。スキーマ(グリッドプロパティ)間のマップの灰色の領域をクリックします。[カスタムXSLTパス]プロパティで、新しく作成した.XSLTファイルを選択します。

BizTalkのマッパーにより、XSLTで有利なスタートを切ることができ、基本的なXSLTを非常に簡単に取得できるはずです。1つの落とし穴-名前空間のエイリアスプレフィックス(通常はs1)を覚えていることを確認してください

編集:上記はBizTalk2009用であることに注意してください

編集

正気の予防策として、btmのビジュアルマップで、カスタムxsltを使用していることを忘れた場合に備えて、灰色のマッピング領域からすべてのマッピングラインとファンクトイドを手動で削除することをお勧めします。カスタムxsltを使用してマップをテストする場合、マッパーはxsltファイルが使用され、ビジュアルマップが無視されることを通知します。

于 2010-09-15T13:25:18.050 に答える
4

生成された xlst を取得するより簡単な方法 (および少なくとも bts2006 以降で一般的に推奨されている方法) は、ソリューション エクスプローラーで btm ファイルを右クリックし、[マップの検証] を選択することです。この出力は、xslt と拡張オブジェクトの両方をスタンドアロン ファイルに提供します (特定の Functoid と外部クラス参照は拡張オブジェクト ファイルを使用します)。

ここから、xslt 出力を保存して変更できます。.btm.cs ファイルを解析する必要はありません。また、属性や名前空間を囲む二重引用符がエスケープされていないなどの文字列エンコーディングの問題について心配する必要もありません。

于 2013-02-19T20:45:08.553 に答える