【Salesforce】Database.mergeについて

【Salesforce】Database.mergeについて

Salesforceでありそうな仕事の中に、重複する顧客のマージというものがあるかと思います。

標準機能にもマージ機能がありますが、あれをApex上で行うことが可能なようです。

https://developer.salesforce.com/docs/atlas.en-us.204.0.apexcode.meta/apexcode/apex_methods_system_database.htm

マージが可能なオブジェクトは、取引先、取引先責任者、リードのみだそうです。

上のURLでDatabaseクラスを見てみると、mergeメソッドがありますね。8個もあります。

引数1 引数2 引数3
masterRecord duplicateId
masterRecord duplicateRecord
masterRecord duplicateIds
masterRecord duplicateRecords
masterRecord duplicateId allOrNone
masterRecord duplicateRecord allOrNone
masterRecord duplicateIds allOrNone
masterRecord duplicateRecords allOrNone

すべて「Database.merge」です。

「masterRecord」に「duplicateRecord」をマージする形になります。

「duplicateRecord」はリストにすることもできますが、リストサイズは2までとのことです。

「duplicateId」は「duplicateRecord」のIDですね。こちらもリストにすることもできますが、同じようにリストサイズは2までのようです。

「allOrNone」は他のDatabaseクラスで使用するDMLにもありますね。

DMLでエラーが発生したときの動作を指定することができます。

たくさんありますが、並べてみると簡単ですね。

実際に実行してみました。

マスタレコードと

20161214_merge_master

重複レコードです。

20161214_merge_slave

開発者コンソールでこのような処理を書いて実行しました。

// マスタレコード
Account master = [select id from Account where Id = '{マスタレコードID}'];
// 重複レコード
Account slave = [select id from Account where Id = '{重複レコードID}'];
// マージ処理
Database.merge(master, slave);

重複レコードは削除されましたが、マスタレコードの更新時間が更新されていました。

重複するレコードをリストにしてマージする場合には、リストサイズに注意しなければいけませんね。

No comments.

コメントを残す

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