【Salesforce】Before Insert or Upsert list must not have two identically equal elements
他の方が開発した処理の確認作業をしていると、エラーが発生しました。
Before Insert or Upsert list must not have two identically equal elements
同じ要素を1つのリストに入れないでねってことですね。
1つのリストに同じレコードを追加してinsert・upsertするとエラーとなるようです。
当たり前といえば当たり前ですね。
コードのイメージはこんな感じです。
List<Contact> upsertList; List<Contact> contactList; List<Contact> existContactList; Map<String, Contact> existContactMap; // 新規の取引先責任者を作成する contactList = this.createContactList(); // 既存の取引先責任者を取得する existContactList = [select Id, Email from Contact]; // メールアドレスで取得するMapを作成する existContactMap = new Map<String, Contact>(); for(Contact con : existContactList){ existContactMap.put(con.Email, con); } // 新規・更新取引先責任者リストを作成する upsertList = new List<Contact>(); for(Contact con : contactList){ Contact upsertContact; // 新規の取引先責任者 upsertContact = con; // 既存レコードが存在する場合、そちらをリストに追加する if(existContactMap.containsKey(con.Email)){ upsertContact = existContactMap.get(con.Email); } upsertList.add(upsertContact); } upsert upsertList;
取引先責任者を作る際に、既存のものとメールアドレスが一致する場合は既存のものを更新するようです。
contactListの中でメールアドレスが重複し、既存レコードにも同じメールアドレスが存在する場合にエラーが発生していました。
この処理に入る前にcontactList内でメールアドレスの重複をなくすか、updateとinsertに分けるべきですかね。
今回は修正までは頼まれていないため、エラーの内容と修正案を伝えるだけです。
自分で書いた方が早いんですけどね。
No comments.