こんにちは、管理人の@Salesforce.Zです。
なにかしら、
データをコピー・レコードコピーする必要の時がある
今回、
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側の修正も必要