Compartir vía


Combinar documentos XML

Uno de los mensajes que crea la orquestación OrderBroker es uno para actualizar la base de datos del historial de SQL Server. Este mensaje contiene campos del mensaje de pedido, así como del mensaje de pedido original. El mensaje contiene una cadena que representa el orden original. 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 colocarlo en otro mensaje con un mapa. 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 pedido original, el mensaje del historial base y devuelve el mensaje de historial completado. El código siguiente muestra las partes del método que inserta el mensaje como una 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 simplemente existe. Todavía no forma parte de un elemento .

Después de crear el nodo de atributo, el método busca el nodo donde asociará el atributo mediante una expresión XPath. Después de localizar 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 los mensajes en el código deben especificarse en los esquemas de esos mensajes.

Véase también

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