Freigeben über


Zusammenführen von XML-Dokumenten

Eine der Meldungen, die von der OrderBroker-Orchestrierung erstellt werden, ist eine, um die SQL Server Verlaufsdatenbank zu aktualisieren. Diese Nachricht enthält Felder aus der Bestellungsnachricht sowie die Originalbestellungsnachricht. Die Originalbestellung ist in dieser Nachricht als Zeichenfolge enthalten. Dies passt zu dem Datentyp, den der Bestellungsverlauf in der Datenbank hat.

Es ist nicht möglich, eine Nachricht in eine Zeichenfolge zu konvertieren und diese Zeichenfolge über eine Zuordnung in eine andere Nachricht einzufügen. Die Orchestrierung verwendet die Hilfsfunktion InsertOrderBody, um die ursprüngliche Bestellnachricht als Zeichenfolge zur Basisverlaufsnachricht hinzuzufügen.

Die OrderBroker-Orchestrierung verwendet die Zuordnung ( CSR_OrderRequest_To_SQLHistoryInsert), um die Bestellnachricht in die Basisverlaufsmeldung zu konvertieren. Die Informationen für eine Bestellung werden als Attribute eines OrderLog-Elements angezeigt. Die Originalnachricht ist in einem weiteren Attribut dieses Elements enthalten.

Die InsertOrderBody-Methode akzeptiert die ursprüngliche Bestellnachricht und die Basisverlaufsmeldung als Argumente und gibt die abgeschlossene Verlaufsmeldung zurück. Im folgenden Code werden die Teile der Methode veranschaulicht, in denen die Nachricht als Zeichenfolge eingefügt wird:

public static XmlDocument InsertOrderBody( XmlDocument orderDoc,   
                                    XmlDocument historyInsertDoc)  
{  
...  
    XmlNode root = historyInsertDoc.FirstChild;  
  
    //Create a new attribute.  
    XmlNode attr = historyInsertDoc.CreateNode(XmlNodeType.Attribute,  
                                     "OriginalMsg", root.NamespaceURI);  
    attr.Value = orderDoc.OuterXml;  
  
    try  
    {  
        // XPath expression not shown for formatting reasons and  
        // replaces ".." in the following code  
        XmlNode destnode = historyInsertDoc.SelectSingleNode("..");  
        //Add the attribute to the document.  
        destnode.Attributes.SetNamedItem(attr);  
    }  
...  
  
    return historyInsertDoc;  
}  

Nachdem überprüft wurde, ob beide Argumente empfangen wurden, findet die InsertOrderBody-Methode den Stammknoten der Verlaufsaktualisierungsmeldung. Anschließend wird ein Knoten erstellt, der das OriginalMsg-Attribut enthält, und die ursprüngliche Auftragsnachricht dem Wert des Attributs zugewiesen. An diesem Punkt ist der Knoten einfach nur vorhanden. Er ist noch nicht Teil eines Elements.

Nach dem Erstellen des Attributknotens findet die Methode den Knoten, wo sie das Attribut über einen XPath-Ausdruck einfügt. Nachdem die Methode den Knoten gefunden hat, fügt sie der Attributauflistung des Knotens den Attributknoten hinzu.

Hinweis

Obwohl das OriginalMsg-Attribut zunächst nicht in der Basisverlaufsnachricht vorhanden ist, wird es natürlich im Schema angegeben. XML-Elemente, die Sie in Code Ihren Nachrichten hinzufügen, müssen in den Schemas dieser Nachrichten angegeben sein.

Weitere Informationen

Implementierungshighlights der Lösung für die Geschäftsprozessverwaltung