データの一括削除

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 version='1.0' output-format='xml-platform' mapping='logical' 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;
}

サンプル

一括削除機能については次の .NET 用 SDK サンプルを参照してください:

参照

長期データ保持に関する概要
BulkDeleteOperation テーブル

注意

ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)

この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。