【Salesforce】Before Insert or Upsert list must not have two identically equal elements

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です