合併 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 項目,應該在那些訊息的結構描述中予以指定。