Share via


使用使用者追蹤點追蹤範例

Download sample

這個範例說明如何使用 Windows Workflow Foundation 所提供的 SQL 追蹤服務來追蹤工作流程的執行。

工作流程執行階段會在執行工作流程時引發特定事件。追蹤服務可以攔截這些事件,並將其相關資訊儲存在可進行查詢的 SQL Server 資料庫內。

工作流程執行階段會引發以下類型的事件:

  • **工作流程執行個體層級事件。**當工作流程執行個體進入特定的狀態時,會引發這些事件。例如,當初始化工作流程執行個體或是當工作流程執行個體正在執行時,會引發事件。

  • **活動層級事件。**工作流程是由活動所組成,而每一個活動都有特定的生命週期。活動在其生命週期期間會經過多種狀態。當活動到達特定狀態時,便會引發事件。

  • **使用者追蹤的事件。**工作流程作者可建立自訂追蹤事件,並將其新增至工作流程的程式碼除外。

可以發出工作流程資料內容中的資料,並與事件一起提供給追蹤服務。

如果追蹤的是工作流程,您可能不需要用到所有狀態和活動的所有事件。您可以建立追蹤設定檔來指定需要用到的事件和資料。

撰寫自訂追蹤點

您可能想要在追蹤事件不會追蹤的工作流程執行中,追蹤某一點的一項資料。在這種情況下,您可以使用自訂追蹤點。您可以使用資料內容類別所提供的 TrackData 方法,來建立自訂追蹤點。TrackData 方法會接受物件的引數。這表示,您可以發出任何要追蹤的資料類型。在範例工作流程中,自訂追蹤點是在程式碼活動的程式碼處理常式中建立的。

建立自訂追蹤設定檔

此範例會示範如何建立自訂追蹤設定檔以追蹤使用者追蹤點。這個設定檔會插入到 SQL 追蹤資料庫中以追蹤指定的事件。追蹤設定檔是使用追蹤設定檔物件模型建立。

追蹤設定檔物件模型會提供一組類別,協助建立執行個體追蹤點、活動追蹤點,以及使用者追蹤點。每個追蹤點也都包含一組符合的位置。比對位置會描述要追蹤的事件 (依據追蹤點為執行個體追蹤點或活動追蹤點而有所不同),以及要追蹤的活動 (若是執行個體追蹤點,則為工作流程)。

要擷取的資料也可以在追蹤點中指定,此範例中並未指定任何資料擷取。

您可以使用下列程式碼來建立追蹤設定檔以追蹤使用者追蹤點:

TrackingProfile profile = new TrackingProfile();

ActivityTrackPoint trackPoint = new ActivityTrackPoint();
ActivityTrackingLocation location = new ActivityTrackingLocation(typeof(Activity));
location.MatchDerivedTypes = true;
foreach (ActivityExecutionStatus s in Enum.GetValues(typeof(ActivityExecutionStatus)))
{
    location.ExecutionStatusEvents.Add(s);
}

trackPoint.MatchingLocations.Add(location);
profile.ActivityTrackPoints.Add(trackPoint);
profile.Version = new Version("3.0.0.0");


// Adding a user track point to the tracking profile.
UserTrackPoint utp = new UserTrackPoint();

// Adding a user location to the track point. 
UserTrackingLocation ul = new UserTrackingLocation(typeof(string), typeof(CodeActivity));
ul.MatchDerivedActivityTypes = true;
utp.MatchingLocations.Add(ul);
profile.UserTrackPoints.Add(utp);


// Serialize the profile.
TrackingProfileSerializer serializer = new TrackingProfileSerializer();
StringWriter writer = new StringWriter(new StringBuilder());
serializer.Serialize(writer, profile);
string trackingprofile = writer.ToString();
InsertTrackingProfile(trackingprofile);

在上述程式碼範例中,最後四行指定如何將追蹤設定檔序列化為 XML 格式,然後儲存在追蹤資料庫中。經過序列化的追蹤設定檔如下所示:

<?xml version=\"1.0\" encoding=\"utf-16\" standalone=\"yes\"?>

<TrackingProfile xmlns=\"https://schemas.microsoft.com/winfx/2006/workflow/trackingprofile\" version=\"3.0.0.0\">

<TrackPoints> <ActivityTrackPoint>

<MatchingLocations>

<ActivityTrackingLocation>

<Activity>

<Type>System.Workflow.ComponentModel.Activity, System.Workflow.ComponentModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35</Type>

<MatchDerivedTypes>true</MatchDerivedTypes>

</Activity>

<ExecutionStatusEvents>

<ExecutionStatus>Initialized</ExecutionStatus>

<ExecutionStatus>Executing</ExecutionStatus>

<ExecutionStatus>Canceling</ExecutionStatus>

<ExecutionStatus>Closed</ExecutionStatus>

<ExecutionStatus>Compensating</ExecutionStatus>

<ExecutionStatus>Faulting</ExecutionStatus>

</ExecutionStatusEvents>

</ActivityTrackingLocation>

</MatchingLocations>

</ActivityTrackPoint>

<UserTrackPoint>

<MatchingLocations>

<UserTrackingLocation>

<Activity>

<Type>System.Workflow.Activities.CodeActivity, System.Workflow.Activities, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35</Type>

<MatchDerivedTypes>true</MatchDerivedTypes>

</Activity>

<Argument>

<Type>System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</Type>

<MatchDerivedTypes>false</MatchDerivedTypes>

</Argument>

</UserTrackingLocation>

</MatchingLocations>

</UserTrackPoint>

</TrackPoints>

</TrackingProfile>

追蹤設定檔是使用追蹤設定檔結構描述建立的。

將追蹤設定檔插入至 SQL 追蹤資料庫

追蹤設定檔會透過使用 UpdateTrackingProfile 預存程序插入到追蹤設定檔資料庫中。預存程序會儲存特定工作流程類型的設定檔。當執行階段針對該類型要求設定檔的追蹤服務時,追蹤服務便會傳回這個自訂設定檔,而不是預設的設定檔。

向工作流程主機註冊追蹤服務

使用下列程式碼,向工作流程執行階段註冊追蹤服務:

WorkflowRuntime workflowRuntime = new WorkflowRuntime();
workflowRuntime.AddService(new SqlTrackingService(connectionstring));
workflowRuntime.StartRuntime();

第二行程式碼會向工作流程執行階段註冊 SQL 追蹤服務。連線字串為追蹤資料庫的連線字串。

建立追蹤資料庫

Windows Workflow Foundation 所安裝的 SQL 服務會使用 Microsoft SQL Server 來儲存資訊。您可以針對這些工作使用 Microsoft SQL Server 2005 Express、SQL Server 2000 (含) 以後版本,或是 SQL Server 2000 Desktop Engine (MSDE)。

Windows Workflow Foundation 安裝程式不會安裝這些服務所需的資料庫,但是會安裝 SQL 指令碼來為這些服務建立及設定資料庫。

若要建立 SQL 追蹤資料庫

  1. 使用 Microsoft SQL Server 2005 Express、SQL Server 2000 (含) 以後版本,或是 SQL Server 2000 Desktop Engine (MSDE),透過下列 SQL 查詢陳述式建立一個名為 Tracking 的新資料庫:

    CREATE DATABASE Tracking

    注意:在工作流程應用程式中同時使用 SqlTrackingServiceSqlWorkflowPersistenceService 時,建議您最好針對持續性和追蹤使用單一資料庫。

  2. 在 SQL Query Analyzer 工作區中,於可用資料庫的清單中選取您在步驟 1 建立的資料庫。

  3. 在 [檔案] 功能表上,按一下 [開啟],並開啟 SQL 指令碼 %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<language>\Tracking_Schema.sql

  4. 按一下 [執行] 或按下 F5 執行查詢,以建立 SQL 追蹤服務資料表。

  5. 在 [檔案] 功能表上,按一下 [開啟],並開啟 SQL 指令碼 %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<language>\Tracking_Logic.sql

  6. 按一下 [執行] 或按下 F5 執行查詢,以建立 SQL 追蹤服務預存程序。

若要建置範例

  1. 按一下 [下載範例] 來下載範例。

    這樣會將範例專案擷取到本機硬碟上。

  2. 按一下 [開始],並依序指向 [程式集] 和 [Microsoft Windows SDK],再按一下 [CMD 殼層]。

  3. 移至範例的來源目錄。

  4. 在命令提示字元上,輸入 MSBUILD <方案檔名>

若要執行範例

  • 在 [SDK 命令提示字元] 視窗中,執行 UserTrackPoints\bin\debug 資料夾 (若是 VB 版本的範例,則是 UserTrackPoints\bin 資料夾) 中的 .exe 檔案,該資料夾位於此範例的主要資料夾之下。

請參閱

參考

SqlTrackingService
SqlTrackingQuery
SqlTrackingWorkflowInstance
ActivityEvents
ActivityTrackingRecord
WorkflowEvents
WorkflowTrackingRecord

其他資源

追蹤範例
簡單追蹤範例
使用 SQLTrackingService 查詢範例
EventArgs 追蹤範例
ConsoleTrackingService 範例
使用 SQLTrackingService 查詢範例
RuleActionTrackingEvent 範例
檔案追蹤服務與查詢範例
使用追蹤設定檔物件模型範例
SQL 資料維護範例
Windows Workflow Tracking Services

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.