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 式を使用して属性をアタッチするノードを検索します。 ノードを見つけた後、メソッドはノードの属性コレクションに属性ノードを追加します。
注
OriginalMsg 属性は、最初は基本履歴メッセージには存在しませんが、もちろんスキーマで指定されています。 コード内のメッセージに追加する XML 要素は、それらのメッセージのスキーマで指定する必要があります。