EnvelopeProcessing (BizTalk Server サンプル)
EnvelopeProcessing サンプルは、BizTalk Server パイプラインでメッセージおよびメッセージ エンベロープを処理する方法を示します。 さらに、フラット ファイル メッセージを XML メッセージに変換する方法も示します。
このサンプルの処理
このサンプルでは、EnvInput フォルダを受信場所として構成します。 このフォルダにサンプル ファイル EnvelopeProcessing_in.txt のようなファイルを置くと、このファイル内のメッセージが BizTalk Server によって次の手順で処理されます。
受信場所フォルダ EnvInput からメッセージ ファイルを取得します。
受信パイプラインで、フラット ファイル逆アセンブラのパイプライン コンポーネントがフラット ファイル メッセージからヘッダーおよびトレーラを削除し、個別のメッセージに解析します。
MessageBox データベースで、メッセージがサブスクリプション フィルタを使用して送信ポートにルーティングされます。
送信ポートの送信パイプラインで、XML アセンブラ パイプライン コンポーネントがメッセージを XML エンベロープにラップし、送信アダプタ フォルダ EnvOutput に配置します。
このサンプルのデザイン方法とその理由
このサンプルのデザインでは、次の 2 つの基本要件に対応する必要がありました。
1 つ以上の注文書を含むフラット ファイル メッセージを受信して処理する。
1 つの注文書と送信者情報を含む 1 つの XML メッセージをディレクトリに送信し、バックエンド処理システムがメッセージを取得できるようにする。
これらの要件を満たすために、フラットファイルおよび XML スキーマとカスタム パイプラインの組み合わせが使用されました。 これらのデザイン要素と他のデザイン要素を次の表にまとめます。
デザイン要素 | 選択理由 |
---|---|
カスタム受信パイプライン | - フラット ファイル逆アセンブラーとフラット ファイル スキーマを使用して、受信発注書メッセージを変換します。 |
メッセージ ヘッダー、ボディ、およびトレーラ用フラット ファイル スキーマ | - XML スキーマと同じレコードとフィールドの特性 (構造体を含む) をすべて定義し、フラット ファイル インスタンス メッセージを同等の XML インスタンス メッセージに変換するために必要なすべてのフラット ファイル特性を定義するためのメカニズムを提供します (またはその逆も同様)。 - ヘッダー、本文、およびトレーラー スキーマは、本文を処理のために個別のチャンクに分割するために使用されます。 |
エンベロープ スキーマ | - 個々の発注書をヘッダーからの情報でラップするために使用されます。 |
サブスクリプション フィルター | - サブスクリプション フィルターは、プロパティ フィールドに基づいて 1 つ以上の条件を満たすメッセージをキャプチャすることで、実際のルーティングを実行します。 |
カスタム送信パイプライン | - XML アセンブラーとエンベロープ スキーマと本文スキーマの組み合わせを使用して、インスタンス メッセージを XML 形式に変換します。 |
このサンプルのデザインでは、次の事項を考慮する必要があります。
フラット ファイル スキーマ (PO.xsd) には、注文書フラット ファイルの構造を記述した拡張注釈が含まれています。 これらのファイルは手動で作成できますが、その多くはフラット ファイル ウィザードを使用して生成できます。
注文書 (PO.xsd) フラット ファイル スキーマは、Unqualified の elementFormDefault 値を使用します。 これにより正しい結果が得られますが、結果には予期しない xmlns 修飾が追加されます。 この問題を避けるには、Qualified の elementFormDefault を使用してください。
ヘッダーおよびトレーラ フラット ファイル スキーマは、先頭および末尾のデータをメッセージから分離するために使用します。 フラット ファイル逆アセンブラのヘッダー、ドキュメント、およびトレーラのスキーマ プロパティは、それぞれヘッダー、注文書、およびトレーラ スキーマに設定されていました。
XML エンベロープ スキーマは、ヘッダーと注文書の要素を組み合わせて 1 つの XML メッセージを作成します。 ヘッダー スキーマは、source フィールドを BTS.bts_system_properties 名前空間の SourceParty フィールドに昇格させます。エンベロープ スキーマによってこの同じ値が昇格され、送信メッセージに降格されます。
このサンプルの場所
<Samples Path>
\Pipelines\AssemblerDisassembler\EnvelopeProcessing\
次の表は、このサンプルのファイルとその目的を示しています。
ファイル | 説明 |
---|---|
Cleanup.bat | アセンブリの展開を解除し、グローバル アセンブリ キャッシュからアセンブリを削除するために使用されます。 送信ポートと受信ポートが削除されます。 必要に応じて、Microsoft インターネット インフォメーション サービス (IIS) の仮想ディレクトリが削除されます。 |
EnvelopeProcessing.btproj、EnvelopeProcessing.sln | このサンプルのプロジェクト ファイルとソリューション ファイルです。 |
EnvelopeProcessing_in.txt | サンプル入力ファイルです。 |
Header.xsd、PO.xsd、Trailer.xsd | フラット ファイルのヘッダー、ボディ、およびトレーラにそれぞれ対応するスキーマです。 |
XmlEnvelope.xsd | 送信 XML エンベロープ用スキーマです。 |
EnvReceivePipeline.btp、EnvSendPipeline.btp | フラット ファイル逆アセンブラおよび XML アセンブラのパイプライン コンポーネントをそれぞれ含む BizTalk Server 受信パイプライン ファイルと送信パイプライン ファイルです。 |
EnvelopeProcessingBinding.xml | ポート バインドなどの自動セットアップに使用されます。 |
Setup.bat | このサンプルをビルドおよび初期化するために使用されます。 |
このサンプルの使用方法
このサンプルは、独自のフラット ファイル処理ソリューションの基礎として使用してください。 このサンプルで使用されているデザイン要素の多くは、独自の要件に合うように拡張できます。 いくつかの例を次に示します。
各注文書の XML バージョンに加えてフラット ファイル バージョンを書き込むようにサンプルを強化します。 この操作を行うには、新しいカスタム送信パイプラインを作成し、フラット ファイル アセンブラを使用します。 フラット ファイル アセンブラで、フラット ファイルのヘッダー、注文書、およびトレーラのスキーマを指定します。 送信ポートで使用する場合は、ヘッダーおよびトレーラの情報を含む個別の注文書が作成されます。
注文書の情報を追加してエンベロープを強化します。 追加情報を送信メッセージに書き込むには、クイック昇格を使用して "出荷先" 名または他のフィールドを昇格させ、フィールドをエンベロープに追加し、エンベロープ フィールドを同じフィールドに昇格させます。 アセンブラを経由してメッセージが処理されるとき、昇格したプロパティは降格され、送信メッセージにコピーされます。
このサンプルのビルドと初期化
EnvelopeProcessing サンプルをビルドおよび初期化するには
コマンド ウィンドウで、次のフォルダーに移動します。
<サンプル Path>\Pipelines\AssemblerDisassembler\EnvelopeProcessing
次のアクションを実行するファイル Setup.bat を実行します。
次のフォルダに、このサンプルの入力フォルダ (EnvInput) と出力フォルダ (EnvOutput) を作成します。
<Samples Path>\Pipelines\AssemblerDisassembler\EnvelopeProcessing\
このサンプル用に Visual Studio プロジェクトをコンパイルおよび展開します。
BizTalk Server の受信場所、送信ポート、および受信ポートを作成しバインドします。
このサンプルでは、ポートの作成とバインド時に次の警告が表示されます。
Warning: Receive handler not specified for receive location "EnvelopeProcessing_RL"; updating with first receive handler with matching transport type. Warning: Host not specified for orchestration "EnvelopeProcessing"; updating with first available host.
これらの警告は、無視してもかまいません (インストールでの名前付け方法はユーザーによって異なる可能性があるため、ホスト名と受信ハンドラーはバインド ファイルから除外されています。)
受信場所を有効にし、送信ポートを開始します。
Note
このサンプルを実行する前に、ビルドと初期化のプロセス中に BizTalk Server でエラーが報告されていないことを確認する必要があります。
Note
Setup.bat を実行せずにこのサンプルでプロジェクトを開いてビルドする場合は、まず、.NET Framework厳密名ユーティリティ (sn.exe) を使用して厳密な名前キー ペアを作成する必要があります。 このキー ペアを使用して、結果のアセンブリに署名します。
Note
Setup.bat によって行われた変更を元に戻すには、Cleanup.bat を実行します。 Setup.bat を 2 回目に実行する場合は、その前に Cleanup.bat を実行してください。
このサンプルの実行
EnvelopeProcessing サンプルを実行するには
EnvelopeProcessing_in.txt ファイルを EnvInput フォルダにコピーします。
3 つの .xml ファイルが EnvOutput フォルダに作成されていることを確認します。 これらの .xml ファイルの名前はメッセージ ID GUID に基づいて付けられます。 これらのファイルには、入力ファイルから抽出され、エンベロープでラップされたメッセージが含まれています。
このサンプルで使用されるクラスまたはメソッド
Setup.bat および Cleanup.bat の 2 つの構成スクリプトは、次の管理用 Windows Management Instrumentation (WMI) スクリプトに依存しています。
Start Send Port\StartSendPort.vbs
Enable Receive Location\EnableRecLoc
Remove Send Port\RemoveSendPort
セットアップおよびクリーンアップのバッチ ファイルでは、次のように BTSTask を使用します。
バインド ファイルを適用し、アプリケーション、ポート、およびバインドを作成するための BTSTask ImportBindings
FlatFileReceiveApplication を削除する BTSTask RemoveApp