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