2009-12-09 28 views
1

我有一個工作流程,即在某一點,需要進行嵌套觸發。調用Windows工作流遞歸

我似乎無法弄清楚如何做到這一點。

我嘗試以下的代碼,但上下文最終被空?

private void codeTriggerChildren_ExecuteCode(object sender, EventArgs e) 
{ 
    ActivityExecutionContext context = sender as ActivityExecutionContext; 
    //context is null here?! 

    IStartWorkflow aWorkflow = context.GetService(typeof(ApprovalFlow)) as IStartWorkflow; 

    Dictionary<string, object> parameters = new Dictionary<string, object>(); 
    parameters.Add("Parm1", "foo"); 
    parameters.Add("Parm2", "bar"); 

    Guid guid = aWorkflow.StartWorkflow(typeof(ApprovalFlow), parameters); 
} 

回答

2

這裏主要的問題是,在這種情況下,發件人是CodeActivity不是ActivityExecutionContext。所以這個代碼在第一個障礙時失敗了。

這是自定義活動的一個例子,可以做你所追求的: - 該GetService的得到的IStartWorkflow類型

public class RecurseApproval : Activity 
{ 
    protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) 
    { 
     IStartWorkflow aWorkflow = executionContext.GetService(typeof(IStartWorkflow)) as IStartWorkflow; 

     Dictionary<string, object> parameters = new Dictionary<string, object>(); 
     parameters.Add("Param1", "Foo"); 
     parameters.Add("Param2", "bar"); 

     Guid guid = aWorkflow.StartWorkflow(typeof(ApprovalWorkflow), parameters); 

     return ActivityExecutionStatus.Closed; 

    } 
} 

注意。

+0

做任何事情,我該如何創建和代碼執行該活動?問題在於最初的工作流程需要將自己拆分爲幾個運行相同工作流程的子項目。 – CaffGeek 2009-12-09 17:37:45

+0

您將爲此自定義活動提供一些依賴項屬性,以便爲進入工作流的屬性提供資源。然後,您將使用平行或複製器活動來運行此活動,從而相應地配置屬性。更好的控制將需要相當棘手的自定義複合活動。 – AnthonyWJones 2009-12-09 19:55:42

0

您的發件人的類型CodeActivity不是ActivityExecutionContext。您需要創建一個自定義活動並覆蓋將傳遞給您一個ActivityExecutionContext的Execute方法。

+0

如何?我添加到工作流圖中的一個活動,我不能用它 – CaffGeek 2009-12-09 17:22:19