共用方式為


配置解決方案:逐步 API 使用

本主題描述如何使用金鑰 BAM API 類別來檢測應用程式。 在下列代碼段中,我們已使用常數,以及使用檢測應用程式所需的最低程式代碼來簡化範例程序代碼。

下列代碼段示範如何建立新的 Microsoft.BizTalk.Bam.EventObservation.EventStream 物件,特別是 Microsoft.BizTalk.Bam.EventObservation.DirectEventStream。 在此代碼段中,第一個參數會指定 BAM 主要匯入資料庫資料存放區的連接字串,而第二個參數會指定事件寫入數據存放區的頻率。

備註

BAM 僅支持連線到 SQL Server 資料存放區。 範例連接字串代表建立連接所需的最小連接字串。 您的設定可能需要在連接字串中指定其他參數。

FlushThreshold 值為 0 指定不會自動寫入事件,而且您必須呼叫 Flush 方法來寫入事件。 一的值會導致每次事件發生時立即記錄該事件。 大於一個的值會指定發生指定累積批次時寫入事件。 使用大於一的值有助於提升效能。

// Specify the DES connection string.  
const string connBAMPIT =  
   "Integrated Security=SSPI;server=.;database=BAMPrimaryImport";  
// Write the activity update data on every call.  
int flushThreshold = 1;  
// Create a DES instance  
EventStream es =   
   new DirectEventStream(connBAMPIT, flushThreshold);  

建立 [Microsoft.BizTalk.Bam.EventObservation.EventStream]/dotnet/api/microsoft.biztalk.bam.eventobservation.eventstream) 對象之後,您就可以開始活動,並使用收集的里程碑和數據開始更新活動數據表。 部署 BAM 活動時,會在 BAM 主要匯入資料庫中建立五個數據表。 如需開發程式的詳細資訊,請參閱 BAM 開發程式概觀

呼叫 Microsoft.BizTalk.Bam.EventObservation.EventStream.BeginActivity 方法會將記錄新增至bam_ PurchaseOrder_Activity數據表。 第一個參數包含要更新的活動名稱,而第二個參數則包含活動實例的標識碼。 標識元可以是任何字串,但它在活動的記錄集中必須是唯一的。

此時,記錄不包含任何數據。 Microsoft.BizTalk.Bam.EventObservation.EventStream.UpdateActivity 方法會使用擷取的事件數據來更新記錄。 再次指定活動和活動實例標識碼。 您可以傳遞 Microsoft.BizTalk.Bam.EventObservation.EventStream.UpdateActivity 方法名稱值組的數據項和活動中所定義的里程碑。 例如,我們的活動定義了里程碑MS_Received。 部署活動時,會在bam_PurchaseOrder_Activity表中為里程碑創建一個欄位。 Microsoft.BizTalk.Bam.EventObservation.EventStream.UpdateActivity 方法的呼叫會指定MS_Received和 DateTime.UtcNow 的名稱值組,以使用已接收的採購單日期來更新活動。

// When a purchase order is received, you call the  
// BeginActivity method in the receive application.  
// You can then capture the event data by calling   
// the UpdateActivity method.  
es.BeginActivity ("PurchaseOrder", "PO123");  
es.UpdateActivity ("PurchaseOrder", "PO123",  
                    "MS_Received", DateTime.UtcNow,   
                    "T_Customer", "Joe");  

在此範例中,我們會繼續執行第二個活動。 如需接續的詳細資訊,請參閱 活動接續

若要讓其他已裝設儀表的應用程式能夠更新 PurchaseOrder 活動,您可以呼叫 Microsoft.BizTalk.Bam.EventObservation.EventStream.EnableContinuation 方法。 呼叫會指定其他應用程式可以參與的活動、所追蹤之活動的實例標識碼,以及其他應用程式將用來更新活動的接續令牌。 記錄會被寫入 bam_ PurchaseOrder_continuations 資料表,以追蹤接續的狀態。 當此活動擴展到其他程序時,系統會針對每次呼叫 Microsoft.BizTalk.Bam.EventObservation.EventStream.EnableContinuation 方法(具有唯一的接續標記)寫入記錄。

這很重要

接續案例中的每個程式代碼區段都必須有自己的 Microsoft.BizTalk.Bam.EventObservation.EventStream.EndActivity 方法呼叫。 若未能這樣做,將導致殘留或孤立的活動記錄。

不過,只有第一個區段(使用實際活動標識符)具有 Microsoft.BizTalk.Bam.EventObservation.EventStream.BeginActivity 方法:所有其他區段(使用自己的唯一令牌標識符)不得呼叫 Microsoft.BizTalk.Bam.EventObservation.EventStream.BeginActivity 方法。

呼叫 Microsoft.BizTalk.Bam.EventObservation.EventStream.EnableContinuation 方法之後,其他元件可以使用指定接續令牌而非活動標識符的 Microsoft.BizTalk.Bam.EventObservation.EventStream.UpdateActivity 來更新採購單活動。 當其他元件完成其工作時,每個元件都必須使用接續令牌呼叫 Microsoft.BizTalk.Bam.EventObservation.EventStream.EndActivity ,以通知 BAM 基礎結構不會再發生任何事件。

這很重要

一旦呼叫 Microsoft.BizTalk.Bam.EventObservation.EventStream.EnableContinuation 方法之後,如果繼續活動的過程從未使用接續令牌呼叫 Microsoft.BizTalk.Bam.EventObservation.EventStream.EndActivity 方法,則該活動可能會變成孤兒。

// Continue the activity to the next process that has been  
// instrumented to handle the continuation.  
es.EnableContinuation("PurchaseOrder", “PO123”, “AP123”);  

最後,藉由呼叫指定活動名稱和活動標識符的 Microsoft.BizTalk.Bam.EventObservation.EventStream.EndActivity 方法來完成活動。 如果沒有未完成的接續,活動會移至 bam_ PurchaseOrder _completed 數據表。 如果接續活動無法完成,活動可能會變成孤立。

// Activity from this segment (PO submission) is completed  
es.EndActivity("PurchaseOrder", “PO123”);  

當活動繼續個別處理時,應用程式會藉由呼叫 Microsoft.BizTalk.Bam.EventObservation.EventStream.UpdateActivity 來檢測以更新活動數據表,並指定 Microsoft.BizTalk.Bam.EventObservation.EventStream.EnableContinuation 方法呼叫中所宣告的活動名稱和接續令牌。

備註

處理繼續活動的進程不會呼叫 Microsoft.BizTalk.Bam.EventObservation.EventStream.BeginActivity 方法。 Microsoft.BizTalk.Bam.EventObservation.EventStream.BeginActivity 方法會藉由在 BAM 主要匯入資料庫中建立數據表來建立活動的實例。 已存在活動的實例正在被更新,以便活動流程能夠繼續進行。

// update when the order is approved  
es.UpdateActivity ("PurchaseOrder", “AP123”, "MS_Approved",  
                    DateTime.UtcNow, "T_Product", "Widget");  
  
// update when the product is ready for shipment  
es.UpdateActivity ("PurchaseOrder", “AP123”,  
                   "MS_Ready", DateTime.UtcNow);  

此範例的工作流程的一部分,程式代碼會指定參考,在此案例中為特定類型的參考 - 相關活動。 藉由指定相關活動,您會從主要活動建立連結至其他感興趣的活動,讓使用者在 BAM 入口網站中檢視活動。

呼叫 Microsoft.BizTalk.Bam.EventObservation.EventStream.AddRelatedActivity 方法會將一筆記錄寫入 bam_PurchaseOrder_ActiveRelationships,以連結這些活動。

// These are shipped in two shipments.  
// Relates the current purchase order   
// instance to two shippings.  
// Note: only one direction  
es.AddRelatedActivity ("PurchaseOrder", “AP123”,  
                       "Shipping", “UPS101”);  
es.AddRelatedActivity ("PurchaseOrder", “AP123”,  
                       "Shipping", “UPS102”);  

若要結束持續的活動,請呼叫 Microsoft.BizTalk.Bam.EventObservation.EventStream.EndActivity 方法,並指定即將結束的活動的延續權杖。 如果沒有其他未完成的接續,則採購單活動會移至已完成的數據表。

// Activity from this segment (ApprovalProcess) is completed  
es.EndActivity("PurchaseOrder", “AP123”);  

完整程式代碼範例

//---------------------------------------------------------------------  
// File:BAMMinimalSample.cs  
//   
// Summary: Demonstrates how to instrument an application   
//using BAM APIs to track useful information.  
//  
// Sample: BAM Api Sample  
//  
//---------------------------------------------------------------------  
// This file is part of the Microsoft BizTalk Server SDK  
//  
// Copyright (c) Microsoft Corporation. All rights reserved.  
//  
// This source code is intended only as a supplement to Microsoft   
// BizTalk Server release and/or on-line documentation. See   
// these other materials for detailed information regarding Microsoft // code samples.  
//  
// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF  
// ANY KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A   
// PARTICULAR PURPOSE.  
//---------------------------------------------------------------------  
// This sample requires that you add the     
// Microsoft.BizTalk.Bam.EventObservation.dll to the   
// references in the Visual Studio Solution.  
  
using System;  
using System.Text;  
using Microsoft.BizTalk.Bam.EventObservation;  
  
namespace EventStreamSample  
{  
  
    static void Main(string[] args)  
    {  
        //   
  // The following code would appear in a purchase order  
   // receipt application.  
        //  
  
        // Specify the DES connection string.  
        const string connBAMPIT =  
            "Integrated Security=SSPI;server=.;database=BAMPrimaryImport";  
  
        // Write the activity update data on every call.  
        int flushThreshold = 1;  
  
        // Create an instance of the DirectEventStream.  
        EventStream es =   
               new DirectEventStream(connBAMPIT, flushThreshold);  
  
        // When a purchase order is received, you call the  
       // BeginActivity method in the receive application.  
  // You can then capture the event data by calling   
        // the UpdateActivity method.  
        es.BeginActivity ("PurchaseOrder", "PO123");  
        es.UpdateActivity ("PurchaseOrder", "PO123",  
                    "MS_Received", DateTime.UtcNow,   
                    "T_Customer", "Joe");  
  
   // Continue the activity to the next process that has been  
   // instrumented to handle the continuation.  
        es.EnableContinuation("PurchaseOrder", “PO123”, “AP123”);  
  
        // Activity from this segment (PO submission) is completed  
        // end activity is synonymous to IsCompleted = 1  
        es.EndActivity("PurchaseOrder", “PO123”);  
  
        //  
        // The following code would typically appear in a separate   
        // application that monitors the approval process  
        // (ApprovalProcess.exe)  
        //  
  
        // update when the order is approved  
        es.UpdateActivity ("PurchaseOrder", “AP123”, "MS_Approved",  
                            DateTime.UtcNow, "T_Product", "Widget");  
  
        // update when the product is ready for shipment  
        es.UpdateActivity ("PurchaseOrder", “AP123”,  
                            "MS_Ready", DateTime.UtcNow);  
  
        // These are shipped in two shipments.  
        // Relates the current purchase order  
        // instance to two shippings.  
        // Note: only one direction  
        es.AddRelatedActivity ("PurchaseOrder", “AP123”,  
                                "Shipping", “UPS101”);  
        es.AddRelatedActivity ("PurchaseOrder", “AP123”,  
                                "Shipping", “UPS102”);  
  
        // Activity from this segment (ApprovalProcess) is completed  
        es.EndActivity("PurchaseOrder", “AP123”);  
  
        // In another Shipping application, two shipments with  
            ID’s UPS101 and UPS102 will be created.  
    }  
}  

另請參閱

使用事件數據流實作 BAM 活動