- List<SObject>はupsertできない
- Lightningでレコードリストを引数としてApexに渡すと、型宣言がList<Account>やList<Contact>であったとしても実体はList<SObject>になっている
- つまり、そのままだとLightningコンポーネントからApexにレコードリストを渡してもupsertできない
public class MyComponentController {
@AuraEnabled
public static void saveRecords(List<Account> records) {
upsert records;
//=> System.TypeException: DML on generic List<SObject> only allowed for insert, update or delete
}
}
- しかし、List<Account>やList<Contact>を新たに生成してaddAllすることでupsert可能なリストを生成することはできる。
public class MyComponentController {
@AuraEnabled
public static void saveRecords(List<Account> records) {
List<Account> recordsToUpsert = new List<Account>();
recordsToUpsert.addAll(records);
upsert recordsToUpsert;
}
}