Newer Version Available
一括 DML 例外処理
一括 DML コールによって発生する例外 (コールの直接的な結果によって実行されるトリガ内の再帰的 DML 操作を含む) は、コールの発生元ごとに異なる処理がされます。
- Apex DML ステートメントから直接発生した一括 DML コールが原因でエラーが発生した場合、または Database DML メソッドの allOrNone パラメータが true に指定されている場合、ランタイムエンジンは「オールオアナッシング」ルールに従います。つまり、1 回の操作の間、すべてのレコードを正常に更新するか、または操作全体を DML ステートメントのすぐ前の時点にロールバックする必要があります。
- デフォルト設定で SOAP API から発生した一括 DML コールが原因でエラーが発生した場合、または Database DML メソッドの allOrNone パラメータが false に指定されている場合は、ランタイムエンジンが少なくとも部分的な保存を試みます。
- 最初の試行で、ランタイムエンジンはすべてのレコードを処理します。入力規則や独自のインデックス違反などの問題によるエラーを生成したレコードは、除外されます。
- 最初の試行でエラーが生じた場合、ランタイムエンジンは、エラーを生成しなかったレコードのみを含む 2 回目の試行を行います。最初の試行でエラーを生成しなかったすべてのレコードが処理され、競合の条件などが理由でエラーを生成したレコードがあれば、それも除外されます。
- 2 回目の試行中に追加エラーがあった場合、ランタイムエンジンは、初回と 2 回目にエラーを生成しなかったレコードのみを含む 3 回目 (最後) の試行を行います。エラーを生成したレコードがある場合、操作全体は失敗し、エラーメッセージ「Too many batch retries in the presence of Apex triggers and partial failures (Apex トリガと部分的な失敗がある場合にバッチ試行の回数が多すぎます)」が表示されます。