TrackingService (抽象類) → 工廠模式加入 Runtime
↓
需實作兩大抽象類:
1. TrackingProfile : 定義「何時」發送追蹤記錄 (容器)
2. TrackingChannel : 定義「如何」處理追蹤記錄 (輸出端)
TrackingWorkflowEvent 列舉定義)ActivityExecutionStatus 列舉定義)Execute 中呼叫 TrackData)Send(TrackingRecord):處理追蹤記錄 (持久化到 DB/檔案/列印)InstanceCompletedOrTerminated():工作流結束時呼叫 (清理資源)識別工作流實例關聯的追蹤通道,用於多租戶/多通道隔離。
從持久化媒體查詢追蹤資料,參考預設 SqlTrackingQuery 實作機制 (推測為呼叫預存程序)。
// 僅當活動 Priority 屬性為 High 時追蹤
ActivityTrackingCondition condition = new ActivityTrackingCondition("Priority", "High");
activityTrackPoint.Conditions.Add(condition);
// 從活動/流程擷取屬性值
activityTrackPoint.Extracts.Add(new ActivityDataTrackingExtract("To"));
activityTrackPoint.Extracts.Add(new WorkflowDataTrackingExtract("OrderId"));
// 預設 SqlTrackingService 使用 ProfileUpdated 事件
sqlTrackingService.ProfileUpdated += (sender, e) =>
{
// 套用自訂 Profile
};
// 自訂 TrackingService 可將 Profile 序列化為 XML 字串儲存
string profileXml = TrackingProfileSerializer.Serialize(customProfile);
// 儲存至資料庫/檔案
ActivityExecutionContext 與 Activity 基類均定義 protected void TrackData(object userData)。
MarkupSerializer 取得 XOMLView.SaveWorkflowImage 產生圖片參考 WorkflowManager 範例 (netfx3.com)
