我使用windows Workflow fundation处理向导的许多步骤,并且在每步完成后,工作流持续并控制回用户进行新步骤,在某些情况下可能是用户未完成向导的所有步骤,在这种情况下我想要终止未完成的向导,为此我想使用超时时间,但我不知道如何使用工作流程。
另一个问题是我想为每个工作流实例设置当前用户的userId或用户名,但我不知道怎么做,请指导我,tnx;
答案 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。您不需要总是使用字符串。你可以传入你想要的任何类型。