簡體   English   中英

Windows Workflow中的攔截/裝飾活動

[英]Intercepting/Decorating Activities in Windows Workflow

Windows Workflow Foundation是否提供了一種攔截或裝飾活動的方法,例如記錄? 例如,為每個活動入口和出口點創建日志(理想情況下包括活動名稱),而不修改所有現有項目代碼。

例如,我有一個工作流程,其中包含一個打印“Hello world”的活動。 在不修改XAML文件的情況下,我想捕獲活動的進入和退出。 我想在進入活動之前打印“輸入Hello World活動”,在活動打印出“Hello World”之后,我想打印“已完成的Hello World活動”。

Windows Workflow是否提供了掛鈎進入和退出活動的機制?


@ Richard210363已經在評論中添加了Windows Workflow Foundation支持此功能 - 請選擇關閉此問題的用戶是否可以考慮撤銷他們的決定,因為問題顯然使用相關框架有一個非常具體的答案?

我編寫了以下代碼,可以跟蹤所有工作流程和活動。

public class ActivityTracker : TrackingParticipant
{
    protected override void Track(TrackingRecord record, TimeSpan timeout)
    {            
        if (record != null)
        {
            if (record is WorkflowInstanceRecord)
            {
                WorkflowInstanceRecord instanceRecord = record as WorkflowInstanceRecord;
                Console.WriteLine("Workflow Record: Instance: {0} - State: {1} - Definition Identity: {2}", instanceRecord.ActivityDefinitionId, instanceRecord.State, instanceRecord.WorkflowDefinitionIdentity);
            }
            else if (record is ActivityStateRecord)
            {
                ActivityStateRecord instanceRecord = record as ActivityStateRecord;
                Console.WriteLine("Activity Record: Name: {0} - State: {1}", instanceRecord.Activity.Name, instanceRecord.State);
            }
        }            
    }
}

看一下工作流TrackingParticipant類。

它作用於工作流中的所有活動,類似於范圍內的AOP。

它會發出有關活動進入和退出的信息。

創建一個繼承自TrackingParticipant的類並覆蓋Track方法:

protected override void Track(TrackingRecord record, TimeSpan timeout)
    {
        ActivityStateRecord activityStateRecord = record as ActivityStateRecord;
        string CurrentActivityName = activityStateRecord.Activity.Name,
    }

然后在運行之前將跟蹤類附加到工作流程。

_workflowApplication.Extensions.Add(_yourWorkFlowTrackingClass);
_workflowApplication.Run();

您還可以將TrackingRecord轉換為WorkflowInstanceRecord。 在它們之間,ActivityStateRecord和WorkflowInstanceRecord提供了有關工作流及其活動的大量信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM