无法更新自定义实体记录

Unable to update custom entity record

我 运行 遇到 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);

所以我到底错过了什么,因为我真的不知道为什么这条记录现在是只读的。

编辑

我不确定原因,但我创建了另一个自定义实体,其所有字段都与导致我出现问题的实体相同,并且我能够执行所有 crud 操作。我对此感到有点困惑,因为它根本没有任何意义。

听起来您遇到的问题与此发布者类似:"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 个赞成票(目前)。尝试设置辅助对象的方法,您应该可以解决这个问题(又名使用以下代码)

var newRecord = new jol_custom_orders(){
  Id = id,
  jol_estimated_ship_date = estimatedShipDate
};
Service.Update(newRecord);

通常当您无法对实体执行标准的CRM CRUD 操作时,问题是由同步插件或同步工作流引起的,导致异常并导致事务回滚。我会仔细检查您注册的任何自定义插件,以及您拥有的同步工作流,看看是否有任何东西触发了您的自定义实体可能导致异常并回滚事务。