【Salesforce】INVALID_ID_FIELD, The master record id [id] appears in the merge id list

【Salesforce】INVALID_ID_FIELD, The master record id [id] appears in the merge id list

ApexでDatabase.mergeを利用したマージ処理を作成しました。

マージする対象が複数存在する場合もあるため、このような記述をしました。

/**
 * 取引先をマージする
 * @param master マスタレコード
 * @param slaveList マージされるレコードのリスト
 */
public mergeAccount(Account master, List<Account> slaveList){

    // リストに中身がある場合のみ処理を行う
    if(slaveList.size() > 0){
        
        Database.merge(master, slaveList);
    }
}

この処理の中で、マージする際にエラーが発生しました。

INVALID_ID_FIELD, The master record id [id] appears in the merge id list

マージされるリストの中にマージする側のIDが入っているとのこと。

そりゃ怒られますね。

リストを作成する際に工夫が必要みたいですね。

呼び出し元のイメージはこんな感じです。

Account master;
List<Account> accountList;
List<Account> slaveList;

// 対象の取引先を取得する
accountList = this.selectAccountList();
// マスタレコードを取得する
master = this.findMasterRecord();

// マージされる取引先リストを作成する
slaveList = new List<Account>();
for(Account tmpAcc : accountList){

    // IDが異なるものだけをリストに追加する
    if(master.Id != tmpAcc.Id){

        slaveList.add(tmpAcc);
    }
}

// マージ処理を行う
this.mergeAccount(master, slaveList);

実際に動かしていないのは内緒です。

No comments.

コメントを残す

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