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

另请参阅

业务流程管理解决方案的实施重点