共用方式為


使用 SqlTrackingQuery 查詢 SqlTrackingService 資料

SqlTrackingQuery 類別提供方法和屬性,您可用來存取存放在 SqlTrackingService 資料庫中的某種追蹤資料。 這些資料的存取是由 SqlTrackingWorkflowInstance 物件提供。 您可以呼叫 TryGetWorkflow 方法,嘗試取得特定工作流程執行個體的 SqlTrackingWorkflowInstance。 您也可以選擇呼叫 GetWorkflows 方法來取得 SqlTrackingWorkflowInstance 物件的集合,這些物件會對應到工作流程執行個體,而這些執行個體中的追蹤資料會符合做為參數傳遞至該方法的 SqlTrackingQueryOptions 物件中所包含的一組查詢參數。 如需可用追蹤資料的詳細資訊,請參閱 SqlTrackingWorkflowInstance 類別。 如需您可執行哪一種查詢的詳細資訊,請參閱 SqlTrackingQueryOptions 類別。

使用 SqlTrackingQuery

您可以透過傳遞追蹤資料庫的連線字串,來建立 SqlTrackingQuery 類別的執行個體。 然後呼叫 TryGetWorkflowGetWorkflows 方法擷取 SqlTrackingWorkflowInstance 物件或 SqlTrackingWorkflowInstance 物件的集合。 ActivityEvents 屬性包含 ActivityTrackingRecord 物件的集合,這些物件包含工作流程中活動的追蹤資訊。 此外,您可以使用相同的程序,透過檢查 WorkflowEvents 集合中所包含的 WorkflowTrackingRecord 物件,來追蹤工作流程執行個體事件。 對於透過呼叫 TrackData 方法插入的使用者事件,UserTrackingRecord 物件會包含在 UserEvents 集合中,也在 SqlTrackingWorkflowInstance 類別中定義。

存取追蹤資料庫

下列範例示範如何使用 SqlTrackingQuery 物件存取 SqlTrackingService 追蹤資料庫。 在範例中會擷取 SqlTrackingWorkflowInstance,方法是呼叫 TryGetWorkflow 方法,並傳遞它所要工作流程的執行個體 ID。在完成後,此範例會列舉 WorkflowEvents 集合並輸出包含在每個 WorkflowTrackingRecord 中的輸出資訊。

注意

若要使用 SqlTrackingQuery 類別,您必須確定它可探索它要查詢的工作流程型別。 如果這些型別是在全域組件快取 (GAC) 或與應用程式相同的目錄中,則型別會自動解析。 否則,您必須提供自訂 Type 解析程式並處理型別的載入,以確保能夠正確的作業。

注意

如果您嘗試使用 SqlTrackingQuery 類別,且該類別所連接的 SQL Server 關閉或暫時無法使用,SqlTrackingQuery 類別會擲回 SqlException,且不會嘗試重新連線至資料庫。 您可以攔截這個例外狀況來實作您自己的重試邏輯。

static void GetInstanceTrackingEvents(Guid instanceId)
{
    SqlTrackingQuery sqlTrackingQuery = new SqlTrackingQuery(connectionString);

    SqlTrackingWorkflowInstance sqlTrackingWorkflowInstance;
    sqlTrackingQuery.TryGetWorkflow(instanceId, out sqlTrackingWorkflowInstance);

    Console.WriteLine("\nInstance Level Events:\n");

    foreach (WorkflowTrackingRecord workflowTrackingRecord in 
        sqlTrackingWorkflowInstance.WorkflowEvents)
    {
        Console.WriteLine("EventDescription : {0}  DateTime : {1}", 
            workflowTrackingRecord.TrackingWorkflowEvent, 
            workflowTrackingRecord.EventDateTime);
    }
}

下一個範例使用相同的方法,從 SqlTrackingWorkflowInstance 物件擷取活動層級事件。 但是,這個範例並非列舉 WorkflowEvents 集合,而是改用 ActivityEvents 集合。

static void GetActivityTrackingEvents(Guid instanceId)
{
    SqlTrackingQuery sqlTrackingQuery = new SqlTrackingQuery(connectionString);

    SqlTrackingWorkflowInstance sqlTrackingWorkflowInstance;
    sqlTrackingQuery.TryGetWorkflow(instanceId, out sqlTrackingWorkflowInstance);

    Console.WriteLine("\nActivity Tracking Events:\n");

    foreach (ActivityTrackingRecord activityTrackingRecord in 
        sqlTrackingWorkflowInstance.ActivityEvents)
    {
        Console.WriteLine(
            "StatusDescription: {0}  DateTime: {1} Activity Qualified ID: {2}",
            activityTrackingRecord.ExecutionStatus, 
            activityTrackingRecord.EventDateTime, 
            activityTrackingRecord.QualifiedName);
    }
}

請參閱

參考

SqlTrackingQuery
SqlTrackingService
SqlTrackingQueryOptions
SqlTrackingWorkflowInstance

概念

Windows 工作流程追蹤服務
使用 SqlTrackingService

其他資源

Simple Tracking Sample
Query Using SQLTrackingService Sample

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.