Freigeben über


Arbitrary XPath Property Handler (BizTalk Server Sample)

Der Handler für beliebige XPath-Eigenschaften (BizTalk Server Beispiel) veranschaulicht, wie eine benutzerdefinierte Pipelinekomponente geschrieben wird, um bestimmte Eigenschaften für ein XML-Dokument hochzustufen, das an BizTalk Server übermittelt wird. Sie können die in dem Beispiel enthaltenen Funktionen dazu verwenden, benutzerdefinierte reguläre, Assembler- und Disassemblerkomponenten zu erstellen, mit denen XPath-Ausdrücke ausgewertet werden.

Ziel des Beispiels

Das Beispiel enthält ein zu verarbeitende XML-Dokument (Order Order, PO) DocInstance.xml. Im Beispiel werden die folgenden Schritte verwendet, um DocInstance.xml zu verarbeiten:

  1. DocInstance.xml wird von einem BizTalk Server Empfangenport abgerufen und von einer benutzerdefinierten Pipelinekomponente namens Arbitrary XPath Property Handler verarbeitet.

  2. Die Handlerkomponente der beliebigen XPath-Eigenschaft fördert alle <Price> - und <Quantity-Elemente> mit einem beliebigen XPath-Ausdruck, wie im PO-Schema definiert. Der XPath-Ausdruck enthält zusätzlich das Positionskonstrukt zur Verwendung mit mehrdeutigen untergeordneten Elementen des Stammelements des Bestellungsdokuments.

  3. Im Arbitrary XPath Property Handler wird der Nachrichtentyp ermittelt, und die Nachricht wird in den Nachrichtenkontext höhergestuft.

  4. Das XML-Dokument mit den höhergestuften Elementen wird dann zur weiteren Verarbeitung an eine Orchestrierung gesendet.

  5. In der Orchestrierung wird auf die höhergestuften Elemente im Bestellungsdokument zugegriffen und dann die Gesamtzahl von Positionen in der Bestellung berechnet.

  6. In der Orchestrierung wird ein neues Bestellungsdokument erstellt, das die Informationen aus der ursprünglichen Bestellung und die aktualisierte Gesamtzahl enthält.

  7. Das neue Bestellungsdokument wird in eine Datei im Verzeichnis \Output geschrieben.

Speicherort dieses Beispiels

<Beispielpfad>\Pipelines\ArbitraryXPathPropertyHandler

In der folgenden Tabelle werden die Dateien in diesem Beispiel samt Zweck beschrieben.

Datei(en) BESCHREIBUNG
ArbitraryXPathPropertyHandler.sln Benutzerdefinierte Projektmappendatei für die Pipelinekomponente
ArbitraryXPathPropertyHandler.resX Ressourcendatei
ArbitraryXPathPropertyHandlerComp.cs Implementierung der Hauptkomponente
AssemblyInfo.cs Assemblyinformationen
Cleanup.bat Beispielbereinigungsdatei
PromotingMap.cs Höherstufung von Eigenschaften als Implementierung der Zuordnung systemeigener CLR-Typen
PropertyAttributes.cs Benutzerdefinierte Attribute, benutzerdefinierter Eigenschaftendeskriptor und benutzerdefinierte ICustomTypePropertyDescriptor-Implementierung
SchemaMap.cs Schemazuordnung von Nachrichtentyp zu IDocumentSpec, damit Schemamehrdeutigkeiten aufgelöst werden können
Setup.bat Beispielpipelinekomponente erstellen und konfigurieren
VirtualStream.cs Implementierung des virtuellen Datenstroms
SeekableReadOnlyStream.cs Implementierung des suchbaren schreibgeschützten Datenstroms
ArbitraryXPathSample.sln Projektmappendatei der Beispielorchestrierung
CalculateTotalAmount.odx Beispielorchestrierung
PODocument.xsd Bestellungsschema
DocInstance.xml Instanz der Beispielbestellung

Erstellen und Initialisieren dieses Beispiels

Dieses Beispiel ist für die Ausführung in einer BizTalk Server-Umgebung konzipiert, in der SQL Server auf demselben Computer ausgeführt werden. Wenn Ihre Umgebung dieser Konfiguration nicht entspricht, müssen Sie den Handler für beliebige XPath-Eigenschaften (BizTalk Server Beispiel) so ändern, dass er auf den richtigen SQL Server Computer verweist.

Wichtig

In Setup.bat wird angenommen, dass C:\Windows Ihr Microsoft Windows-Installationsverzeichnis ist. Befindet sich die Windows-Installation in einem anderen Verzeichnis, müssen Sie die Datei ArbitraryXPathPropertyHandler.csproj ändern, damit sie auf die entsprechende Speicherposition der Assembly Microsoft.BizTalk.Component.Utilities im globalen Assemblycache verweist. Ändern Sie <im Reference-Element SYSTEMROOT> an den Speicherort, an dem Windows installiert ist (z. B. 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"  
/>  

Verwenden Sie das folgende Verfahren, um den Handler für beliebige XPath-Eigenschaften (BizTalk Server Beispiel) zu erstellen und zu initialisieren.

So erstellen und initialisieren Sie dieses Beispiel

  1. Ändern Sie in einem Befehlsfenster die Verzeichnisse (cd) in den folgenden Ordner:

    <Beispielpfad>\Pipelines\ArbitraryXPathPropertyHandler

  2. Führen Sie die Datei "Setup.bat" aus, von der folgende Aktionen ausgeführt werden:

    • Erstellen der Pipelinekomponente Arbitrary XPath Property Handler

    • Kopiert die erstellte Pipelinekomponente in das <Verzeichnis Installationspfad>\Pipelinekomponenten.

    • Erstellen der Sende- und Empfangsports.

    • Erstellen des Eingabe- und des Ausgabeverzeichnisses für dieses Beispiel

    • Installiert das Beispiel BizTalk Server Orchestrierung ArbitraryXPathSample.

    • Binden des Ports an die Beispielorchestrierung

    • Startet die Orchestrierung.

    Hinweis

    Beim Erstellen und bei der Initialisierung dürfen keine Fehler gemeldet werden. Treten Fehler auf, vergewissern Sie sich, dass jegliche erforderliche Software installiert ist und dass alle Microsoft-Erstellungstools im Pfad verfügbar sind.

    Hinweis

    Um von Setup.bat vorgenommene Änderungen rückgängig zu machen, müssen Sie zuerst den host instance über die BizTalk Server-Verwaltungskonsole beenden und neu starten. Führen Sie als Nächstes Cleanup.bat aus. "Cleanup.bat" müssen Sie ausführen, bevor "Setup.bat" ein zweites Mal ausgeführt wird.

Ausführen dieses Beispiels

Führen Sie das folgende Verfahren aus, um den Handler für beliebige XPath-Eigenschaften (BizTalk Server Beispiel) auszuführen.

So führen Sie dieses Beispiel aus

  1. Kopieren Sie die Bestellungsdatei DocInstance.xml in das Verzeichnis \Input. Die Bestellungsdatei wird von einem Empfangsport abgerufen, der die XML-Daten an die Pipelinekomponente Arbitrary XPath Property Handler sendet.

  2. Zeigen Sie den Inhalt des Verzeichnisses \Output an. Es wurde eine neue Datei erstellt. Diese Datei enthält alle Informationen aus der Datei DocInstance.xml, die Sie in das Verzeichnis \Input kopiert haben. Der Unterschied in der Datei besteht darin, dass nun das <TotalAmount-Element> mit dem Gesamtbetrag für den Po aufgefüllt wurde.

Kommentare

Kanonische XPath-Ausdrücke sind einfache Ausdrücke wie "/*[local-name()='element-name' und namespaceURI()='http://MyUri.org']/*[local-name()='element-name']/@*[local-name='attribut-name']".

Ein beliebiger (arbiträrer) XPath-Ausdruck kann so komplex sein wie "//element-name//*[local-name()='element-name' and position()=2]". Wenn tatsächlich, erhalten Sie einen Laufzeitfehler, der besagt, dass nicht kanonische XPath-Ausdrücke von BizTalk Server nicht unterstützt werden, wenn Ihr Schema einen nicht kanonischen XPath enthält, der im XPath-Text oder einer XPath-Eigenschaft verwendet wird. Eine Lösung zur Unterstützung arbiträrer XPath-Ausdrücke besteht darin, dass benutzerdefinierte Disassembler- und Assemblerkomponenten erstellt werden, die sowohl arbiträre XPath-Hauptteile als auch arbiträre XPath-Eigenschaftsausdrücke unterstützen.

In diesem Beispiel wird die folgende Sequenz von Schritten in der benutzerdefinierten Pipelinekomponente verwendet, wenn IComponent.Execute implementiert wird:

  1. Über den Datenstrom des Textteils der Eingangsnachricht wird ein virtueller suchbarer Datenstrom erstellt. (Weil die Eingangsnachricht umfangreich und der Datenstrom nicht suchbar sein kann, sollte sie einen geringen Speicherbedarf haben und die Möglichkeit bieten, Datenstrompositionen zu ändern.)

  2. Es werden eine neue ausgehende Nachricht und ein neuer Textteil (Hauptteil) für die Pipelinekomponente erstellt, dem neuen Textteil wird ein virtueller Datenstrom zugeordnet und Textteileigenschaften und Nachrichtenkontext werden geklont.

  3. Es wird ein Schema für die Eingangsnachricht abgerufen oder auf Basis von Schemas, die zur Entwurfszeit angegeben wurden, erstellt.

  4. Lädt den Stream in eine instance System.Xml. XmlDocument.

  5. Die höhergestuften Eigenschaften sowie die entsprechenden Felder werden durchlaufen, und diese werden in den Nachrichtenkontext der ausgehenden Nachricht höhergestuft oder geschrieben.

  6. Die ausgehende Nachricht wird zurückgegeben.

  7. Die ausgehende Nachricht wird in eine Datei geschrieben.

Weitere Informationen

Pipelines (Ordner für BizTalk Server-Beispiele)