2012-07-05 67 views
3

我一直在嘗試以編程方式停止工作流。 我已經閱讀了各種職位和MSDN,這可以通過更新 通過更新請求的異步操作狀態來完成。 但每次我更新請求。工作流卡在中間階段,如取消或暫停,不能達到最終狀態。客戶關係管理2011,以編程方式停止自定義工作流程

有什麼想法?

protected void ExecutePostAccountUpdate(LocalPluginContext localContext) 
    { 
     if (localContext == null) 
     { 
      throw new ArgumentNullException("localContext"); 
     } 

     string fetchXML = "<fetch mapping='logical' count='50' version='1.0'>" + 
          "<entity name='asyncoperation'>" + 
          "<filter>" + 
          "<condition attribute='regardingobjectid' operator='eq' value='" + 
          localContext.PluginExecutionContext.PrimaryEntityId + "' />" + 
          "</filter>" + 
          "</entity>" + 
          "</fetch>"; 
     EntityCollection col = localContext.OrganizationService.RetrieveMultiple(new FetchExpression(fetchXML)); 
     if (col.Entities.Count > 0) 
     { 
      AsyncOperation a = (AsyncOperation)col[0]; 
      a.StateCode = AsyncOperationState.Completed; 
      a.StatusCode = new OptionSetValue(32); 
      localContext.OrganizationService.Update(a); 



     } 

    } 
+0

您的意思是您試圖從該工作流程中的代碼中止工作流程,或者您的意思是,從外部中止工作流程,就像在單獨的一段代碼中一樣?可能值得發佈一些你到目前爲止的代碼示例。 – Alec 2012-07-05 10:58:13

+0

Hey alec,我添加了示例代碼,我試圖從工作流程外部放棄它,在這種情況下,我嘗試使用插件。謝謝 – Eranser 2012-07-05 11:16:12

+2

'StateCode'和'StatusCode'通常不會對通用更新做出太好的反應。你嘗試過發佈一個'SetStateRequest'嗎? – 2012-07-05 18:55:16

回答

0

看來你可以通過代碼取消發佈工作流程,根據this post

注意:這不一定會停止正在進行的工作流程,但會阻止啓動該類型的任何新工作流程。

const int WorkflowStatusDraft = 1; 
const int WorkflowStatusPublished = 2; 

public void PublishWorkflow(Guid workflowId) 
{ 
    SetStateWorkflowRequest publishRequest = new SetStateWorkflowRequest(); 
    publishRequest.EntityId = workflowId; 
    publishRequest.WorkflowState = WorkflowState.Published; 
    publishRequest.WorkflowStatus = WorkflowStatusPublished; 

    this.CrmService.Execute(publishRequest); 
} 

public void UnpublishWorkflow(Guid workflowId) 
{ 
    SetStateWorkflowRequest unpublishRequest = new SetStateWorkflowRequest(); 
    unpublishRequest.EntityId = workflowId; 
    unpublishRequest.WorkflowState = WorkflowState.Draft; 
    unpublishRequest.WorkflowStatus = WorkflowStatusDraft; 

    this.CrmService.Execute(unpublishRequest); 
} 
+2

你應該測試這實際上是「停止」正在運行的工作流程。我的理解已經在運行,工作流程不受未發佈和重新發布的影響。 – 2012-07-10 16:16:41

+0

這是一個很好的觀點,我已經修改了我的答案並提出了警告。說實話,我不認爲有一種方法可以實現這裏提出的問題。 – Alec 2012-07-11 11:02:34

+0

@Alec它可以實現,請看看這裏的細節:http://hayercrm.blogspot.co.uk/2014/05/crm-2011-how-to-cancel-workflow-using-c.html – user1211185 2016-02-04 11:06:03

相關問題