Microsoft Dataverse 中的批量删除功能有助于通过删除不再需要的数据来维护数据质量和管理系统存储的消耗。 例如,您可以批量删除下列数据:
- 过时数据
- 不再与业务相关的数据
- 不需要的测试或示例数据
- 从其他系统错误导入的数据
您可以执行以下操作:
- 删除多个表中的数据。
- 删除特定表中的记录。
- 当批量删除完成时,会收到电子邮件通知。
- 定期删除数据。
- 计划定期批量删除的开始时间。
- 检索有关批量删除期间发生的失败的信息。
若要删除弹性表中的多行,还可以使用该 DeleteMultiple 消息。
DeleteMultiple 会立即删除单个弹性表中的记录,而不是使用批量删除作业。
运行批量删除
若要批量删除数据,请使用 BulkDelete 消息提交批量删除作业。 使用 SDK 时,请使用 BulkDeleteRequest 类。 使用 Web API 中的 BulkDelete 操作。 请在请求的 QuerySet 属性中指定用于描述要删除记录的查询表达式。
批量删除作业由表Bulk Delete Operation(BulkDeleteOperation)中的记录表示。 批量删除操作记录包括以下信息:
- 作业删除的记录数
- 作业未能删除的记录数
- 作业是否设置为重复执行
- 作业的开始时间
批量删除作业以异步方式运行,而不会阻止其他活动。 它只会删除在作业开始运行之前创建的记录。 该作业将根据表关系级联行为中的级联规则删除指定的记录。
如果大容量删除作业失败或过早结束,则操作不会回滚任何已删除的记录。 记录数据仍然被删除。 故障记录存储在 Bulk Delete Failure (BulkDeleteFailure) 表中。 可以从表中检索导致失败的错误的相关信息。
若要运行批量删除作业,必须对要删除的表类型拥有 BulkDelete 和 Delete 特权。 还必须对属性中指定的 QuerySet 表记录具有读取权限。 默认情况下,系统管理员具有必要的权限。 将其授予其他用户。
可以对支持 Delete 消息的所有表执行批量删除。
如果特定表类型的删除操作触发插件或工作流(进程),则每次删除该类型的表记录时,大容量删除作业都会触发插件或工作流。
长期保留的数据
批量删除也可用于长期保留的数据。 像平常一样运行批量删除,但将查询的 DataSource 字段设置为 保留。
通过使用 SDK,您可以使用 QueryExpression 或者在 FetchXmlToQueryExpressionRequest 类中,通过IOrganizationService.Execute 将 FetchXml 转换为 QueryExpression。
QueryExpression
使用 QueryExpression.DataSource 属性 指示查询仅用于保留的行。 将值设置为 retained 以批量删除保留的数据。
static Guid BulkDeleteRetainedAccountsExample(IOrganizationService service)
{
var request = new BulkDeleteRequest
{
JobName = "Bulk Delete Retained Accounts"
};
// Create query and add additional filters as needed
QueryExpression query = new QueryExpression
{
EntityName = "account",
DataSource = "retained"
};
request.QuerySet = new QueryExpression[]{query};
request.StartDateTime = DateTime.Now;
request.RecurrencePattern = string.Empty;
request.SendEmailNotification = false;
request.ToRecipients = Array.Empty<Guid>();
request.CCRecipients = Array.Empty<Guid>();
BulkDeleteResponse response = (BulkDeleteResponse)service.Execute(request);
return response.JobId;
}
FetchXML
将 datasource='retained' 属性添加到 fetch 元素,以指示查询仅用于保留的行。
static Guid BulkDeleteRetainedAccountsFetchXmlExample(IOrganizationService service) {
var convertRequest = new FetchXmlToQueryExpressionRequest
{
FetchXml = @"
<fetch datasource='retained'>
<entity name='account'>
</entity>
</fetch>"
};
FetchXmlToQueryExpressionResponse convertResponse = (FetchXmlToQueryExpressionResponse)service.Execute(convertRequest);
var request = new BulkDeleteRequest
{ JobName = "Bulk Delete Retained Accounts" };
request.QuerySet = new QueryExpression[]{convertResponse.Query};
request.StartDateTime = DateTime.Now;
request.RecurrencePattern = string.Empty;
request.SendEmailNotification = false;
request.ToRecipients = Array.Empty<Guid>();
request.CCRecipients = Array.Empty<Guid>();
BulkDeleteResponse response = (BulkDeleteResponse)service.Execute(request);
return response.JobId;
}
示例
查看以下 SDK for .NET 示例,了解批量删除功能: