Condividi tramite


Unione di documenti XML

Uno dei messaggi creati dall'orchestrazione OrderBroker è quello di aggiornare il database di cronologia SQL Server. Questo messaggio contiene i campi del messaggio dell'ordine e il messaggio dell'ordine originale. L'ordine originale viene visualizzato nel messaggio in forma di stringa, corrispondente al tipo di dati relativi alla cronologia degli ordini nel database.

Non è possibile convertire un messaggio in una stringa e inserire tale stringa in un altro messaggio con una mappa. L'orchestrazione usa una funzione helper , InsertOrderBody, per aggiungere il messaggio di ordine originale come stringa al messaggio della cronologia di base.

L'orchestrazione OrderBroker usa la mappa , CSR_OrderRequest_To_SQLHistoryInsert, per convertire il messaggio di ordine nel messaggio della cronologia di base. Le informazioni per un ordine sono visualizzate come attributi di un elemento OrderLog . Anche il messaggio originale viene visualizzato come attributo di questo elemento.

Il metodo InsertOrderBody accetta come argomenti il messaggio di ordine originale, il messaggio della cronologia di base e restituisce il messaggio di cronologia completata. Nel codice riportato di seguito sono illustrate le parti del metodo che inserisce il messaggio come stringa:

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

Dopo aver verificato la ricezione di entrambi gli argomenti, il metodo InsertOrderBody trova il nodo radice del messaggio di aggiornamento della cronologia. Crea quindi un nodo contenente l'attributo OriginalMsg e assegna il messaggio di ordine originale al valore dell'attributo. A questo punto, il nodo esiste, ma non fa ancora parte di un elemento.

Dopo aver creato il nodo dell'attributo, il metodo individua il nodo a cui assocerà l'attributo mediante un'espressione XPath, quindi aggiunge il nodo dell'attributo all'insieme di attributi del nodo.

Nota

Anche se l'attributo OriginalMsg non esiste inizialmente nel messaggio della cronologia di base, è ovviamente specificato nello schema. Gli elementi XML aggiunti ai messaggi nel codice devono essere specificati negli schemi relativi a tali messaggi.

Vedere anche

Implementazione della soluzione di gestione dei processi di business