首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

WF 框架監控篇(三):自訂 TrackingService 深度實作指南

     編輯:關於C語言

自訂 TrackingService 核心架構


TrackingService (抽象類) → 工廠模式加入 Runtime
    ↓
需實作兩大抽象類:
1. TrackingProfile  : 定義「何時」發送追蹤記錄 (容器)
2. TrackingChannel  : 定義「如何」處理追蹤記錄 (輸出端)

TrackingProfile 容器結構

  • WorkflowTrackPoint:流程層級事件觸發 (由 TrackingWorkflowEvent 列舉定義)
  • ActivityTrackPoint:活動層級事件觸發 (由 ActivityExecutionStatus 列舉定義)
  • UserTrackPoint:使用者自訂追蹤點 (在自訂 Activity Execute 中呼叫 TrackData)

TrackingChannel 核心方法

  • Send(TrackingRecord):處理追蹤記錄 (持久化到 DB/檔案/列印)
  • InstanceCompletedOrTerminated():工作流結束時呼叫 (清理資源)

TrackingParameters 用途

識別工作流實例關聯的追蹤通道,用於多租戶/多通道隔離。

自訂 TrackingQuery 實作

從持久化媒體查詢追蹤資料,參考預設 SqlTrackingQuery 實作機制 (推測為呼叫預存程序)。

TrackingProfile 關鍵設定細節

ActivityTrackingCondition 使用範例


// 僅當活動 Priority 屬性為 High 時追蹤
ActivityTrackingCondition condition = new ActivityTrackingCondition("Priority", "High");
activityTrackPoint.Conditions.Add(condition);

資料擷取設定


// 從活動/流程擷取屬性值
activityTrackPoint.Extracts.Add(new ActivityDataTrackingExtract("To"));
activityTrackPoint.Extracts.Add(new WorkflowDataTrackingExtract("OrderId"));

TrackingService 篩選器概念

  • MatchingLocation:定義觸發器 (針對 Activity/Workflow 狀態機)
  • UserTrackingLocation:定義常規需加入的資訊 (由 Activity 主動呼叫 TrackData 觸發)

掛載自訂 TrackingProfile


// 預設 SqlTrackingService 使用 ProfileUpdated 事件
sqlTrackingService.ProfileUpdated += (sender, e) => 
{
    // 套用自訂 Profile
};

// 自訂 TrackingService 可將 Profile 序列化為 XML 字串儲存
string profileXml = TrackingProfileSerializer.Serialize(customProfile);
// 儲存至資料庫/檔案

TrackData 方法位置

ActivityExecutionContext 與 Activity 基類均定義 protected void TrackData(object userData)。

圖形化追蹤實作方案

Web 環境 (HttpHandler)

  1. 序列化設計器標記 MarkupSerializer 取得 XOML
  2. 呼叫 View.SaveWorkflowImage 產生圖片
  3. Response 輸出圖片
  4. 參考:Start Kit、Jon Flanders Blog、ASP.NET Workflow Monitor Implementation

WinForms 環境

參考 WorkflowManager 範例 (netfx3.com)

實例分析:Start Kit

圖形化追蹤 Web 介面 WinForms WorkflowManager

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved