递归调用Windows工作流

时间:2009-12-09 16:04:23

标签: recursion workflow workflow-foundation

我有一个工作流程,在某个时刻,需要递归触发。

我似乎无法弄清楚如何做到这一点。

我尝试了以下代码,但 context 最终为null ??

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 个答案:

答案 0 :(得分:2)

这里的问题主要是这种情况下的发件人是CodeActivity而不是ActivityExecutionContext。所以这个代码在第一个障碍就失败了。

以下是可以执行以下操作的自定义活动示例: -

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;

    }
}

请注意,GetService的类型为IStartWorkflow

答案 1 :(得分:0)

您的发件人的类型为CodeActivity而非ActivityExecutionContext。您需要创建一个自定义活动并覆盖Execute方法,该方法将为您传递一个ActivityExecutionContext。