2009-06-26 96 views
7

在工作流程内我想处理和错误,如无法查找我想要分配任务的用户名。因此,用户名不存在,我将通过电子邮件通知管理员此事,将其记录到工作流程历史记录中,然后终止工作流程。以编程方式取消SharePoint工作流程

问题是,如何在工作流程内终止工作流程,就像我点击SharePoint网页上的“终止工作流程”按钮一样。

[更新] 我试过SPWorkflowManager.CancelWorkflow(),它确实取消工作流,但不是立即。会发生什么情况是取消运行的代码,但随后我的工作流继续创建下一个任务,然后在碰到下一个任务onTaskChanged活动时进入休眠状态。只有在进入睡眠状态后,工作流程才会被终止,而不是在调用CancelWorkflow时。

这引起了一个显而易见的问题,我不希望创建下一个任务。我打电话给CancelWorkflow,因为我希望它取消那里和那里。

+0

你有没有找到这个问题的答案? – 2009-07-07 18:16:45

+0

Afriad没有。您可以将其标记为取消中期工作流程,但不会随时停止。 – 2009-07-14 17:44:57

回答

0

我不确定这是否是最好的方法,但我只是发现错误,记录它,然后重新抛出它。这会导致列表中出现“错误发生”状态,并立即停止工作流程。

protected override ActivityExecutionStatus Execute(ActivityExecutionContext provider) 
{ 
    try 
    { 
     // do work 
     // ... 
    } 
    catch (Exception e) 
    { 
     // log the error to the history list 
     // ... 
     throw; 
    } 

    return ActivityExecutionStatus.Closed; 
} 
0

这是很老的问题,而是从自身取消工作流马上使用这段代码很简单:

SPWorkflowManager.CancelWorkflow(workflowProperties.Workflow); 
throw new Exception(); 

workflowProperties在这个例子中

public SPWorkflowActivationProperties workflowProperties = 
      new SPWorkflowActivationProperties(); 

CancelWorkflow方法会将工作流标记为“取消”,但不会将其停止,直到暂停(如等待ontaskchanged事件)或工作流中的例外。所以抛出新Exception()的下一个语句将停止工作流并将其状态设置为“已取消”。