次の方法で共有


データの一括削除

Microsoft Dataverse の一括削除機能は、不要になったデータを削除することで、データ品質を維持し、システム ストレージの使用を管理するのに役立ちます。 たとえば、次のデータを一括で削除できます。

  • 更新されていないデータ
  • ビジネスに関連しなくなったデータ
  • 不要なテストまたはサンプル データ
  • 他のシステムから誤ってインポートされたデータ

また、次の操作を実行できます。

  • 複数のテーブルにまたがるデータを削除する。
  • 特定のテーブル内のレコードを削除します。
  • 一括削除の完了時に、電子メールで通知を受信します。
  • データを定期的に削除する。
  • 定期的な一括削除の開始時間をスケジュールする。
  • 一括削除中に発生したエラーに関する情報を取得します。

エラスティック テーブル内の複数の行を削除するには、 DeleteMultiple メッセージを使用することもできます。 DeleteMultiple は、一括削除ジョブを使用するのではなく、1 つのエラスティック内のレコードを直ちに削除します。

一括削除の実行

データを一括削除するには、 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;
}

Samples

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

こちらも参照ください

長期的なデータ保有期間
BulkDeleteOperation テーブル