【问题标题】:CRM 2011, Stopping custom workflow programmaticallyCRM 2011,以编程方式停止自定义工作流
【发布时间】:2012-07-05 16:09:08
【问题描述】:

我一直在尝试以编程方式停止工作流程。 我在各种帖子和 msdn 中都阅读过,这可以通过更新来完成 通过更新请求的异步操作状态。 但是每次我更新请求。工作流卡在中间阶段,例如取消或暂停,并且没有达到最终状态。

有什么想法吗?

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);



        }

    }

【问题讨论】:

  • 您的意思是您试图从该工作流中的代码中止一个工作流,还是您的意思是“从外部”中止一个工作流,例如在单独的代码中?可能值得发布一些您到目前为止所拥有的示例代码。
  • 嘿,亚历克,我添加了示例代码,我试图从工作流程之外中止它,在这种情况下,我尝试使用插件。谢谢
  • StateCodeStatusCode 通常不会对通用更新做出很好的响应。您是否尝试过发出SetStateRequest
  • 不,在 msdn 中它是为使用更新而编写的,msdn.microsoft.com/en-us/library/gg309288.aspx 但我发现了发生了什么,更改工作流状态并不能阻止它。无论新状态是什么,工作流都会继续运行。但在这个过程的最后会有一个指示最终状态是什么。

标签: workflow dynamics-crm-2011


【解决方案1】:

根据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);
}

【讨论】:

  • 您应该测试这实际上“停止”运行工作流。我的理解是已经运行的工作流不受取消发布和重新发布的影响。
  • 这是一个很好的观点,我已经用这个警告修改了我的答案。老实说,我认为没有办法实现这里的要求。
  • @Alec 是可以实现的,详情请看这里:hayercrm.blogspot.co.uk/2014/05/…
【解决方案2】:

看看我的博客:How to Cancel Workflow Programmatically using C#

确保用户有权取消系统作业。

【讨论】:

    【解决方案3】:
    QueryExpression queryExpression = new QueryExpression("asyncoperation") { ColumnSet = new ColumnSet("statuscode") };
            queryExpression.Criteria.AddCondition("name", ConditionOperator.Equal, Name of Workflow);
            queryExpression.Criteria.AddCondition("regardingobjectid", ConditionOperator.Equal, regardingobjectId);
            var asyncOperations = organizationService.RetrieveMultiple(queryExpression);
    
            foreach (var asyncOperation in asyncOperations.Entities)
            {
                if (((OptionSetValue)asyncOperation["statuscode"]).Value == 10 || // Waiting
                    ((OptionSetValue)asyncOperation["statuscode"]).Value == 20 || // In Process
                    ((OptionSetValue)asyncOperation["statuscode"]).Value == 0)
                {
                    Entity operation = new Entity("asyncoperation")
                    {
                        Id = asyncOperation.Id,
                        ["statecode"] = new OptionSetValue(3),
                        ["statuscode"] = new OptionSetValue(32)
                    };
    
                    organizationService.Update(operation);
                }
            }
    

    确保用户有权取消系统作业。

    【讨论】:

      猜你喜欢
      • 2013-02-04
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-26
      • 2012-03-29
      相关资源
      最近更新 更多