我遇到了CRM Online和自定义实体的问题,我无法更新自定义实体中的任何记录。除了无法更新记录外,我也无法删除记录,这不是什么大问题,但仍然有点奇怪。
当我尝试更新记录时,我得到以下异常:
The entity cannot be updated because it is read-only.
最初我认为这是因为我没有查询正确的实体,但是能够确认我正在编辑正确的实体,因为我正在执行以下操作:
var record = new jol_custom_orders();
record.jol_estimated_ship_date = DateTime.Parse("12/15/2015");
record.jol_purchase_order_id = new EntityReference(SalesOrder.EntityLogicalName, order.Id);
record.jol_account = new EntityReference(Account.EntityLogicalName, CustomerId);
var id = Service.Create(record);
当我直接从crm获取id并尝试更新同一记录时,这就是我遇到问题的地方。
我正在尝试更新记录,执行以下操作:
var record = (jol_custom_orders)Service.Retrieve(jol_custom_orders.EntityLogicalName, id, new ColumnSet(true));
record.jol_estimated_ship_date = shipDate;
record.jol_estimated_ship_date = estimatedShipDate;
Service.Update(record);
那么我到底错过了什么,因为我真的输掉了为什么这条记录现在是只读的。
修改的
我不确定原因,但是我创建了另一个自定义实体,其中所有字段都与导致我出现问题的字段相同,并且我能够完成所有的操作。我对此感到有些困惑,因为它完全没有任何意义。
答案 0 :(得分:1)
听起来你对这张海报有类似的问题:"EntityState must be set to null, Created (for Create message) or Changed (for Update message)" when attempting to update an entity in CRM 2011
我找到了最好的答案,实际上是user764754的5个upvotes(目前)。尝试设置帮助对象的方法,你应该克服这个问题(也就是使用下面的代码)
var newRecord = new jol_custom_orders(){
Id = id,
jol_estimated_ship_date = estimatedShipDate
};
Service.Update(newRecord);
答案 1 :(得分:0)
通常,当您无法对实体执行标准CRM CRUD操作时,问题是由同步插件或同步工作流引起的,从而导致异常并导致事务回滚。我要仔细检查您已注册的任何自定义插件,以及您拥有的同步工作流程,以查看您的自定义实体上是否有任何触发器可能导致异常并回滚事务。