在特定时间后终止持久的工作流程

时间:2014-03-13 21:23:57

标签: workflow-foundation-4 workflow-activity

我使用windows Workflow fundation处理向导的许多步骤,并且在每步完成后,工作流持续并控制回用户进行新步骤,在某些情况下可能是用户未完成向导的所有步骤,在这种情况下我想要终止未完成的向导,为此我想使用超时时间,但我不知道如何使用工作流程。

另一个问题是我想为每个工作流实例设置当前用户的userId或用户名,但我不知道怎么做,请指导我,tnx;

2 个答案:

答案 0 :(得分:0)

您从工作流程外部取消或终止工作流程。您可以在创建WorkflowApplication的级别上完成工作。

假设您将工作流程作为这样的应用程序启动:

WorkflowApplication _wfApp = new WorkflowApplication(new YourWorkFlow(), inParams);
_wfApp.Run();

然后您将WorkflowApplication引用为wfApp。

因此,您可以设置计时器,然后在计时器触发时使用该引用来终止工作流程。

Thread.Sleep(TimeSpan.FromSeconds(1));

wfApp.Terminate(new ApplicationException("Terminating the workflow."));

您可以通过捕获工作流程已完成事件来检测终止。

wfApp.Completed = delegate(WorkflowApplicationCompletedEventArgs e)
{  Do your clean up code here }

请参阅http://msdn.microsoft.com/en-us/library/dd781832(v=vs.110).aspx

答案 1 :(得分:0)

关于您的第二个问题,您是否在询问如何在启动时将当前用户的userId或用户名传递到工作流程中?

如果是,则创建一个包含要使用的参数的字典,然后在运行工作流之前将其传递给WorkflowApplication对象。

IDictionary<string, object> inParams = new Dictionary<string, string>
            {
                {"UserID", "12345678" },
                {"UserName", "Bob" }
            };
WorkflowApplication _wfApp = new WorkflowApplication(new YourWorkFlow(), inParams);
_wfApp.Run();

您必须设置工作流,使其具有名为UserID的In Arguments和String类型的UserName。您不需要总是使用字符串。你可以传入你想要的任何类型。