Biztalk オーケストレーション内で使用される定義済みの XSD スキーマに基づいて新しいメッセージ インスタンスを作成するための最適なソリューションを探しています。
追加の投票は、明確で効率的な例を含む回答、または質の高い参照リンクを含む回答に行われます。
BizTalk オーケストレーションでメッセージの新しいインスタンスを作成する場合、いくつかのオプションがあります。
私が通常使用する3つについて説明し、回答の下部にいくつかのリンクを追加しました。
どちらが最適な方法であるかを定義する方法は、実際には状況によって異なります。XMLDocument メソッドは、いくつかの点で最も整頓されていますが、スキーマが変更された場合、知らないうちに壊れる可能性があります。Scott Colestockは、そのリスクを軽減するいくつかの方法について説明しています。
BizTalk マッピング メソッドはおそらく最も理解しやすく、スキーマが変更されても壊れません。小規模なスキーマの場合、これは適切な選択です。
これらすべてのメソッドについて覚えておくべき重要なことは、識別フィールドまたは昇格されたプロパティを使用する場合は、空の要素を作成して入力する必要があるということです。XLANG
欠落している要素に値を割り当てようとすると、実行時エラーが発生します (それらの要素がオプションである場合でも)。
最も簡単なオプションは、BizTalk マップを使用することです。作成されたインスタンスに何かをマップする必要はありません。
空の要素を作成するには、空の文字列パラメーターを使用して文字列連結 Functoid にマップするだけです。
メッセージの新しいインスタンスを作成する場合は、1 つのメッセージを同じスキーマの別のメッセージにメッセージ割り当て図形でコピーするだけです。
このために、型のオーケストレーション変数を作成しXMLDocument
、メソッドをmessage assignment
使用してLoadXML
、スキーマに一致する XML スニペットを読み込みます。XMLDocument
次に、目的の BizTalk メッセージに を割り当てます。
varXMLDoc.LoadXml(@"<ns0:SomeXML><AnElementToPopulate></AnElementToPopulate></SomeXML>");
msgYourMessage = varXMLDom;
を含めることで、AnElementToPopulate
プロパティ プロモーションを使用してそれに割り当てることができます。
これを行うための構文を頭の中で思い出すことはめったにありません。これは、構文を思い出すためのブログ エントリです。
ここの別のリンクでは、いくつかの方法について詳しく説明しています。
正確には何を探していますか?決まった内容(一種のテンプレートのようなもの)で新しいメッセージを作成しているだけですか?それとも何か他のものに基づいていますか?適切な回答を得るには、質問を明確にし、より具体的にする必要があります。
ある種のハードコードされたコンテンツ (またはそれに近い) を使用してゼロからメッセージを作成することを参照している場合、それらをヘルパー C# アセンブリに埋め込みリソースとして配置することが、非常にクリーンな方法であることがわかりました。
このチュートリアルは役立つかもしれません:
BizTalkServer2006チュートリアル-プロセスのウォークスルーBizTalkServer2006R2とWindowsCommunicationFoundationを使用したコントラクトファースト設計でサービスを作成する
新しいメッセージを作成するには、単純に新しいメッセージを作成し、System.Xml.XmlDocument
それをメッセージ変数に割り当てます。Load
またはメソッドを使用しLoadXml
て、スキーマに準拠する必要なコンテンツをロードできます。
さまざまなオプション間の基本的なパフォーマンスの比較については、私のブログ投稿「BizTalk でのメッセージ作成の楽しみ」を参照してください。
xsd.exe /classes /namespace:MyNamespace myschemafile.xsd
これを使用して、特定のスキーマ ファイルの c# クラスを生成できます。結果は、ソリューション プロジェクトの 1 つに含めることができる .cs ファイルです。
「メッセージ割り当てシェイプ」内で使用する場合、これらの生成されたクラスの 1 つをインスタンス化し、そのすべてのプロパティに値を入力してから、最後にメッセージ パーツをインスタンスに割り当てることができます。Biztalk は自動的にインスタンスを自動的にシリアル化します。ニースとOO。派手な xlang は必要ありません。
ハードコーディングされた XML を使用して一時 XmlDocument をロードしたり、独り占めして他の人が提案した documentSpecification.GetDocSchema().CreateXmlInstance() を使用したりするなど、他のソリューションのいくつかにはあまり運がありませんでした。