Dynamics CRM 2016在创建阶段20插件时不允许更改状态属性

本文关键字:不允许 属性 状态 插件 2016 CRM 创建 Dynamics | 更新日期: 2023-09-27 18:24:06

我使用的是Dynamics CRM 2016沙盒组织。在操作前事件管道中设置状态代码和状态代码值时出现此错误。"在创建阶段20插件时不允许更改状态属性。"

由于一些业务需求,我无法更新我的插件以进行后期操作。它在CRM 20152013中运行良好。

Dynamics CRM 2016在创建阶段20插件时不允许更改状态属性

要设置预创建事件的状态和状态,可以使用下面的代码。我已经在CRM 2015的SalesOrder实体上测试了这一点,预验证阶段。当创建新订单时,它将销售订单状态直接设置为挂起。

您必须确保设置了状态值和状态值的正确组合。

                Int32 statusVal = 2;
                Int32 stateVal = 0;
                if (((Entity)context.InputParameters["Target"]).Contains("statuscode"))
                {
                    ((Entity)context.InputParameters["Target"])["statuscode"] = new OptionSetValue(statusVal);
                }
                else {
                    ((Entity)context.InputParameters["Target"]).Attributes.Add("statuscode", new OptionSetValue(statusVal));
                }
                if (((Entity)context.InputParameters["Target"]).Contains("statecode"))
                {
                    ((Entity)context.InputParameters["Target"])["statecode"] = new OptionSetValue(stateVal);
                }
                else
                {
                    ((Entity)context.InputParameters["Target"]).Attributes.Add("statecode", new OptionSetValue(stateVal));
                }

如果您想使用具有实体id的创建后事件,可以尝试使用SetStateRequest

请确保状态值和状态值的组合有效。

public static void SetStatusOfObject(IOrganizationService service, string entityName, Guid entityId, int state, int status)
    {
        SetStateRequest updateStatus = new SetStateRequest();
        updateStatus.EntityMoniker = new EntityReference(entityName, entityId);
        updateStatus.State = new OptionSetValue(state);
        updateStatus.Status = new OptionSetValue(status);
        service.Execute(updateStatus);
    }