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

时间:2012-05-17 14:07:43

标签: dynamics-crm dynamics-crm-2011 crm dynamics-crm-4

我有一个问题,我正在努力弄清楚如何才能最好地解决这个问题。我已经阅读了有关此错误的各种帖子,您似乎可以通过使用JavaScript来避免这种情况:

Xrm.Page.getAttribute("name").setSubmitMode("always");

对我或插件内部不起作用。现在我的问题是,我的事件表单上有一个更新插件,它会更新一些字段。然而,当我尝试解决这个案例或取消它时,我从我的更新插件中得到错误“该对象无法更新,因为它是只读的”我尝试了以下内容并且会感谢somone可以告诉我我在做什么错误。我的插件代码我在事件形式的预操作中注册为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); } 

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

2 个答案:

答案 0 :(得分:4)

我认为你的帖子中有一些混乱的地方......

Xrm.Page.getAttribute("name").setSubmitMode("always");

这是客户端代码,永远不会影响您的(服务器端)插件的行为。它只是在保存期间强制提​​交表单上的属性,无论它是否已更改。如果记录处于只读状态,则不会改变这一事实。

我一点也不清楚你想要在你的代码中实现什么。你提到更新插件失败了;你已经发布了试图将事件状态设置为某些内容的代码(正如@glosrob建议的那样,你没有在OptionSetValueState的{​​{1}}个对象中提供任何值,所以您可能已经知道,您发布的代码无效);然后,您说明您已在Status请求中注册了您的插件。这意味着如果用户尝试设置SetState的状态,它将触发。鉴于您的代码本身正在尝试设置incident的状态,我不确定它是否有意义......

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

也许从你想要实现的目标开始,我们可以从那里开始工作:)

答案 1 :(得分:3)

你应该删除

setState.EntityMoniker.Name = "statecode";

来自您的代码。此字段Name有其他用途。

另外,你应该添加

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