問題
開発者はオブジェクトProperty__cのレコードを作成する必要があります。
開発者は次のコードブロックを使用します。
List<Property__c> propertiesToCreate = helperClass.CreateProperties();
try {
/*Question*/
} catch (Exception exp) {
//Exception handling
}
レコードにエラーが発生して作成に失敗した場合でも、開発者は「/*Question*/」どのようなコードを挿入すれば、少なくともいくつかのレコードを作成することができるでしょうか。
- Database.insert(propertiesToCreate, System.ALLOW_PARTIAL);
- insert propertiesToCreate;
- Database.insert(propertiesToCreate, false);
- Database.insert(propertiesToCreate);
正解
- Database.insert(propertiesToCreate, System.ALLOW_PARTIAL);
- insert propertiesToCreate;
- Database.insert(propertiesToCreate, false);
- Database.insert(propertiesToCreate);
解説
正解のコード:
List<Property__c> propertiesToCreate = helperClass.CreateProperties();
try {
Database.insert(propertiesToCreate, false);
} catch (Exception exp) {
//Exception handling
}
このコードでは、Database.insert()
メソッドを使用して、propertiesToCreate
リスト内のProperty__c
オブジェクトのレコードを挿入しようとします。ここで重要なのは、第二引数にfalse
が指定されている点です。このfalse
引数は、部分的な成功を許容することを意味します。したがって、一部のレコードにエラーが発生しても、そのエラーのないレコードは正常に挿入されます。
それぞれの選択肢の理由について説明します。
□ Database.insert(propertiesToCreate, System.ALLOW_PARTIAL);
これは不正解です。SalesforceのApexには「System.ALLOW_PARTIAL」というオプションは存在しません。したがって、このコードはコンパイルエラーとなります。
□ insert propertiesToCreate;
これは不正解です。、標準のinsert
ステートメントはすべてのレコードの成功を要求するため、1つのレコードでエラーが生じると、全レコードの操作がロールバックされます。
□ Database.insert(propertiesToCreate, false);
これは正解です。Database.insert()
の第二引数にfalse
を指定することで、エラーのあるレコードのみがスキップされ、エラーのないレコードは正常に挿入されます。これにより、部分的な成功を可能にします。
□ Database.insert(propertiesToCreate);
これは不正解です。Database.insert()
メソッドに第二引数(allOrNoneパラメーター)を指定しない場合、デフォルト値はtrue
となります。これは、全体としての成功を要求します。つまり、処理対象の任意のレコードでエラーが発生した場合、全てのレコードの操作がロールバックされます。
コメント