この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

一括 DML 例外処理

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

    メモ