合并 XML 文档
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 元素应在这些消息的架构中指定。