Microsoft Dataverse の一括削除機能は、不要になったデータを削除することで、データの品質を維持し、システム ストレージの使用を管理するのに役立ちます。 たとえば、次のデータを一括で削除できます。
- 古いデータ
- ビジネスに関連しなくなったデータ
- 不要なテストまたはサンプル データ
- 他のシステムから誤ってインポートされたデータ
次の操作を実行できます。
- 複数のテーブルのデータを削除する。
- 特定のテーブル内のレコードを削除します。
- 一括削除が完了したときにメール通知を受信する。
- データを定期的に削除する。
- 定期的な一括削除の開始時刻をスケジュールする。
- 一括削除中に発生したエラーに関する情報を取得します。
エラスティック テーブル内の複数の行を削除するには、 DeleteMultiple メッセージを使用することもできます。
DeleteMultiple は、一括削除ジョブを使用するのではなく、1 つのエラスティック内のレコードを直ちに削除します。
一括削除の実行
データを一括削除するには、 BulkDelete メッセージを使用して一括削除ジョブを送信します。 SDK を使用して、 BulkDeleteRequest クラスを使用します。 Web API を使用して、 BulkDelete アクションを使用します。 要求の QuerySet プロパティで削除するレコードを記述するクエリ式を指定します。
一括削除ジョブは、 Bulk Delete Operation (BulkDeleteOperation) テーブル内のレコードによって表されます。 一括削除操作レコードには、次の情報が含まれます。
- ジョブが削除したレコードの数
- ジョブが削除に失敗したレコードの数
- ジョブが繰り返し設定されているかどうか
- ジョブの開始時刻
一括削除ジョブは、他のアクティビティをブロックすることなく非同期的に実行されます。 ジョブの実行を開始する前に作成されたレコードのみが削除されます。 ジョブは、 テーブル リレーションシップの連鎖動作に基づいて、連鎖ルールに従って、指定されたレコードを削除します。
一括削除ジョブが失敗した場合、または途中で終了した場合、削除されたレコードはロールバックされません。 レコード データは削除されたままです。 エラーのレコードは、 Bulk Delete Failure (BulkDeleteFailure) テーブルに格納されます。 エラーの原因となったエラーに関する情報をテーブルから取得できます。
一括削除ジョブを実行するには、削除するテーブルの種類に対する BulkDelete 権限と Delete 権限が必要です。
QuerySet プロパティで指定するテーブル レコードに対する読み取り権限も必要です。 システム管理者には、既定で必要なアクセス許可があります。 他のユーザーに付与します。
Delete メッセージをサポートするすべてのテーブルに対して一括削除を実行できます。
特定のテーブルの種類の削除アクションによってプラグインまたはワークフロー (プロセス) がトリガーされる場合、一括削除ジョブは、その種類のテーブル レコードを削除するたびにプラグインまたはワークフローをトリガーします。
一括削除処理を制御する
Options
BulkDeleteまたはメッセージ要求の パラメーターを使用すると、一括削除ジョブでテーブル行 (レコード) を処理する方法を制御できます。 このパラメーターを使用すると、次のことができます。
- 一括削除されたレコードのごみ箱を無効にします。 ごみ箱を無効にすると、削除されたレコードを回復用に格納するオーバーヘッドをスキップすることで、パフォーマンスが向上します。
- サンドボックスの高速削除モードを有効にして、標準の SDK パイプライン (プラグイン、ワークフロー、ごみ箱) をバイパスします。 高速削除により、削除スループットが向上します。
Warning
この記事に示されている例は、書かれているとおりに実行しないでください。 開発環境に合わせてサンプル コードを変更します。 これらの例の一部では、すべてのアカウントを削除しますが、これは実行する必要はありません。
Options パラメーターを使用する
Options パラメーターは、次のプロパティを持つBulkDeleteOptions オブジェクトを受け取ります。
| 財産 | タイプ | Default | 説明 |
|---|---|---|---|
CanRecoverDeletedRecords |
ブール値 | null (ごみ箱が有効) | false に設定すると、一括削除ジョブによって削除されたレコードは完全に削除され、ごみ箱から回復することはできません。 |
RunJobForSandbox |
ブール値 | null (標準パイプライン) | true に設定すると、一括削除ジョブは、プラグイン、ワークフロー、およびごみ箱をバイパスして、高パフォーマンスのサンドボックス削除モードを使用します。 |
Important
BulkDeleteRequest クラスを含む Dataverse SDK for .NET NuGet パッケージは、新しい Options プロパティを含むようにまだ更新されていません。 そのパッケージが更新されるまでは、汎用 の OrganizationRequest クラスを使用して新しいプロパティにアクセスし、"options" パラメーターを使用して "bulkdelete" 要求名を指定できます。
例: オプションズパラメーター
次の例では、Options アクションまたはメッセージ要求で BulkDelete パラメーターを使用する方法を示します。
Optionsの要求本文で プロパティを使用します。
Options パラメーターは BulkDeleteOptions 複合型です。
要求:
POST [Organization Uri]/api/data/v9.2/BulkDelete HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
Content-Type: application/json
{
"QuerySet": [
{
"@odata.type": "Microsoft.Dynamics.CRM.QueryExpression",
"EntityName": "account",
"ColumnSet": {
"AllColumns": true
},
"Distinct": false
}
],
"JobName": "Delete all accounts",
"SendEmailNotification": false,
"ToRecipients": [],
"CCRecipients": [],
"RecurrencePattern": "",
"StartDateTime": "2026-03-13T06:30:00Z",
"Options": {
"CanRecoverDeletedRecords": true,
"RunJobForSandbox": false
}
}
応答:
HTTP/1.1 200 OK
OData-Version: 4.0
{
"@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.BulkDeleteResponse",
"JobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
オプション パラメーターの値
| シナリオ | 削除されたレコードを復元可能 | RunJobForSandbox (サンドボックス用のジョブ起動) | 影響 |
|---|---|---|---|
| 既定値 (標準の削除) | true または省略 | 誤りまたは省略 | レコードは標準パイプラインを通過します。 削除されたレコードは、ごみ箱に保存されます (有効な場合)。 |
| ごみ箱をスキップする | false | 偽 または 省略 | レコードは標準パイプラインを通過します。 このジョブでは、リサイクルビンはバイパスされます。 |
| サンドボックスの高速削除 | false | 真実 | SDK パイプラインとごみ箱をバイパスします。 最大スループット。 |
ごみ箱の動作を制御する
既定では、環境でごみ箱が有効になっている場合、一括削除ジョブによって削除されたすべてのレコードは、削除前にごみ箱に格納されます。 ごみ箱を使用すると、管理者は誤って削除されたレコードを回復できますが、削除されたレコードごとに大幅な I/O オーバーヘッドが追加されます。
一括削除ジョブのごみ箱を無効にするには、CanRecoverDeletedRecordsを false パラメーターでOptionsに設定します。 この設定では、次のオーバーヘッドを排除することで、削除スループットを約 2 倍にすることができます。
- DeletedItemReference レコードの作成
- レコード データをごみ箱のストレージ テーブルにコピーする
- 削除された各レコードの復元データ BLOB の更新
Warning
CanRecoverDeletedRecordsが false に設定されている場合、削除されたレコードは完全に削除され、ごみ箱から回復することはできません。 この操作は、元に戻すことはできません。 このオプションを使用して一括削除ジョブを実行する前に、クエリ条件を確認し、適切なバックアップがあることを確認します。 この設定は、現在の一括削除ジョブにのみ影響します。環境レベルのごみ箱の構成は変更されません。
例: 削除を高速化するためにごみ箱を無効にする
レコードをごみ箱に保存せずに完全に削除します。
POST [Organization Uri]/api/data/v9.2/BulkDelete HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
Content-Type: application/json
{
"QuerySet": [
{
"@odata.type": "Microsoft.Dynamics.CRM.QueryExpression",
"EntityName": "account",
"ColumnSet": {
"AllColumns": true
},
"Distinct": false
}
],
"JobName": "Delete accounts - skip recycle bin",
"SendEmailNotification": false,
"ToRecipients": [],
"CCRecipients": [],
"RecurrencePattern": "",
"StartDateTime": "2026-03-13T06:30:00Z",
"Options": {
"CanRecoverDeletedRecords": false
}
}
サンドボックスの高速削除
削除の最大スループットが必要なシナリオでは、 RunJobForSandbox を true に設定することで、サンドボックスの高速削除モードを有効にすることができます。 このモードでは、一括削除ジョブは標準の SDK パイプラインを完全にバイパスし、直接カスケード エンジンの削除を使用して、より高いスループットを実現します。
サンドボックスの高速削除が有効になっている場合、以下はスキップされます。
- 事前操作と操作後プラグインの実行
- 同期および非同期ワークフロー トリガー
- ごみ箱ストレージ (レコードは完全に削除されます)
- Delete メッセージに登録されているカスタム ビジネス ロジック
高速削除を実行する場合は、次の情報が保持されます。
- テーブル リレーションシップの構成に基づく連鎖削除ルール
- 参照整合性 (外部キーリレーションシップ)
- セキュリティ特権のチェック
- ダウンストリーム レプリケーションの同期変更の追跡
Important
サンドボックスの高速削除モードでは、SDK プラグイン パイプライン全体がバイパスされます。 Delete メッセージに登録されているカスタム プラグイン、ワークフロー、またはビジネス ロジックは、このモードで削除されたレコードには実行されません。 監査プラグイン、統合プラグイン、およびカスタム検証ロジックが含まれます。 さらに、サンドボックス モードで削除されたレコードは、ごみ箱から回復できません。 このオプションは、重要なビジネス ロジックが削除時プラグインの実行に依存していないこと、および永続的で回復不可能な削除が許容される場合にのみ使用します。
例: サンドボックスの高速削除
高パフォーマンスのサンドボックス削除モードを使用して最大スループットを実現する方法について説明します。
POST [Organization Uri]/api/data/v9.2/BulkDelete HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
Content-Type: application/json
{
"QuerySet": [
{
"@odata.type": "Microsoft.Dynamics.CRM.QueryExpression",
"EntityName": "account",
"ColumnSet": {
"AllColumns": true
},
"Distinct": false
}
],
"JobName": "Delete accounts - sandbox fast delete",
"SendEmailNotification": false,
"ToRecipients": [],
"CCRecipients": [],
"RecurrencePattern": "",
"StartDateTime": "2026-03-13T06:30:00Z",
"Options": {
"CanRecoverDeletedRecords": false,
"RunJobForSandbox": true
}
}
長期保持データ
長期保持データの一括削除も可能です。 通常どおりに一括削除を実行しますが、クエリの DataSource フィールドを 保持するように設定します。
QueryExpression
DataSource プロパティを Web API retainedでに設定して、クエリが保持されている行のみを対象とすることを示します。
要求:
POST [Organization Uri]/api/data/v9.2/BulkDelete HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
Content-Type: application/json
{
"QuerySet":
[
{
"EntityName": "contact",
"DataSource": "retained",
"Criteria":
{
"FilterOperator": "And",
"Conditions":
[
{
"AttributeName": "firstname",
"Operator": "Equal",
"Values" : [{"Value":"Bob","Type":"System.String"}]
}
]
}
}
],
"JobName": "Bulk Delete Retained Contacts",
"SendEmailNotification": false,
"RecurrencePattern": "",
"StartDateTime": "2023-03-07T05:00:00Z",
"ToRecipients": [],
"CCRecipients": []
}
応答:
HTTP/1.1 200 OK
{
"@odata.context": "[Organization Uri]/api/data/v9.1/$metadata#Microsoft.Dynamics.CRM.BulkDeleteResponse",
"JobId": "3093d67f-21f0-ed11-8b48-6045bdd92a32"
}
Samples
一括削除機能については、次の SDK for .NET サンプルを参照してください。