Memos About Salesforce

Salesforceにハマってたこと!

SFDC sObject レコードのコピーを作成します

f:id:jude2016:20190920155743j:plain

こんにちは、管理人の@Salesforce.Zです。

【英会話教室なら29年】トライズなら1年で英語が身につく

なにかしら、

データをコピー・レコードコピーする必要の時がある

今回、

sObject レコードのコピーを作成するメソッド

Cloneメソッドについて

共有したいと思います。

読んだら得ること

★ sObject レコードのコピーを作成する標準メソッド

目次

Cloneメソッドの引数について

下記の表にまとめました。(参照先:salesforceドキュメント

No. 引数 説明 デフォルト設定値
1 preserveId Boolean (省略可能) 元のオブジェクトの ID を重複で保持するか削除するかを指定します。
true に設定すると、ID は重複する ID にコピーされます。
デフォルトは false であるため、ID はクリアされます。
※つまり、IDをコピーしてinsertか
コピーしないでinsertするかの感じ、
もちろん、IDをコピーしてinsertするとエラーが出るぞ
System.DmlException: Insert failedでござる
false
2 isDeepClone Boolean (省略可能) メソッドが sObject 項目の完全なコピーを作成するか、参照を作成するかを決定します。
true に設定すると、メソッドは sObject の完全版を作成します。リレーション項目など、sObject のすべての項目はメモリで重複します。その結果、コピーした sObject の項目に変更を行っても、元の sObject は影響されません。
false に設定すると、メソッドは sObject 項目の浅いコピーを作成します。コピーされたすべてのリレーション項目は元の sObject を使用します。その結果、コピーされた sObject でリレーション項目を変更すると、元の sObject の対応する項目も変更され、元の sObject で変更するとコピーされた sObject も変更されます。デフォルトは false です。
※つまり、trueに指定するとコピーしたデータが元の sObject は影響されません、逆は影響する
false
3 preserveReadonlyTimestamps Boolean (省略可能) 参照のみのタイムスタンプ項目を重複で保持するか削除するかを指定します。
true に設定すると、参照のみの項目 CreatedById、CreatedDate、LastModifiedById、および LastModifiedDate は重複項目にコピーされます。
デフォルトは false であるため、値はクリアされます。
false
4 preserveAutonumber Boolean (省略可能) 元のオブジェクトの自動採番項目を複製で保持するか削除するかを指定します。
true に設定すると、自動採番項目はコピーされたオブジェクトにコピーされます。
デフォルトは false であるため、自動採番項目はクリアされます。
false

下記引数はすべて省略可能な引数である

終わりに

一般使用例:clone の引数はfalse, true の組み合わせ

Account oriObj = [SELECT id ,Name FROM Account LIMIT 1];
Account cloneObj = oriObj .clone(false, true);
  • 全ての項目はコピーされない

  • SOQLに含めていない、項目はコピーされない(この例ではIdとNameだけコピーされるって感じ)

  • cloneするオブジェクトの項目が増えた際には、必要であればApex側の修正も必要

【英会話教室なら29年】トライズなら1年で英語が身につく

リファレンス

SObject クラス