Frage

In Bitzalk 2010 I von einem Eingang zu einem XML mit der folgenden Struktur abbilden sollte:

<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>

Der generierte XSD wie diese war:

<?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>

Die erzeugte Struktur war nur „allgemein“ und ich würde die Tabelle Looping Funktoids abzubilden es in Biztalk verwenden. Ich habe die Informationen aus dieser Lösung erhielt: http://hestia.typepad.com /flatlander/2007/01/mapping_fixed_e.html Dies scheint aber sehr umständlich für mich (ich habe 40 Felder mit einigen konstanten Werten).

Eine andere Möglichkeit wäre, XSLT zu verwenden. Aber ich habe keine Erfahrung mit ihm, und ich würde es vorziehen, es zur Karte direkt in Biztalk (ohne XSLT)

Gibt es die Möglichkeit, ein XSD-Schema zu schaffen, so dass ich alle Felder in dem Map-Editor und erstellen Sie die Zuordnung in dort haben würde (ohne die Tabelle Looping Funktoid zu verwenden).

Alle Ideen / Kommentare geschätzt würde (auch wenn die Antwort lautet: „Verwendung XSLT“)

War es hilfreich?

Lösung

FWIW wir aufzuwickeln im Allgemeinen mit Hilfe von XSLT für alle nicht-triviale Karten sowieso.

Und BizTalk erstellt die XSLT für Sie trotzdem:)

So würde empfehlen:

  • Do, so gut wie möglich mit dem BizTalk-Mapper (es scheint REQUEST, PROGRAM, INPUT und INSTRUCT mappable sind)
  • Übersetzen Projekt
  • Klicken Sie auf Ihrer .btm Datei im Solution Explorer in Visual Studio, und wählen Sie dann „Alle Dateien anzeigen“ an der Spitze. Sie sollten jetzt eine versteckte Datei SameFileName.btm.cs sehen. In dieser Datei ist die XSLT, dass BizTalk erzeugt. Kopieren Sie diesen XSLT, und fügen Sie ihn in eine neue Datei - Speichern Sie diese als .xslt. Hier finden Sie die doppelten Anführungszeichen mit einfachen Anführungszeichen ersetzen müssen.
  • Öffnen Sie die ursprüngliche BTM (Karte) wieder. Klicken Sie auf der Karte Grauzone zwischen dem Schema (Grid Eigenschaften). In der 'Custom XSLT-Pfad' Eigentum, wählen Sie Ihre neu erstellte .xslt Datei.

BizTalk des Mapper Sie hat einen Vorsprung auf Ihrer XSLT gegeben, und Sie sollten recht leicht basisch sein können XSLT abholen. Ein Gotcha - stellen Sie sicher, dass Sie den Namespace alias Präfix erinnern (in der Regel s1)

Edit: Beachten Sie, dass die oben ist für BizTalk 2009

Bearbeiten

Als geistige Gesundheit vorsorglich in der visuellen Karte der BTM, schlage ich vor, dass Sie manuell alle die Mapping-Linien und Funktoide aus dem Grauabbildungsbereich löschen, falls Sie vergessen, dass Sie jetzt benutzerdefinierte Xslt verwenden. Wenn Sie eine Karte mit benutzerdefinierten Xslt testen, der Mapper eine Erinnerung herausgibt, dass die XSLT-Datei verwendet wird und die visuelle Karte ignoriert.

Andere Tipps

Ein einfacher Weg, um die erzeugte XLST (und in der Regel der empfohlene Methode, die seit mindestens bts2006 gearbeitet hat) zu erhalten ist, Rechtsklick auf die BTM-Datei in Ihrer Projektmappe-Explorer und wählen Sie „Validate Karte“. Der Ausgang dieses gibt Ihnen sowohl die xslt und die Erweiterungsobjekte in eigenständige Dateien (bestimmte Funktoiden und externen Klassenreferenzen verwenden eine Erweiterung Objekte Datei).

Von hier aus können Sie sparen ab und die XSLT-Ausgabe ändern - nicht erforderlich, die .btm.cs Datei oder Sorgen über String-Codierung Probleme zu analysieren, wie fehlenden ein doppeltes Anführungszeichen um ein Attribut oder ein Namespace ... entkam

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top