Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.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
Dynamics crm 插件CRM 2011插件中事件表单上的只读错误_Dynamics Crm_Dynamics Crm 2011_Crm_Dynamics Crm 4 - Fatal编程技术网

Dynamics crm 插件CRM 2011插件中事件表单上的只读错误

Dynamics crm 插件CRM 2011插件中事件表单上的只读错误,dynamics-crm,dynamics-crm-2011,crm,dynamics-crm-4,Dynamics Crm,Dynamics Crm 2011,Crm,Dynamics Crm 4,我有一个问题,我真的在想我怎样才能最好地解决这个问题。我读过关于此错误的各种帖子,似乎您可以通过使用JavaScript来避免此错误: Xrm.Page.getAttribute("name").setSubmitMode("always"); 这对我或插件内部都不起作用。现在我的问题是,我在我的事件表单上启动了一个更新插件,它更新了一些字段。然而,当我试图解决这个问题或取消它时,我从我的更新插件中得到一个错误,该对象无法更新,因为它是只读的。我已经尝试了以下方法,如果有人能告诉我我做错了什么

我有一个问题,我真的在想我怎样才能最好地解决这个问题。我读过关于此错误的各种帖子,似乎您可以通过使用JavaScript来避免此错误:

Xrm.Page.getAttribute("name").setSubmitMode("always");
这对我或插件内部都不起作用。现在我的问题是,我在我的事件表单上启动了一个更新插件,它更新了一些字段。然而,当我试图解决这个问题或取消它时,我从我的更新插件中得到一个错误,该对象无法更新,因为它是只读的。我已经尝试了以下方法,如果有人能告诉我我做错了什么,我将不胜感激。我在针对事件表单进行预操作时注册为SetState的插件代码:

SetStateRequest setState = new SetStateRequest(); 
setState.EntityMoniker = new EntityReference(); 
setState.EntityMoniker.Id = incidentId; //Id which needs to be resolved/canceld 
setState.EntityMoniker.Name = "statecode"; 
setState.EntityMoniker.LogicalName = "incident"; 
setState.State = new OptionSetValue(); 
setState.Status = new OptionSetValue(); 
 SetStateResponse setStateResponse = (SetStateResponse)service.Execute(setState); } 

关于状态和状态,我很困惑我必须将它设置为什么值。当我的事件处于活动状态时,我刚刚收到一个错误,我正在尝试解决并取消该案例。如果有人能帮我,我将不胜感激。提前感谢。

我认为您的帖子中有一些地方不清楚

Xrm.Page.getAttribute("name").setSubmitMode("always");
这是客户端代码,永远不会影响服务器端插件的行为。它只会在保存过程中强制提交表单上的属性,无论该属性是否已更改。如果记录处于只读状态,则不会更改该事实

我一点也不清楚您想在代码中实现什么。您提到更新插件失败;您发布的代码试图将事件状态设置为@glosrob建议的状态,您没有在OptionSetValue对象中为状态和状态提供任何值,因此您可能已经知道,您发布的代码无效;然后声明您已经在SetState请求中注册了插件。这意味着如果用户试图设置事件的状态,它将触发。鉴于您的代码本身正试图设置事件的状态,我不确定它是否有意义

听起来您要做的是,在更新事件时,设置某些值。如果事件处于只读状态,请首先使其可读,然后更新值。然后,您是否需要将实体的状态恢复到以前的状态?这听起来很尴尬,可能暗示有更好的方法来满足您的核心需求

也许从你想要达到的目标开始,我们可以从那里着手:

你应该删除

setState.EntityMoniker.Name = "statecode";
从你的代码。此字段名还有其他用途。 此外,您还应该添加

setState.State.Value = 1;
setState.Status.Value = -1;

您是否向OptionSetValue构造函数提供值,例如新的OptionSetValue1;?嗨,是的,我是。如果我没有错,那么Active的值是0,Inactive的值是1,我不知道Resolved和Cancelled的值是什么,我查看了表单,也没有在表单中找到它。但我只需要知道我是否做了正确的事情,因为这似乎对我不起作用……嗨,格雷格,如果我上面的问题有点混乱,我道歉。我想告诉大家的是,我在事件表单上有一个更新插件。很好地工作,做它应该做的事情。但当我试图解决这个问题时,我发现这个对象的错误无法更新,因为它是只读的,因此我的问题是,它是否与事件的状态有关,因为它是我表单上唯一的只读字段?我需要单独更新吗?谢谢。无需道歉:问你:当事件得到解决时,你的插件是否应该启动?我相信是的,因为我的更新插件不会对事件表单的状态和状态进行任何更改,当它被解决时,这就是为什么我认为我得到了这个错误…但是它是否要求其他字段得到更新,即使它是在记录被解决或已经解决时?如果你不需要在那一点上更新这些字段,那么这将变得更容易…我不需要;我不觉得我已经很好地掌握了应该和不应该发生的事情,但是为了解决你最近的问题,我想你可以修改我上面添加的代码,以防止插件在特定条件下处理。例如://如果包含事件状态,则不运行代码,除非事件仍然处于活动状态ifEntitycontext.InputParameters[Target].Attributes.ContainessStateCode&&Entitycontext.InputParameters[Target].Attributes[statecode]!=总共0{return;}。斑点很好的帕拉莫什。