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

Newer Version Available

This content describes an older version of this product. View Latest

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

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

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

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

1swfobject.registerObject("clippy.codeblock-0", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17// Create two accounts, one of which is missing a required field
18Account[] accts = new List<Account>{
19    new Account(Name='Account1'),
20    new Account()};
21Database.SaveResult[] srList = Database.insert(accts, false);
22
23// Iterate through each returned result
24for (Database.SaveResult sr : srList) {
25    if (!sr.isSuccess()) {
26        // Operation failed, so get all errors                
27        for(Database.Error err : sr.getErrors()) {
28            System.debug('The following error has occurred.');                    
29            System.debug(err.getStatusCode() + ': ' + err.getMessage());
30            System.debug('Fields that affected this error: ' + err.getFields());
31        }
32    }
33}