Using Email Template from Apex and merge it with Apex variable
Requirement : Schedule Email Alert to Opportunity Owner in the early of the month if their Opportunities fulfill some criteria.
The email template is like below :
Hi Jane,
There some opportunities that need to be closed in this month with contract amount more than $50,000.Please update it and reply to this email.
regards,
Sales Action Team
The highlight mean variable value.To achieve this template we can do html code in apex from scratch which will cost longer time and of course the code will not be so neat.Or we can create Email Template in Setup, and I choose Custom Email Template.
In the HTML Body,I generate template as above in HTML.
Actually it is very easy, you don't have to code from the scratch.You can just choose any tool to convert the above format to HTML like I for this link quite useful.Or in case, your target customer is using Microsoft Outlook and love the format very much, you can just compose the email and sent to yourself.Then when you view the email, right click and View Source.
Notice that I replace Jane to OPPORTUNITY_OWNER and table with OPPORTUNITY_TABLE.We will generate those in Apex code so we will have dynamic template.
In the Apex,let say I already retrieved the Opportunity value and just want to replace the value the actual value like below :
This is the steps that I did:
The email template is like below :
Hi Jane,
There some opportunities that need to be closed in this month with contract amount more than $50,000.Please update it and reply to this email.
Opportunity Owner | Opportunity Name | Amount Currency | Amount | Confidence | Stage | Link |
---|---|---|---|---|---|---|
Jane Jackson | XYZ Canteen | USD | 60000.00 | Upside | Create | Click here to Opportunity |
Jane Jackson | ABC Devices | USD | 3000000.00 | Upside | Create | Click here to Opportunity |
Sales Action Team
The highlight mean variable value.To achieve this template we can do html code in apex from scratch which will cost longer time and of course the code will not be so neat.Or we can create Email Template in Setup, and I choose Custom Email Template.
In the HTML Body,I generate template as above in HTML.
Actually it is very easy, you don't have to code from the scratch.You can just choose any tool to convert the above format to HTML like I for this link quite useful.Or in case, your target customer is using Microsoft Outlook and love the format very much, you can just compose the email and sent to yourself.Then when you view the email, right click and View Source.
1 2 3 4 5 | <p>Hi <span>OPPORTUNITY_OWNER</span>,</p> <p>There some opportunities that need to be closed in this month with contract amount more than $50,000.Please update it and reply to this email.</p> <p>OPPORTUNITY_TABLE</p> <p>regards,</p> <p>Sales Action Team</p> |
Notice that I replace Jane to OPPORTUNITY_OWNER and table with OPPORTUNITY_TABLE.We will generate those in Apex code so we will have dynamic template.
In the Apex,let say I already retrieved the Opportunity value and just want to replace the value the actual value like below :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); //set owner email mail.setToAddresses(ownerEmail); mail.setSubject('ACTION REQUIRED:Please update your Opportunity '); //retrieve template EmailTemplate tempId=[SELECT Id,HTMLValue,Body,Name FROM EmailTemplate WHERE Name= 'Opportunity_Alert' LIMIT 1]; String emailBody = tempID.HTMLValue; String style='<style>table { border-collapse: collapse;font-family: arial, helvetica, sans-serif; font-size: x-small;}td, th { border: 1px solid black;padding:5px;}</style>'; String table=style+'<table style="border-color: #000000; border-width: 1px; width: 100%; border-style: solid;" cellspacing="0" ><tbody><tr><th>Opportunity Owner</th><th>Opportunity Name</th><th>Amount Currency</th><th>Amount</th><th>Confidence</th><th>Stage</th><th>Link</th></tr>'; List<Opportunity> listToSend =mapOpportunity.get(keyMap); for(Opportunity opp: opportunityList){ ownerName=opp.Owner.Name; table+='<tr><td>'+opp.Owner.Name+'</td><td>'+opp.Name+'</td><td>'+opp.CurrencyIsoCode+'</td><td>'+opp.Amount+'</td><td>'+opp.Confidence__c+'</td><td>'+opp.StageName+'</td><td><a href="'+url+opp.Id+'">Click Here to Opportunity</a></td></tr>'; } table+='</tbody></table>'; emailbody=emailBody.replace('OPPORTUNITY_OWNER',ownerName); emailBody =emailBody.replace('OPPORTUNITY_TABLE',table); mail.setHtmlBody(emailBody); |
This is the steps that I did:
- Query the EmailTemplate
- Assign HTMLValue to emailBody string
- Generate table
- Find OPPORTUNITY_OWNER and OPPORTUNITY_TABLE with the html that I generate and make sure we assign back to emailBody
- Set to the email using setHTMLBody
See!It 's piece of cake.
Have a nice day.
Comments
Post a Comment