BAM API (BizTalk Server 範例)
BAM API 範例示範如何將對 BAM API 的呼叫整合到應用程式,以儲存可供您監控的關鍵資訊。
此範例的用途
此範例實作簡單的採購實例。 它會產生訂單、處理每筆訂單、建立出貨、建立和處理發票。 隨著範例執行,它會建立與更新 BAM 活動,以反映訂單與發票的明細和處理狀況。
此範例的設計方式和原因
此範例旨在示範如何使用 BAM 來儲存來自非 BizTalk 協調流程之應用程式的資訊。 雖然應用程式是簡易的應用程式,卻示範了在實際執行應用程式中可能會用到的 BAM 的數個層面。 這些選項包括:
構成單一活動的多個執行緒
建立兩個活動之間的關係
使用接續以允許使用不同的 ID 存取相同的活動
BAM API 範例包含三個主要類別:一個處理採購單、一個處理出貨,另一個處理發票。 每個類別都有 RunOnce 方法,可從佇列擷取訊息,然後處理訊息。 每個類別也有一個 Run 方法,會持續呼叫 RunOnce 方法。
PoApplication類別的RunOnce方法會執行下列動作:
建立代表訂單的 XML 訊息。
開始 BAMApiPo 活動,並將訂單和訂單收到時間相關資訊新增到活動。
核准或拒絕訂單。
更新 BAMApiPo 活動以記錄訂單狀態 (已接受或已拒絕)。
如果已接受採購單, RunOnce 方法也會執行下列動作:
建立代表要出貨之包裝的 XML 訊息,並將該訊息新增到出貨佇列。
將代表訂單的 XML 訊息新增到訂單佇列,以包含在發票中。
為 BAMApiPo 活動啟用接續。
結束 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 檔案。
可在何處找到此範例
您可以在範例 Path > \BAM\BamApiSample 中找到此範例 <。
下表顯示此範例中的檔案,並描述其用途。
檔案 | 描述 |
---|---|
BamApiSample.cs | 檢測的應用程式。 |
BamApiSample.csproj | 檢測的應用程式專案。 |
BamApiSample.sln | 檢測的應用程式方案。 |
BamApiSample.xls | BAM 定義樣式表。 |
Cleanup.bat | 移除所部署範例檔的批次檔。 |
Input.txt | 範例攔截器組態輸入。 |
InterceptorConfig.cs | API 範例的攔截器組態程式碼。 |
InterceptorConfig.csproj | 攔截器組態專案。 |
Invoice_config.xml | 發票攔截器組態。 |
Invoice_interceptor.bin | 序列化發票攔截器。 |
PurchaseOrder_config.xml | 訂單攔截器組態。 |
PurchaseOrder_interceptor.bin | 序列化訂單攔截器。 |
Setup.bat | 用來部署和登錄範例檔的批次檔。 |
Shipment_config.xml | 出貨攔截器組態。 |
Shipment_interceptor.bin | 已序列化的出貨攔截器。 |
執行 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 程式。
View the results
開啟 [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 活動。