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

DML ステートメントと Database クラスメソッド

Apex には、DML 操作の実行方法として、DML ステートメントを使用する方法と Database クラスメソッドを使用する方法の 2 通りがあります。このため、データ操作の実行方法が柔軟になります。DML ステートメントは使いやすいため例外が発生しますが、コード内で処理することができます。次は、新しいレコードを挿入するための DML ステートメントの例です。

次は、上記と同等の例ですが、DML 動詞ではなく、データベースクラスのメソッドを使用します。

上記 2 例の違いは、データベースクラスメソッドを使用すると、エラーが発生した場合に部分的なレコード処理を許可するかどうかを指定できる点です。これは、2 番目の追加の Boolean 値パラメータを渡すことで行えます。このパラメータを false に設定すると、レコードが失敗しても、残りの DML 操作は正常に完了できます。また、例外が返されるのではなく、各操作と発生したすべてのエラーの状況を含む結果オブジェクト配列 (または 1 つの sObject しか渡されなかった場合は 1 つの結果オブジェクト)が返されます。デフォルトで、このオプションパラメータは true です。つまり、少なくとも 1 つの sObject を処理できない場合、残りのすべての sObject も処理されず、失敗の原因となったレコードに対して例外が返されます。

DML ステートメントと Database クラスメソッドのどちらを使用するかを決めるには、次の点を参考にしてください。

  • DML 一括処理中に発生するエラーを、コントロールフローをその場で中断する Apex 例外として処理する場合、DML ステートメントを使用します。ここでは try. . .catch ブロックを使用します。この動作は、ほとんどのデータベース手続き型言語での例外の処理方法に似ています。
  • DML 一括操作の部分的な完了を可能にする場合は、Database クラスメソッドを使用します。レコードが失敗した場合でも、DML 操作の残りは終了できます。アプリケーションは拒否されたレコードを確認でき、可能であれば操作を再試行します。この形式を使用すると、DML 例外エラーが発生することがないコードを書くことができます。エラーが発生しない代わりに、作成したコードでは、成功または失敗を判断するための適切な結果配列を使用できます。Database クラスメソッドには、DML ステートメントに類似する、発生した例外をサポートする構文も含まれます。

この 2 つの方法ではほとんどの操作が重複していますが、次の点は異なります。

  • convertLead は Database クラスメソッドでのみ使用でき、DML ステートメントでは使用できません。
  • Database クラスには、メソッドのトランザクションの制御とロールバック、ごみ箱を空にする、SOQL クエリに関連するメソッドなど、DML ステートメントでは使用できないメソッドも備えられています。

メモ