[英]Programmatically Cancel a SharePoint Workflow
在我想要处理的工作流内部和错误,例如无法查找我想要分配任务的用户名。 因此用户名不存在,我将通过电子邮件通知管理员,将其记录到工作流历史记录中,然后终止工作流。
问题是,如何从工作流内部终止工作流,就像我单击SharePoint网页上的“终止工作流”按钮一样。
[更新]我尝试过SPWorkflowManager.CancelWorkflow()确实取消了工作流程,但没有立即取消。 取消运行的代码会发生什么,但随后我的工作流程继续创建下一个任务,然后在下一个任务onTaskChanged活动时进入休眠状态。 只有一旦它进入睡眠状态,工作流程才会终止,而不是在调用CancelWorkflow时。
这导致了一个明显的问题,即我不希望创建下一个任务。 我正在调用CancelWorkflow,因为我希望它取消当时和那里。
这个MSDN线程有很多建议:
这是一篇博客文章,其中包含完全相同的信息: 取消SharePoint工作流程
最后,最具体地说,您需要使用静态方法: SPWorkflowManager.CancelWorkflow(SPWorkflow workflowInstanceToBeCancelled)
编辑
CancelWorkflow是一个静态类,所以我修改了调用。
我不确定这是否是最好的方法,但我只是抓住错误,记录它,然后重新抛出它。 这会导致列表中出现“Error Error”状态,并立即停止工作流程。
protected override ActivityExecutionStatus Execute(ActivityExecutionContext provider)
{
try
{
// do work
// ...
}
catch (Exception e)
{
// log the error to the history list
// ...
throw;
}
return ActivityExecutionStatus.Closed;
}
这是一个非常古老的问题,但是使用这段代码可以很容易地立即取消工作流程:
SPWorkflowManager.CancelWorkflow(workflowProperties.Workflow);
throw new Exception();
此示例中的workflowProperties是
public SPWorkflowActivationProperties workflowProperties =
new SPWorkflowActivationProperties();
CancelWorkflow方法将工作流标记为“取消”,但在暂停(例如等待ontaskchanged事件)或工作流中的异常之前不会停止它。 所以抛出new Exception()的下一个语句将停止工作流并将其状态设置为“Canceled”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.