[英]MS Dynamics CRM 2011 SDK - Update entity record using late-binding
[英]Dynamics CRM SDK : Batch update specific fields in entity
我是Dynamics CRM开发的新手。 我想使用Dynamics CRM Online中的批量更新方法批量更新实体中的某些字段。 我正在使用以下代码执行批量更新:
var multipleRequest = new ExecuteMultipleRequest()
{
Settings = new ExecuteMultipleSettings()
{
ContinueOnError = false,
ReturnResponses = true
},
Requests = new OrganizationRequestCollection()
};
foreach (var entity in entities.Entities)
{
UpdateRequest updateRequest = new UpdateRequest { Target = entity };
multipleRequest.Requests.Add(updateRequest);
}
ExecuteMultipleResponse multipleResponse = (ExecuteMultipleResponse)service.Execute(multipleRequest);
如何仅指定要更新的字段而不是整个实体进行更新?
注意:我有大约200,000条记录要使用上面的代码进行更新。 当前,更新单批1000条记录大约需要1.5分钟。 因此,正在考虑一种仅更新必填字段的方法。
我推荐的方法是为更新创建一个new Entity()
对象。 这样,您的更新代码就不必担心检索了哪些字段,而只需考虑它关心的字段即可进行更新。
foreach (var entity in entities.Entities)
{
var newEntity = new Entity(entity.LogicalName, entity.Id);
//Populate whatever fields you want (this is just an example)
newEntity["new_somefield"] = entity.GetAttributeValue<string>("new_somefield").ToUpper();
UpdateRequest updateRequest = new UpdateRequest { Target = newEntity };
multipleRequest.Requests.Add(updateRequest);
}
您必须查看如何填充EntityCollection entities
。 如果使用RetrieveMultiple进行检索,则拉取最小字段可能是默认情况下的本机Name字段和PK Id字段。 这样,不是整个实体都会被更新回来。
避免使用AllColumns = true
。 使用ColumnSet获得验证所需的最少字段。
ColumnSet = new ColumnSet("field_needed"),
接下来,仅分配必要的字段,例如在循环内部。
foreach (var entity in entities.Entities)
{
UpdateRequest updateRequest = new UpdateRequest { Target = entity };
entity.Attributes["field_to_update"] = "field_value";
multipleRequest.Requests.Add(updateRequest);
}
我的回答将帮助您了解问题所在并予以纠正。 如Nicknow所说,您可以分配新的实体来解决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.