次の方法で共有


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 要素は、そのメッセージ用のスキーマで指定する必要があります。

参照

ビジネス プロセス管理ソリューションの実装の重要なポイント