合并 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 元素。

另请参阅

业务流程管理解决方案的实现亮点