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