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

返されるデータベースエラー

DML ステートメントでは、処理されているいずれかのレコードの操作に失敗すると、必ず例外が返されてすべてのレコードの操作がロールバックされますが、Database クラスメソッドの場合、同様の動作を行うことも、レコード処理の一部の成功を許可することもできます。後者 (部分処理) の場合、Database クラスメソッドで例外は発生しません。代わりに、失敗したレコードで発生したエラーのリストが返されます。

エラーは Database クラスメソッドの結果に含まれており、このエラーにより失敗の詳細がわかります。たとえば、挿入操作や更新操作の場合は SaveResult オブジェクトが返されます。返されるすべての結果と同様に、SaveResult には、発生したエラー (ある場合) を表す Database.Error オブジェクトのリストを返す getErrors と呼ばれるメソッドが含まれています。

この例では、Database.insert 操作で返されるエラーを取得する方法を示します。2 つの取引先が挿入されていますが、一方には必要な Name 項目がなく、第 2 パラメータが false: Database.insert(accts, false); に設定されています。ここでは、部分処理オプションが設定されています。次に、if (!sr.isSuccess()) を使用してコールが失敗していないかどうかがチェックされ、エラーが反復処理されてエラー情報がデバッグログに書き込まれます。

1// Create two accounts, one of which is missing a required field
2Account[] accts = new List<Account>{
3    new Account(Name='Account1'),
4    new Account()};
5Database.SaveResult[] srList = Database.insert(accts, false);
6
7// Iterate through each returned result
8for (Database.SaveResult sr : srList) {
9    if (!sr.isSuccess()) {
10        // Operation failed, so get all errors                
11        for(Database.Error err : sr.getErrors()) {
12            System.debug('The following error has occurred.');                    
13            System.debug(err.getStatusCode() + ': ' + err.getMessage());
14            System.debug('Fields that affected this error: ' + err.getFields());
15        }
16    }
17}