2011-07-16 8 views
0

新しい鉛が登場すると、BeforeErrorと、SingleEmailMessageクラスを使用して電子メールを送信するためのリードフィールド値を含むVisualforce電子メールテンプレートを使用したいと思います。電子メールが生成されていますが、(System.Debugで知られていても)呼び出しに値が入っていても、すべてのリードフィールドはnullです。Salesforce VFの電子メールテンプレートでは、関連オブジェクトを永続化する必要がありますか?

mail.setWhatId(lead.Id)メソッドでまだ保存されていないリードIDを渡しているので、メールクラスがId値を使用していて、参照としてではなくデータベース参照をしようとしていると思っていますまだ保存されていないリードがメモリに残っています。

誰でも知っていますか?先生が既に存在するとき、私のクラスは完璧に動作します。

ApexメールクラスがDB読み取りを行う場合は、リードを保存する前にリードフィールド値を送信して電子メールで送信し更新する必要がある場合のパターン提案はありますか?ワークフロー電子メール通知は電子メールが顧客に宛てられているため使用できません。いくつかのリードフィールドに基づいて既存のアカウントレコードからフェッチするアドレスをソートするいくつかの追加Apexコードがあります - したがって、VF最初の場所に電子メールテンプレート。

答えて

2

setWhatId(しかも、ID値を引数として取る方法はほとんどありません)は、確実に行が永続化されることを期待しています。これを回避するには、Beforeトリガでフィールド更新を行い、Afterトリガを追加して電子メールを送信できるようにする必要があります。

+2

一般に、トリガーオブジェクト自体に対してフィールド更新または検証を実行する場合は、beforeトリガーを使用します。データがデータベースに存在することを必要とするもの。クロスオブジェクトの更新、ロールアップ、電子メール、afterトリガを使用する必要があります。 –

関連する問題