Dynamics CRM SDK:批量更新实体中的特定字段
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 分钟。所以正在考虑一种只更新必填字段的方法。
您必须查看 EntityCollection entities
的填充方式。如果使用 RetrieveMultiple 检索,则 Pull 最小字段可能是本机 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 所说,您可以分配新的实体来解决问题。
我推荐的方法是为更新创建一个 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);
}
我是 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 分钟。所以正在考虑一种只更新必填字段的方法。
您必须查看 EntityCollection entities
的填充方式。如果使用 RetrieveMultiple 检索,则 Pull 最小字段可能是本机 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 所说,您可以分配新的实体来解决问题。
我推荐的方法是为更新创建一个 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);
}