16

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

管理パッケージの一部として、Opportunity および OpportunityLineItem レコードが複製されるときに、一部のカスタム項目を消去したいと考えています。

または、特定のフィールドが複製されるのを防ぐために、トリガーは適切な場所ではありませんか?

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

4

3 に答える 3

5

1 つのアプローチは、一種の不器用ではありますが、original_id__c などの新しいフィールドを作成することです。このフィールドは、レコードのセールスフォース ID が空白のときに、ワークフロー (または、実行順序の設定に応じてトリガー) によって入力されます。新しいレコードの場合、このフィールドは標準の Salesforce ID と一致しますが、複製されたレコードの場合は一致しません。フィールドに入力するタイミング、方法、内容にはさまざまなバリエーションがありますが、重要なのは、新しいレコードと複製されたレコードを区別するための独自のフックを用意することです。

(開発者が管理パッケージを拡張するのではなく) エンド ユーザーのエクスペリエンスを制御することだけを考えている場合は、 URL ハッキングを使用してフィールドのサブセットの値をクリアするカスタム ページで、標準の複製ボタンをオーバーライドできます。いくつかの注意点があります。つまり、フィールドは編集可能であり、クローン ボタンをクリックしたユーザーのページ レイアウトに表示されます。この記事を書いている時点では、標準のボタンのオーバーライドをパッケージ化できるとは思いませんが、可能なもののリストはリリースごとに変更されます。

于 2012-07-29T22:10:46.157 に答える
1

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

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

これが理にかなっていることを願っています!

アヌプ

于 2012-07-29T09:08:46.180 に答える