5

I am trying to run below code in trigger.

List<User> recipients = [SELECT id FROM User WHERE UserRoleId=:operationsRole.Id];
for (User usr:recipients) 
 { 
  Messaging.SingleEmailMessage notification = new Messaging.SingleEmailMessage();
   notification.setTargetObjectId(usr.Id);
   notification.setWhatId(updatedOpp.Id);
   notification.setTemplateId(msgTemplate.id);
   notification.setSaveAsActivity(False);                
   notification.setSenderDisplayName('SF Robot');

List<Messaging.SendEmailResult> postStats =
    Messaging.sendEmail(new Messaging.SingleEmailMessage[] {notification});
for (Messaging.SendEmailResult r:postStats)
{
    System.Debug('************postStat:' + r.isSuccess());
}

}

0

1 Answer 1

6

This error is because the method notification.setTargetObjectId(usr.Id) uses User Id and as per documentation you need to use notification.setWhatId(updatedOpp.Id) only when setTargetObjectId is contact.

Refer documentation below

http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_Messaging_SingleEmailMessage_setWhatId.htm

If you specify a contact for the targetObjectId field, you can specify a whatId as well. This helps to further ensure that merge fields in the template contain the correct data.

3
  • 1
    Then how to display merge field values from template if we can't use setWhatId.
    – sfdc
    Dec 16, 2013 at 18:47
  • I fear you can achieve this without custom coding the message .public Void setHtmlBody(String htmlBody) i would use this instead as workaround and never use template . Dec 16, 2013 at 18:50
  • 1
    You might find helpful my project APEX Templates, that initially was meant to overcome the limits with sending dynamic emails to internal users.
    – endrju
    Dec 16, 2013 at 22:58

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .