Memos About SalesForce

Salesforceにハマってたこと!

APEX Update Error: System.ListException: Duplicate id in list 001XXXXXXXXXXXX

リストは重複な値をもつことができる。

しかし、リストに同じsObjectのIdがあり、さらに更新(update)をかけようとすると「Error: System.ListException: Duplicate id in list 001XXXXXXXXXXXX」に遭うです

これについて、Mapで対応可能です。

目次

原因

リストに重複な値をいれることができるため、重複なレコードを格納し、更新するとこのエラーが起こる

対策

考え方

  1. <Id, sObject>マップを作成する

  2. リストをマップに格納することによって、重複が排除される

  3. マップの値に対して更新をかける

サンプルコード

// Salesforceの組織から任意のアカウントのIDを拾ってきたものが下記になります
Id aid = '0017F00xxxxxkdQAC';
list <Account> accList = new list <Account>();
for(account a : [select id from account where id ='0017F00xxxxxkdQAC']){
    account acc = new account(id = aid);
    accList.add(a);
    accList.add(acc);
}
//マップ用意、上のリストをこのマップに格納する予定
map<id,account> accmap = new map<id,account>();

//accListの値を全部マップに格納する、重複な値が自動排除される
accmap.putall(accList);
if(accmap.size()>0){
    update accmap.values();
}

sObject型のリスト

こんなリストを更新する時に、重複なレコードが入ることはめったにないはずですが

念のため、ソリューションとして覚えましょう