当我们执行ExecuteMultipleRequest 进行批量请求超过最大值时,会报如下的错:
但是我们的代码不能通过部署 web 服务来直接查询批量阈值的大小,除非它在具有部署管理员角色的帐户下运行。但部署管理员正好通常不是干这个用的。
幸运的是,还有一种方法可以使用:当ExecuteMultipleRequest 请求数量超过组织允许的最大值时,ExecuteMultipleRequest 将抛出一个异常。异常中会返回最大值的大小。你的代码可以检查该值,并将ExecuteMultipleRequest 请求的大小调整到指定的限制范围内,并重新提交。
try
{
ExecuteMultipleRequest requestWithResults = new ExecuteMultipleRequest()
{
// Assign settings that define execution behavior: continue on error, return responses.
Settings = new ExecuteMultipleSettings()
{
ContinueOnError = false,
ReturnResponses = true
},
// Create an empty organization request collection.
Requests = new OrganizationRequestCollection()
};
// Create entity records into a collection.
EntityCollection records = GetEntityCollectionForCreate();
// Add a CreateRequest for each entity to the request collection.
foreach (var entity in records.Entities)
{
CreateRequest createRequest = new CreateRequest { Target = entity };
requestWithResults.Requests.Add(createRequest);
}
// Execute all the requests
ExecuteMultipleResponse responseWithResults = (ExecuteMultipleResponse)service.Execute(requestWithResults);
}
catch (FaultException<OrganizationServiceFault> fault)
{
if (fault.Detail.ErrorDetails.Contains("MaxBatchSize"))
{
int maxBatchSize = Convert.ToInt32(fault.Detail.ErrorDetails["MaxBatchSize"]);
Console.WriteLine($"it exceeds the maximum allowed {maxBatchSize}");
}
// Re-throw so that Main() can process the fault.
throw;
}
catch (Exception ex)
{
Console.WriteLine(ex);
throw;
}
参考链接: