我有一个工作流程,在某个时刻,需要递归触发。
我似乎无法弄清楚如何做到这一点。
我尝试了以下代码,但 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);
}
答案 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。