2009-06-26 98 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()的下一個語句將停止工作流並將其狀態設置爲「已取消」。