BAM API (BizTalk Server サンプル)
BAM API サンプルは、BAM API の呼び出しをアプリケーションに組み込んで、監視できるキー情報を保存する方法を示しています。
このサンプルの処理
このサンプルは、単純な購入のシナリオを実装します。 注文書の生成、各注文書の処理、出荷、および請求書の作成と処理を行います。 このサンプルを実行すると、BAM アクティビティが作成および更新され、注文書と請求書の詳細と処理が反映されます。
このサンプルをデザインした方法とその理由
このサンプルは、BAM を使用して、BizTalk オーケストレーションではないアプリケーションの情報を保存する方法を示すためにデザインされました。 アプリケーションは単純ですが、実稼働環境のアプリケーションでも使用できる BAM のいくつかの側面が示されています。 これらには、次のものが含まれます。
単一のアクティビティを構成する複数のスレッド
2 つのアクティビティの間でリレーションシップの作成
別の ID を使用して同じアクティビティにアクセスできるようにする Continuation の使用
BAM API サンプルは、3 つのメイン クラスで構成されます。注文書を処理するためのクラス、出荷を処理するためのクラス、および請求書を処理するためのクラスです。 各クラスには、キューからメッセージを取得し、メッセージを処理する RunOnce メソッドがあります。 各クラスには、 RunOnce メソッドを継続的に呼び出す Run メソッドもあります。
PoApplication クラスの RunOnce メソッドは、次の処理を行います。
注文書を表す XML メッセージを作成します。
BAMApiPo アクティビティを開始し、注文書および注文書の受信時刻に関する情報をアクティビティに追加します。
適宜、注文書を承認または拒否します。
BAMApiPo アクティビティを更新して注文書の状況 (承認または拒否) を記録します。
発注書が受け入れられた場合、 RunOnce メソッドは次の処理も行います。
出荷されるパッケージを表す XML メッセージを作成し、出荷のキューにメッセージを追加します。
注文書を表す XML メッセージを、請求書に含める注文書のキューに追加します。
BAMApiPo アクティビティの Continuation を有効にします。
BAMApiPo アクティビティを終了します。
ShipmentApplication クラスの RunOnce メソッドは、次の処理を行います。
出荷されるパッケージを表す XML メッセージをキューから取得します。
BAMApiPo アクティビティを更新してパッケージが出荷された時刻を記録します。
BAMApiPo アクティビティを終了します。
InvoiceApplication クラスの RunOnce メソッドは、次の処理を行います。
請求される注文書を表す XML メッセージをキューから取得します。
BAMApiInvoice アクティビティを開始します。
請求される注文書の BAMApiInvoice アクティビティと BAMApiPo アクティビティの間に BAM リレーションシップを作成します。
請求書と請求書の作成時刻に関する情報を BAMApiPo アクティビティに追加します。
請求書が支払われるまでの待機時間をシミュレートするためにしばらく間を置いて、BAMApiInvoice アクティビティに請求書の支払いが行われた時刻を追加します。
BAMApiInvoice アクティビティを終了します。
MainApp クラスの Main メソッドは、アプリケーションを初期化します。 その後、次の処理を実行します。
DirectEventStream オブジェクトを作成します。
複数のスレッドを開始し、各スレッドの POApplication オブジェクトの Run メソッドを呼び出します。
複数のスレッドを開始し、各スレッドの ShipmentApplication オブジェクトの Run メソッドを呼び出します。
複数のスレッドを開始し、各スレッドの InvoiceApplication オブジェクトの Run メソッドを呼び出します。
Global クラスは、作成するスレッドの数や拒否する発注書の割合など、サンプル アプリケーションで使用される定数を定義します。
このサンプルには、Visual Studio ソリューションに加えて、アクティビティを定義する Microsoft Excel ファイルも含まれています。
このサンプルの場所
このサンプル <は、サンプル パス>\BAM\BamApiSample にあります。
次の表は、このサンプルのファイルとその目的を示しています。
ファイル | 説明 |
---|---|
BamApiSample.cs | インストルメント化されたアプリケーション。 |
BamApiSample.csproj | インストルメント化されたアプリケーション プロジェクト。 |
BamApiSample.sln | インストルメント化されたアプリケーション ソリューション。 |
BamApiSample.xls | BAM 定義スタイルシート。 |
Cleanup.bat | 展開されたサンプル ファイルを削除するバッチ ファイル。 |
Input.txt | インターセプタ構成入力のサンプル。 |
InterceptorConfig.cs | API サンプルのインターセプタ構成コード。 |
InterceptorConfig.csproj | インターセプタ構成プロジェクト。 |
Invoice_config.xml | Invoice インターセプタ構成。 |
Invoice_interceptor.bin | シリアル化された Invoice インターセプタ。 |
PurchaseOrder_config.xml | PurchaseOrder インターセプタ構成。 |
PurchaseOrder_interceptor.bin | シリアル化された PurchaseOrder インターセプタ。 |
Setup.bat | サンプル ファイルを展開して参加するバッチ ファイル。 |
Shipment_config.xml | Shipment インターセプタ構成。 |
Shipment_interceptor.bin | シリアル化された Shipment インターセプター。 |
BAM API サンプルを実行する
管理者としてコマンド プロンプトを開き、Samples Path>\BAM\ BamApiSample\setup.bat を実行<します。
Visual Studio を管理者として起動し、Samples Path>\BAM\ BamApiSample\BamApiSample.sln ソリューションを開<きます。
重要
BamApiSample.cs ファイル内の行
//#define Interceptor
をコメント アウトする必要があります。この行から "//" を削除しないでください。 BAM API サンプルでは、プリプロセッサ ディレクティブ内#if Interceptor
にないコードのみを使用します。ソリューションをビルドします。
サンプルパス>\BAM\BamApiSample\bin\debug\BamApiSample.exe を実行<します。
出力は次のようになります。
... New Purchase Order #17 Received 8 was shipped as pkg#87 New Purchase Order #18 Received. Shipping package pkg#87 via DHL 13 was Approved. 18 was Rejected. 17 was Rejected. 11 was shipped as pkg#114 16 wsas Rejected. Shipping package pkg#114 via DHL Invoice #5 send for {2 5 1 9 4 8 11 } Package pkg#49 was delivered New Purchase Order #19 Received. ...
1 分ほど経ったら、Ctrl キーを押しながら C キーを押すか、コマンド プロンプト ウィンドウを閉じて、BamApiSample プログラムを停止します。
結果の確認
SQL Server Management Studio を開きます。
SQL Server Management Studioで、サーバーを展開し、[データベース]、[BAMPrimaryImport]、[テーブル] の順に展開します。
dbo.bam_BAMApiInvoice_Activeを右クリックし、[テーブルを開く] をクリックします。 SQL Serverを使用している場合は、[上位 1000 行を選択] をクリックします。
bam_BAMApiInvoice_Active テーブルの内容が右側のウィンドウに表示されます。 テーブル内の各行は、開始されたが完了していない BAMApiInvoice アクティビティを表します。
dbo.bam_BAMApiPo_Completedを右クリックし、[テーブルを開く] をクリックします。 SQL Serverを使用している場合は、[上位 1000 行を選択] をクリックします。
bam_BAMApiPo_Completed テーブルの内容が右側のウィンドウに表示されます。 テーブルの各行は、完了した BAMApiPo アクティビティを表します。