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

WF 工作流動態更新詳解:運行時修改流程實例

     編輯:關於C#

Windows Workflow Foundation (WF) 的動態更新功能允許在工作流實例運行期間修改其結構(增刪活動、修改屬性/規則),且僅影響當前實例,不影響定義與未來實例。適用于緊急插入審批節點、臨時變更路由等場景。

適用時機

僅在以下宿主事件中可安全執行動態更新:

  1. WorkflowCreated:實例創建完成,未啟動。
  2. WorkflowSuspended:實例掛起未恢復。
  3. WorkflowIdled:實例空閒(如等待 DelayActivity 或外部事件)。

標準操作步驟

  1. 創建 WorkflowChanges 對象,傳入根活動(內部用 this,外部用 workflowInstance.GetWorkflowDefinition())。
  2. 獲取 TransientWorkflow 克隆副本,在其上修改(如 CompositeActivity.Activities.Add())。
  3. 調用 Validate() 驗證,無錯誤則調用 ApplyWorkflowChanges() 應用到運行中實例。

代碼示例:宿主程序中 WorkflowCreated 添加活動

static void workflowRuntime_WorkflowCreated(object sender, WorkflowEventArgs e)
{
    var wc = new WorkflowChanges(e.WorkflowInstance.GetWorkflowDefinition());
    var container = wc.TransientWorkflow.GetActivityByName("sequenceActivityContainer") as CompositeActivity;
    if (container != null)
    {
        container.Activities.Add(new PrintActivity());
        var errors = wc.Validate();
        if (errors.Count == 0)
            e.WorkflowInstance.ApplyWorkflowChanges(wc);
        else
            foreach (var err in errors) Console.WriteLine(err);
    }
}

阻止動態更新

設置工作流的 DynamicUpdateCondition 屬性為 false 或綁定條件表達式,若評估為 false 則拋出異常阻止更新。

注意事項

  • 動態更新不適合大幅度結構變更,建議重新設計新版本工作流。
  • 無需重新編譯、重啟工作流運行時。
  • 內部更新(活動代碼中)與外部更新(宿主程序)API 略有不同。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved