在 Dynamics CRM 365 中以编程方式完成业务流程

Programmatically finishing business process flow in Dynamics CRM 365

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

完全相同的操作

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

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

来自Microsoft documentation

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

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

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

创建业务流程时,您会创建一个自定义实体。例如,如果您在默认解决方案中创建一个名为 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.