次の方法で共有


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 式を使用して属性をアタッチするノードを検索します。 ノードを見つけた後、メソッドはノードの属性コレクションに属性ノードを追加します。

OriginalMsg 属性は、最初は基本履歴メッセージには存在しませんが、もちろんスキーマで指定されています。 コード内のメッセージに追加する XML 要素は、それらのメッセージのスキーマで指定する必要があります。

こちらもご覧ください

ビジネス プロセス管理ソリューションの実装のハイライト