Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建阶段20插件中不允许动态CRM 2016更改状态属性_C#_Dynamics Crm - Fatal编程技术网

C# 创建阶段20插件中不允许动态CRM 2016更改状态属性

C# 创建阶段20插件中不允许动态CRM 2016更改状态属性,c#,dynamics-crm,C#,Dynamics Crm,我正在使用Dynamics CRM 2016沙盒组织。在操作前事件管道中设置statecode和status code值时出现此错误。“创建阶段20插件中不允许更改状态属性。” 由于某些业务需求,我无法更新插件以进行后期操作。在CRM 20152013中工作正常。要设置预创建事件的状态和状态,可以使用下面的代码。我在预验证阶段在CRM 2015上的SalesOrder实体上测试了这一点。创建新订单时,它将销售订单状态直接设置为“待定” 必须确保设置的状态值和状态值的组合正确

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


由于某些业务需求,我无法更新插件以进行后期操作。在CRM 20152013中工作正常。

要设置预创建事件的状态和状态,可以使用下面的代码。我在预验证阶段在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);
    }

我正在尝试创建一个自定义实体您是否仅通过更改属性来设置状态/状态?我是这样设置的实体[“statuscode”]=新选项SetValue(1)您在CRM 2015/2013中是否确实能够做到这一点?我并不是真的在这方面挑战你,因为我不认为我必须创建状态为X的记录,而是将它们更新为状态X,并且你必须使用SetStatusRequest。只是出于好奇,是什么业务规则阻止您在后期使用setstatusrequest更新创建的对象?是的,它在CRM 2013/2015中工作正常,但在CRM 2016沙箱组织中不工作。在预创建中,您没有entityId,我认为在新的CRM版本中,您可以通过更新来完成此操作。您在预创建中是正确的不行,谢谢你的纠正。我将在pre-create上介绍一些内容。还有一件事,Constains应该是针对目标的,而不是针对状态或状态的,因为您没有使用状态值,您只是在设置数据:)<代码>如果(context.InputParameters.Contains(“目标”)&context.InputParameters[“目标”]是实体)我的意思是检查是不必要的,因为如果我有实体,我可以使用
实体[“状态”]=value
实体[“状态”]=value
您不需要要求包含状态或状态,因为这最终是一个数据收集。您不应该使用SetStateRequest,因为它已弃用。您应该在操作后阶段使用定期更新请求。