Question

En 2010 Bitzalk je devrais carte à partir d'une entrée à un XML avec la structure suivante:

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

Le XSD généré était comme ceci:

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

La structure générée était juste « générale » et je dois utiliser la table en boucle functoid pour le cartographier Biztalk. J'ai les informations de cette solution: http://hestia.typepad.com /flatlander/2007/01/mapping_fixed_e.html Mais cela semble très lourd pour moi (j'ai 40 champs avec des valeurs constantes).

Une autre possibilité serait d'utiliser XSLT. Mais je n'ai aucune expérience avec elle et je préférerais la carte directement dans Biztalk (sans XSLT)

Y at-il la possibilité de créer un système XSD, donc j'aurais tous les champs de l'éditeur de cartes et créer la cartographie là-dedans (sans utiliser la table fonctoid en boucle).

Toutes les idées / commentaires seraient appréciés (même si la réponse est: « XSLT utilisation »)

Était-ce utile?

La solution

FWIW nous vent généralement en utilisant XSLT pour toutes les cartes non triviales de toute façon.

Et BizTalk crée le XSLT pour vous quand même:)

recommande:

  • Do mieux que vous pouvez avec le mappeur BizTalk (il semble DEMANDE, PROGRAMME, INPUT et démontrez sont mappable)
  • Compile votre projet
  • Cliquez sur votre fichier .btm dans la solution Explorer dans Visual Studio, puis sélectionnez « Afficher tous les fichiers » en haut. Vous devriez maintenant voir un fichier caché SameFileName.btm.cs. Dans ce fichier est le XSLT qui génère BizTalk. Copiez ce XSLT, et le coller dans un nouveau fichier - enregistrer comme .xslt. Vous devrez remplacer les guillemets avec des guillemets simples.
  • Ouvrez le .btm original (carte) à nouveau. Cliquez sur la carte zone grise entre les schémas (Propriétés de la grille). Dans le 'Custom XSLT Path' la propriété, sélectionnez votre fichier .xslt nouvellement créé.

mappeur de BizTalk vous a donné une longueur d'avance sur votre XSLT, et vous devriez être en mesure de ramasser assez facilement XSLT de base. Un Gotcha - assurez-vous que vous vous rappelez le préfixe d'alias d'espace de noms (généralement s1)

Edit: Notez que le est ci-dessus pour BizTalk 2009

Modifier

Par mesure de bon sens, sur la carte visuelle de la BTM, je vous suggère de supprimer manuellement toutes les lignes de cartographie et fonctoids de la zone de cartographie grise, si vous oubliez que vous utilisez maintenant xslt personnalisé. Si vous testez une carte avec xslt personnalisé, le cartographe ne délivre un rappel que le fichier xslt est utilisé et la carte visuelle est ignoré.

Autres conseils

Une façon plus simple pour obtenir le XLST généré (et généralement la méthode recommandée qui a travaillé depuis au moins bts2006) est un clic droit sur le fichier BTM dans votre explorateur de solution et choisissez « carte validate ». La sortie de ce que vous donne à la fois la xslt et les objets d'extension dans les fichiers autonomes (certains fonctoids et références de classe externes utilisent une extension de fichier des objets).

De là, vous pouvez enregistrer et modifier hors la sortie xslt - ne pas besoin d'analyser le fichier .btm.cs ou vous soucier des problèmes d'encodage de chaîne comme manquant un échappèrent guillemet autour d'un attribut ou un espace de nom ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top