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 元素,應該在這些訊息的架構中指定。