【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.