2012-07-29 19 views
14

挿入されているレコードがトリガー内のクローン操作の結果であることを検出する方法はありますか?トリガーでレコードがクローンされていることを検出するとき

管理パッケージの一部として、OpportunityレコードとOpportunityLineItemレコードが複製されるときのカスタムフィールドの一部を削除したいと思います。

また、特定のフィールドが複製されないようにするための適切な場所ではないトリガーですか?

私は、sObject.Clone()を呼び出し、不要なフィールドを除外するための専用コードの作成を検討していました。これは、オポチュニティの他のカスタムフィールドも除外するため、管理パッケージの理想的なソリューションとは思われません。

+0

アイデア:[クローン - クローン化されたフィールド制御する機能](http://success.salesforce.com/ideaview?id=08730000000BpUXAA0) –

答えて

6

Winter '16 releaseには、レコードがクローンされているかどうか、およびソースレコードIDから検出できる2つの新しいメソッドがあります。トリガーでこれを使用することができます。

  • isClone() - エンティティが保存されていない場合でも、エンティティが何かから複製されている場合はtrueを返します。
  • getCloneSourceId() - オブジェクトが複製されたエンティティのIDを返します。

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_methods_system_sobject.htm#apex_System_SObject_getCloneSourceId

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_methods_system_sobject.htm#apex_System_SObject_getCloneSourceId

+0

これは、より多くの愛を必要とします – booky99

1

トリガー内でクローン操作を検出することはできません。これは「挿入」操作として扱われます。

引き続き専用コードを使用して、sObject.Clone()を呼び出して不要なフィールドを除外できます。 sObjectの説明情報を使用して、そのオブジェクトのすべてのフィールドを取得し、必要のないフィールドを除外することによって、すべてのフィールドを確実に含めることができます。

希望はこれが理にかなっています! (order of executionのためにあなたの好みに応じて、またはトリガー)ワークフローによって移入ます

はAnupが

5

一つのアプローチ、場しのぎのようなものとはいえ、新しいフィールドを作成するだろう、と言うoriginal_id__c、ブランクレコードのsalesforce id。新しいレコードの場合、このフィールドは標準のsalesforce IDと一致し、クローンレコードの場合は一致しません。フィールドをいつ、どのように、どのように埋め込むかはいくつかのバリエーションがありますが、重要な点は、新しいレコードとクローンされたレコードを区別する独自のフックを与えることです。

(管理対象パッケージを拡張する開発者ではなく)エンドユーザーの操作を制御する場合は、標準クローンボタンをカスタムページでオーバーライドして、フィールドのサブセットの値をクリアしますurl hacking。クローンボタンをクリックしたユーザーのために、フィールドが編集可能で、ページレイアウト上に表示されるという注意点がいくつかあります。この記事の執筆時点では、標準的なボタンのオーバーライドをパッケージ化することはできませんが、これまでにリリースされている可能性のある変更の一覧はパッケージ化できるとは思いません。

関連する問題