共用方式為


合併 XML 文件

OrderBroker協調流程所建立的其中一個訊息是更新SQL Server記錄資料庫。 此訊息包含來自訂單訊息的欄位,以及原始訂單訊息。 原始訂單會在此訊息中以字串顯示。 這符合資料庫中訂單歷程記錄的資料型別。

取得訊息、將它轉換為字串,並利用對應將它放置於另一個訊息中,是不可能做到的。 協調流程會使用 Helper 函式 InsertOrderBody,將原始順序訊息新增為字串至基底歷程記錄訊息。

OrderBroker協調流程會使用對應CSR_OrderRequest_To_SQLHistoryInsert,將訂單訊息轉換成基底歷程記錄訊息。 訂單的資訊會顯示為 OrderLog 元素的屬性。 原始訊息則會顯示為此項目的另一個屬性。

InsertOrderBody方法會採用原始順序訊息、基底歷程記錄訊息作為引數,並傳回已完成的歷程記錄訊息。 下列程式碼會顯示將訊息當成字串插入之方法的一部分:

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

確認它收到這兩個引數之後, InsertOrderBody 方法會尋找歷程記錄更新訊息的根節點。 然後,它會建立包含 OriginalMsg 屬性的節點,並將原始順序訊息指派給屬性的值。 此時,節點只是存在而已。 還不是項目的一部分。

在建立屬性節點之後,此方法會尋找將使用 XPath 運算式來附加屬性的節點。 找到該節點之後,此方法會將屬性節點加入至該節點的屬性集合中。

注意

雖然 OriginalMsg 屬性一開始不存在於基底歷程記錄訊息中,但當然是在架構中指定的。 在程式碼中加入至訊息的 XML 項目,應該在那些訊息的結構描述中予以指定。

另請參閱

商務程序管理解決方案的實作重點