1

誕生日用のApexスケジューラクラスを作成しました。クラスは機能し、誕生日が2日後に、ディレクターにメールを正常に送信します。

ただし、2日後に誕生日があるときに送信される電子メールテンプレートには、連絡先の姓名と生年月日が含まれている必要があります。(電子メールテンプレートは次のようになります。これは、名:{!Contact.FirstName}、名:の誕生日{!Contact.LastName}がオンになっていることを通知するスケジューラー生成の電子メールです{!Contact.Next_Birthday__c}

私のスケジューラーでは、SOQlステートメントを使用して、連絡先のIDと名をデータベースに照会します。

クエリを呼び出した後、クエリした情報をメールテンプレートで使用する文字列/メソッドに変換するにはどうすればよいですか?

私の推測では、クエリの結果を文字列として返しますか?アドバイスをいただければ幸いです。

これが私のコードです:

global class BirthdayName implements Schedulable
{
    global void execute (SchedulableContext ctx) 
    { 
        sendBirthdayEmail(); 
    }

    public void sendBirthdayEmail()
    {
        for(Contact con : [SELECT Contact.name, Id FROM Contact WHERE Next_Birthday__c = : system.Today().addDays(2)])
        {
            Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); 
            mail.setTemplateId('00XJ0000000M31w'); 
            mail.setTargetObjectId('005J0000000JWYx'); 
            mail.setSaveAsActivity(false);
            Messaging.sendEmail(new Messaging.SingleEmailMessage[] {mail}); 
        }
    }
}
4

1 に答える 1

5

クイックアンサー

メール オブジェクトには、設定できる 2 つの ID があります。最初の ID は、これまでに行ったターゲット オブジェクトであり、2 番目の ID は、電子メールが参照するオブジェクトである「what」オブジェクトです。

したがって、ここで必要なのは以下の行だけであり、設定する必要があります。

mail.setWhatId(con.Id);

その他の注意事項

ここで行ったようにハードコーディングされた ID を使用することは、悪い習慣と見なされます。これは主に、本番組織の ID が Sandbox や他の組織の ID と同じである可能性が低いためです。API/開発者名を使用して、電子メール テンプレート自体を取得する必要があります。

EmailTemplate template = [Select id, Body from EmailTemplate
                          where DeveloperName = 'BirthdayReminder'];

また、名前または電子メール アドレスからディレクターの ID を取得します。

User theDirector = [select Id from User where Email = 'md@somecompany.com'];

次に、以前と同じように ID を使用します。

mail.setTemplateId(template.Id); 
mail.setTargetObjectId(theDirector.Id); 

明らかに、ここで追加したいエラーをチェックしていません。メール送信の制限に関しては注意する必要がありますが、このシナリオを考えると、あなたが対処していない限り、それらはあなたがヒットする可能性が高いものではありません.マジで大企業で!

于 2012-07-31T00:58:58.743 に答える