WF 允許在 WorkflowRuntime 加入多個 TrackingService 衍生類,支援不同業務需求;但僅有一個追蹤接聽器 (TrackingListener) 接收所有事件通知。接聽器查詢各追蹤服務的設定檔 (TrackingProfile) 決定追蹤哪些工作流類型的哪些資訊子集。
TrackingProfile 本質是追蹤點集合,定義何時擷取何種資料。可透過圖形化工具設定(參考 TrackingProfileDesigner 範例)。
工作流實例以執行緒運行,引擎僅依賴 TrackingService。TrackingService 負責提供 TrackingProfile 與 TrackingChannel:前者定義監控哪些狀態,後者定義如何持久化擷取資訊。預設 Profile 記錄所有實例狀態、活動狀態、使用者追蹤行為。
由 TrackingPointCollection 構成。MatchingLocations 指定要追蹤的事件,ExcludedLocations 排除不需收集的事件。
實務上需追蹤發起角色、指派角色、處理人、時間等。在自訂 Activity 中呼叫 TrackData(object userData) 或 TrackData(string key, object userData) 觸發使用者追蹤事件。
workflowRuntime.AddService(new SqlTrackingService(connStr))SqlTrackingQuery.TryGetWorkflow 取得 SqlTrackingWorkflowInstanceWorkflowEvents、ActivityEvents、UserEvents
WorkflowTrackingRecord: 實例狀態變更(Created、Started、Completed、Suspended、Terminated 等)與時間。
ActivityTrackingRecord: 活動狀態(Executing、Closed、Faulting 等)、類型、ContextGuid、時間、名稱等。
UserTrackingRecord: 使用者自訂資料。
TrackingService 為抽象類,採工廠模式加入 Runtime。TrackingProfile (容器) 與 TrackingChannel (抽象類,Send 處理記錄持久化,InstanceCompletedOrTerminated 流程結束時呼叫)。TrackingProfile 可序列化為 XML 字串儲存(TrackingProfileSerializer)。SqlTrackingService 可用 ProfileUpdated 事件;自訂服務自行管理。TrackingCondition 篩選:如 ActivityTrackingCondition("Priority", "High") 僅追蹤高優先級活動;ActivityDataTrackingExtract("To") 擷取活動屬性值。Web 方式:序列化設計器標記 (MarkupSerializer) 為 XOML,呼叫 view.SaveWorkflowImage 生成圖片回傳。WinForm 參考 WorkflowManager 範例。
實例分析:StarterKit。