Domanda

In Bitzalk 2010 dovrebbe mappa da un ingresso ad un XML con la seguente struttura:

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

Il XSD generato era come questo:

<?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 struttura generata era solo "generale" e avrei dovuto utilizzare la tabella loop functoid di creare una mappa in BizTalk. Ho avuto le informazioni da questa soluzione: http://hestia.typepad.com /flatlander/2007/01/mapping_fixed_e.html Ma questo sembra molto ingombrante per me (ho avuto 40 campi con alcuni valori costanti).

Un'altra possibilità sarebbe quella di utilizzare XSLT. Ma io non ne ho alcuna esperienza con esso e io preferirei di mappare direttamente in BizTalk (senza XSLT)

C'è la possibilità di creare uno schema XSD, così avrei tutti i campi l'editor di mappe e di creare la mappatura in là (senza utilizzare la tabella loop functoid).

Tutte le idee / commenti sarebbe apprezzato (anche se la risposta è: "l'uso XSLT")

È stato utile?

Soluzione

FWIW generalmente finiscono utilizzando XSLT per le mappe non banali in ogni caso.

E BizTalk crea l'XSLT per voi in ogni caso:)

quindi consiglio:

  • Do nel miglior modo possibile con il mapper BizTalk (sembra RICHIESTA, PROGRAMMA, INPUT e istruire sono mappabili)
  • compilare il progetto
  • Fare clic sul file .btm in Esplora soluzioni in Visual Studio, quindi selezionare "Mostra tutti i file" in alto. Ora si dovrebbe vedere una SameFileName.btm.cs di file nascosto. In questo file è l'XSLT che BizTalk genera. Copia questo XSLT, e incollarlo in un nuovo file - Salva questo come .xslt. Avrai bisogno di sostituire le virgolette doppie con virgolette singole.
  • Apri il .btm originale (mappa) di nuovo. Clicca sulla zona grigia della mappa tra gli schemi (Proprietà griglia). Nel 'personalizzato XSLT Path' Proprietà, selezionare il file .xslt appena creato.

mapper di BizTalk ha dato un vantaggio iniziale sul vostro XSLT, e si dovrebbe essere in grado di raccogliere XSLT di base piuttosto facilmente. Un Gotcha - Assicurarsi che ti ricordi il prefisso dello spazio dei nomi alias (di solito S1)

Edit: Si noti che quanto sopra è per BizTalk 2009

Modifica

Come precauzione sanità mentale, nella mappa visiva del BTM, vi suggerisco di eliminare manualmente tutte le linee di mappatura e functoid dalla zona grigia mappatura, nel caso si dimentichi che ora si sta utilizzando XSLT personalizzato. Se si prova una mappa con XSLT personalizzato, il mapping non emettere un promemoria che il file XSLT viene utilizzato e la mappa visiva viene ignorato.

Altri suggerimenti

Un modo più semplice per ottenere il XLST generato (e in generale il metodo consigliato che ha lavorato almeno dal bts2006) è quello di fare clic destro sul file BTM nella soluzione Explorer e selezionare "mappa validate". L'uscita di questo ti dà sia la XSLT e gli oggetti di estensione nei file standalone (alcuni functoid e riferimenti di classe esterni utilizzano un'estensione di file oggetti).

Da qui è possibile salvare off e modificare l'uscita xslt - non hanno bisogno di analizzare il file .btm.cs o preoccuparsi di problemi di codifica stringa come manca un sfuggito virgolette intorno ad un attributo o un namespace ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top