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

时间:2017-04-11 12:40:50

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

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

2 个答案:

答案 0 :(得分:3)

创建业务流程时,您可以创建自定义实体。例如,如果在默认解决方案中创建名为 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>应替换为您的流程所在实体的主键。例如,在帐户实体上,这将显示为_bpf_accountid_value

答案 1 :(得分:2)

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

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

来自Microsoft documentation

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

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

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