リストは重複な値をもつことができる。
しかし、リストに同じsObjectのIdがあり、さらに更新(update)をかけようとすると「Error: System.ListException: Duplicate id in list 001XXXXXXXXXXXX」に遭うです
これについて、Mapで対応可能です。
目次
原因
リストに重複な値をいれることができるため、重複なレコードを格納し、更新するとこのエラーが起こる
対策
考え方
<Id, sObject>マップを作成する
リストをマップに格納することによって、重複が排除される
マップの値に対して更新をかける
サンプルコード
// 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型のリスト
こんなリストを更新する時に、重複なレコードが入ることはめったにないはずですが
念のため、ソリューションとして覚えましょう