Fusion de documents XML
L’un des messages créés par l’orchestration OrderBroker est un message pour mettre à jour la base de données d’historique SQL Server. Ce message contient des champs du message de commande, ainsi que du message de commande original. La commande originale apparaît dans ce message sous la forme d'une chaîne. Celle-ci correspond au type de données de l'historique de commande dans la base de données.
Il n'est pas possible d'extraire un message, de le convertir en chaîne, puis de placer celle-ci dans un autre message à l'aide d'un mappage. L’orchestration utilise une fonction d’assistance, InsertOrderBody, pour ajouter le message de commande d’origine en tant que chaîne au message d’historique de base.
L’orchestration OrderBroker utilise la carte , CSR_OrderRequest_To_SQLHistoryInsert, pour convertir le message de commande en message d’historique de base. Les informations relatives à une commande apparaissent en tant qu’attributs d’un élément OrderLog . Le message original apparaît en tant qu'autre attribut de cet élément.
La méthode InsertOrderBody prend comme arguments le message de commande d’origine, le message d’historique de base et retourne le message d’historique terminé. Le code suivant inclut les portions de la méthode qui insère le message sous la forme d'une chaîne :
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;
}
Après avoir vérifié qu’elle a reçu les deux arguments, la méthode InsertOrderBody recherche le nœud racine du message de mise à jour de l’historique. Il crée ensuite un nœud contenant l’attribut OriginalMsg et affecte le message de commande d’origine à la valeur de l’attribut. À ce stade, le nœud ne fait qu'exister. Il ne fait pas encore partie d'un élément.
Après avoir créé le nœud d'attribut, la méthode recherche le nœud auquel elle joindra l'attribut à l'aide d'une expression XPath. Après avoir localisé le nœud, la méthode ajoute le nœud d'attribut à la collection d'attributs du nœud.
Notes
Bien que l’attribut OriginalMsg n’existe pas initialement dans le message d’historique de base, il est bien sûr spécifié dans le schéma. Les éléments XML que vous ajoutez à vos messages dans le code doivent être spécifiés dans les schémas de ces messages.
Voir aussi
Caractéristiques de l’implémentation de la solution de gestion des processus d’entreprise