Compartir a través de


Combinar documentos XML

Uno de los mensajes que crea la orquestación OrderBroker es uno para actualizar la base de datos de historial de SQL Server. Este mensaje contiene campos del mensaje de pedido así como del mensaje de pedido original. El pedido original aparece en este mensaje en forma de cadena. Esto coincide con el tipo de datos del historial de pedidos de la base de datos.

No es posible tomar un mensaje, convertirlo en una cadena y situarlo en otro mensaje con una asignación. La orquestación usa una función auxiliar, InsertOrderBody, para agregar el mensaje de pedido original como una cadena al mensaje del historial base.

La orquestación OrderBroker usa el mapa, CSR_OrderRequest_To_SQLHistoryInsert, para convertir el mensaje de pedido en el mensaje del historial base. La información de un pedido aparece como atributos de un elemento OrderLog . El mensaje original aparece como otro atributo de este elemento.

El método InsertOrderBody toma como argumentos el mensaje de orden original, el mensaje del historial base y devuelve el mensaje del historial completado. El siguiente código muestra las partes del método que insertan el mensaje en forma de cadena:

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;  
}  

Después de comprobar que recibió ambos argumentos, el método InsertOrderBody busca el nodo raíz del mensaje de actualización del historial. A continuación, crea un nodo que contiene el atributo OriginalMsg y asigna el mensaje de orden original al valor del atributo. En este punto, el nodo solamente existe. Aún no forma parte de un elemento.

Después de crear el nodo de atributo, el método encuentra el nodo donde adjuntará el atributo mediante una expresión XPath. Después de encontrar el nodo, el método agrega el nodo de atributo a la colección de atributos del nodo.

Nota

Aunque el atributo OriginalMsg no existe inicialmente en el mensaje del historial base, es, por supuesto, especificado en el esquema. Los elementos XML que agregue a sus mensajes en código se deben especificar en los esquemas para tales mensajes.

Consulte también

Aspectos destacados de la implementación de la solución de administración de procesos empresariales