XML ドキュメントのマージ
OrderBroker オーケストレーションによって作成されるメッセージの 1 つは、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 式で属性を追加するノードを検索します。 ノードを検出すると、このメソッドは、ノードの Attributes コレクションに属性ノードを追加します。
Note
OriginalMsg 属性は、最初は基本履歴メッセージには存在しませんが、もちろんスキーマで指定されています。 コードでメッセージに追加する XML 要素は、そのメッセージ用のスキーマで指定する必要があります。