Condividi tramite


Arbitrary XPath Property Handler (esempio di BizTalk Server)

Il gestore proprietà XPath arbitrario (BizTalk Server esempio) illustra come scrivere un componente della pipeline personalizzata per promuovere proprietà specifiche in un documento XML inviato a BizTalk Server. È possibile utilizzare le funzionalità contenute nell'esempio per creare componenti personalizzati regolari, assembler e disassembler per valutare le espressioni XPath.

Scopo dell'esempio

L'esempio include un documento XML dell'ordine di acquisto (PO) da elaborare, DocInstance.xml. L'esempio usa la procedura seguente per elaborare DocInstance.xml:

  1. DocInstance.xml viene recuperato da una porta di ricezione BizTalk Server e elaborata da un componente della pipeline personalizzato denominato Gestore proprietà XPath arbitrario.

  2. Il componente gestore delle proprietà XPath arbitrario promuove tutti gli <elementi Price> e <Quantity> con un'espressione XPath arbitraria, come definito nello schema po. L'espressione XPath contiene inoltre il costrutto di posizione da utilizzare con gli elementi figlio ambigui dell'elemento radice del documento di ordine di acquisto.

  3. Il componente Arbitrary XPath Property Handler determina il tipo di messaggio e lo alza di livello nel contesto del messaggio.

  4. Il componente invia quindi il documento XML con gli elementi alzati di livello a un'orchestrazione per un'ulteriore elaborazione.

  5. L'orchestrazione accede agli elementi alzati di livello nel documento e calcola il numero totale di articoli nell'ordine di acquisto.

  6. L'orchestrazione crea un nuovo documento di ordine di acquisto contenente le informazioni dell'ordine di acquisto originale e il totale aggiornato.

  7. Il nuovo documento di ordine di acquisto viene scritto in un file nella directory \Output.

Percorso dell'esempio

<Esempi Path>\Pipelines\ArbitraryXPathPropertyHandler

Nella seguente tabella sono riportati i file inclusi nell'esempio e ne viene descritto lo scopo.

File Descrizione
ArbitraryXPathPropertyHandler.sln File di soluzione del componente della pipeline personalizzato.
ArbitraryXPathPropertyHandler.resX File di risorse.
ArbitraryXPathPropertyHandlerComp.cs Implementazione del componente principale.
AssemblyInfo.cs Informazioni sull'assembly.
Cleanup.bat File di pulitura di esempio.
PromotingMap.cs Implementazione della promozione proprietà come mappa di tipi CLR nativi.
PropertyAttributes.cs Implementazione degli attributi personalizzati, il descrittore di proprietà e ICustomTypePropertyDescriptor.
SchemaMap.cs Mapping dello schema dal tipo di messaggio a IDocumentSpec per risolvere l'ambiguità dello schema.
Setup.bat Componente della pipeline di compilazione e configurazione di esempio.
VirtualStream.cs Implementazione del flusso virtuale.
SeekableReadOnlyStream.cs Implementazione del flusso di sola lettura ricercabile.
ArbitraryXPathSample.sln File di soluzione dell'orchestrazione di esempio.
CalculateTotalAmount.odx Orchestrazione di esempio.
PODocument.xsd Schema dell'ordine di acquisto.
DocInstance.xml Istanza dell'ordine di acquisto di esempio.

Compilazione e inizializzazione dell'esempio

Questo esempio è progettato per l'esecuzione in un ambiente BizTalk Server con SQL Server in esecuzione nello stesso computer. Se l'ambiente non corrisponde a questa configurazione, è necessario modificare il gestore proprietà XPath arbitrario (BizTalk Server Esempio) per puntare al computer SQL Server corretto.

Importante

Setup.bat presume che la directory di installazione di Microsoft Windows sia C:\Windows. Se Windows è installato in un'altra directory, è necessario modificare il file ArbitraryXPathPropertyHandler.csproj in modo che rifletta la posizione dell'assembly Microsoft.BizTalk.Component.Utilities nella Global Assembly Cache. Nell'elemento Reference modificare <SYSTEMROOT> nella posizione in cui è installato Windows, ad esempio C:\WINNT\.

<Reference  
  Name = "Microsoft.BizTalk.Component.Utilities"  
  AssemblyName = "Microsoft.BizTalk.Component.Utilities"  
  HintPath = "<SYSTEMROOT>\assembly\GAC\Microsoft.BizTalk.Component.Utilities\3.0.1.0__31bf3856ad364e35\Microsoft.BizTalk.Component.Utilities.dll"  
/>  

Usare la procedura seguente per compilare e inizializzare il gestore proprietà XPath arbitrario (BizTalk Server esempio).

Per compilare e inizializzare l'esempio

  1. In una finestra dei comandi modificare le directory (cd) nella cartella seguente:

    <Esempi Path>\Pipelines\ArbitraryXPathPropertyHandler

  2. Eseguire il file Setup.bat. Verranno eseguite le operazioni seguenti:

    • Compilazione del componente della pipeline Arbitrary XPath Property Handler.

    • Copia il componente della pipeline compilata nella <directory Percorso> di installazione\Componenti della pipeline.

    • Creazione delle porte di trasmissione e di ricezione.

    • Creazione delle directory di input e output utilizzate nell'esempio.

    • Installa l'esempio BizTalk Server orchestrazione ArbitrariaXPathSample.

    • Binding delle porte all'orchestrazione di esempio.

    • Avvio dell'orchestrazione.

    Nota

    Durante la compilazione e l'inizializzazione non dovrebbero essere segnalati errori. In caso di errori, verificare che tutte le applicazioni software necessarie siano installate e che gli strumenti di compilazione Microsoft siano disponibili nel percorso corretto.

    Nota

    Per annullare le modifiche apportate da Setup.bat, è necessario prima arrestare e riavviare l'istanza host dalla console di amministrazione BizTalk Server. Eseguire quindi Cleanup.bat. È necessario eseguire Cleanup.bat prima di eseguire Setup.bat una seconda volta.

Esecuzione dell'esempio

Usare la procedura seguente per eseguire il gestore proprietà XPath arbitrario (BizTalk Server esempio).

Per eseguire questo esempio

  1. Copiare il file dell'ordine di acquisto DocInstance.xml nella directory \Input. Il file verrà prelevato da una porta di ricezione, che trasmetterà i dati XML al componente della pipeline Arbitrary XPath Property Handler.

  2. Visualizzare il contenuto della directory \Output. Si noti che è stato creato un nuovo file contenente tutte le informazioni del file DocInstance.xml copiate nella directory \Input. La differenza nel file è che ora l'elemento <TotalAmount> è stato popolato con l'importo totale per il po.

Commenti

Le espressioni XPath canoniche sono espressioni semplici, ad esempio "/*[local-name()='element-name' e namespaceURI()='']/*[local-name(http://MyUri.org)='element-name']/@*[local-name='attribute-name']".

Un'espressione XPath arbitraria può essere complessa, ad esempio "//element-name//*[local-name()='element-name' and position()=2]". In caso contrario, verrà visualizzato un errore di runtime che indica che le espressioni XPath non canoniche non sono supportate da BizTalk Server se lo schema ha un XPath non canonico usato nel corpo XPath o in una proprietà XPath. Una soluzione per il supporto delle espressioni XPath arbitrarie consiste nel creare componenti disassembler e assembler personalizzati che supportano un corpo XPath arbitrario ed espressioni di proprietà XPath arbitrarie.

Questo esempio usa la sequenza di passaggi seguenti nel componente della pipeline personalizzata quando viene implementato IComponent.Execute :

  1. Creazione di un flusso virtuale ricercabile sul flusso della parte corpo del messaggio di input. Poiché il messaggio di input può avere dimensioni elevate e il flusso può essere non ricercabile, è consigliabile impostare un footprint di memoria di piccole dimensioni e avere la possibilità di cambiare posizione nel flusso.

  2. Creazione di un nuovo messaggio in uscita e di una nuova parte corpo per tale messaggio, assegnazione di un flusso virtuale alla nuova parte corpo, clonazione delle proprietà della parte corpo e del contesto del messaggio.

  3. Impostazione di uno schema per il messaggio di input o utilizzo di schemi specificati in fase di progettazione.

  4. Carica il flusso in un'istanza di System.Xml. XmlDocument.

  5. Analisi delle proprietà innalzate di livello e dei campi differenzianti e innalzamento di livello o scrittura nel contesto del messaggio in uscita.

  6. Restituzione del messaggio in uscita.

  7. Scrittura del messaggio in uscita in un file.

Vedere anche

Pipelines (cartella di esempi di BizTalk Server)