【问题标题】:Programmatically finishing business process flow in Dynamics CRM 365在 Dynamics CRM 365 中以编程方式完成业务流程
【发布时间】:2017-09-06 20:35:20
【问题描述】:

我正在使用最新的 SDK 版本 (8.2) 在 C# 代码中管理整个 CRM 流程。前进工作正常,只需更新相关实体上的 stageid。 但是我不知道,我怎么能完成最后一个阶段=我怎么能把过程设置为完成。我想调用与单击“设置完成”按钮完全相同的操作

【问题讨论】:

    标签: .net dynamics-crm dynamics-crm-365


    【解决方案1】:

    要将活动流程实例的当前状态设置为已完成,请使用:

    Xrm.Page.data.process.setStatus("finished");
    

    来自Microsoft documentation

    Xrm.Page.data.process.setStatus(status, callbackFunction);
    

    status 是一个字符串,可以是activeabandonedfinishcallbackFunction 是操作完成时调用的可选函数。

    注意:虽然文档说要使用finish,但这不起作用:使用finished

    【讨论】:

    • 谢谢戴夫。我的错 - 我没有明确写过我想使用 C#(自定义操作)来做这件事。我已经编辑了这个问题。在我的情况下,您建议的解决方案仍然可以用作解决方法。
    • anwser 几乎是正确的。似乎文档中有错误。工作调用:Xrm.Page.data.process.setStatus("finished");
    • Doc中还有一个状态“abandoned”,真名是“aborted”
    • 你是对的。我刚刚在 Dynamics 365 (8.2.0.798) 上对此进行了测试:finish 无效,而 finished 有效!
    【解决方案2】:

    当您创建业务流程时,您将创建一个自定义实体。例如,如果您在默认解决方案中创建一个名为 Marketing Management 的业务流程,您将创建一个名为 new_marketingmanagement 的实体。

    当您在记录上激活业务流程时,会创建该实体的一个实例。该实例保存诸如进程处于哪个阶段以及进程何时启动等信息。

    您可以使用Microsoft.Xrm.Sdk.Messages.SetStateRequest 停用实例:

    var stateRequest = new SetStateRequest 
    {
        EntityMoniker = new EntityReference(processFlowName, processId),
        State = new OptionSetValue(1), // Inactive.
        Status = new OptionSetValue(2) // Finished.
    };
    service.Execute(stateRequest);
    

    其中processFlowName 是您的业务流程的逻辑名称(作为字符串),processId 是您要作为 GUID 停用的流程实例的 ID。

    要查找您的流程实例的ID,您可以查询属性_bpf_<primary_key>_value,其中<primary_key> 应替换为您的流程所在实体的主键。例如,在 Account 实体上,这将显示为 _bpf_accountid_value

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      • 2020-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多