OrderBroker 业务流程创建的消息之一是更新 SQL Server 历史记录数据库。 此消息包含订单消息和原始订单消息中的字段。 这个消息中用一个字符串来表示原始顺序。 这与数据库中订单历史记录的数据类型匹配。
无法获取消息,将其转换为字符串,并将其置于具有地图的另一条消息中。 编排使用辅助函数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 元素。