Sunday, 22 February 2015

Populating Merge fields in Email Template through Apex

Hi All,

I have explained same in my previous post. Due to some demerit of previous post, i have gone by this approach.

Below is my previous post.

Now new approach would be override merge filed of email template through apex code and leaving static text as it is so that user will modify according to their needs.

Below is code snippet

License__c lc = [select id,name,Account_Name__c from License__c  where id = 'a0q90000001Tq7f' limit 1];

EmailTemplate empTemp = [Select Id,Body, subject,Name from EmailTemplate where Name ='Email Template to notify before 15 days' Limit 1];

        String emailBody = empTemp.Body;
        String emailSubject = empTemp.Subject;
        emailBody = emailBody.Replace('{!License__c.Account_Name__c}', lc.Account_Name__c );

        emailSubject = emailSubject.Replace('{!License__c.Account_Name__c}', lc.Account_Name__c);
        Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[] {''};
Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });

I hope it will solve all the problem related to populating merge field in email template.

Monday, 2 February 2015

Sending CSV attachment in Mail and Downloading in CSV Format

Hi All, 

This post is all about sending CSV attachment and downloading in CSV format. Below is the page having list of accounts records in a table and button "Send", when clicked it will send a mail to user email id containing attachment of list Of accounts. Also download Results link to download contacts of corresponding account.

Here the main page code -
<apex:page controller="CSVAttachmentANDDownload">

    <apex:form >
        <apex:pageBlock >
            <apex:pageBlockTable value="{!accountList}" var="account">
                <apex:column value="{!}"/>
                <apex:column value="{!account.Name}"/>
                <apex:column value="{!account.Phone}"/>
                <apex:column headerValue="Action" >
                    <apex:commandLink action="{!ResultsDownLoad}" style="color:green;">
                        <apex:param value="{!}" name="accountid"/>
                        <apex:outputText value="Download Results" />
            <apex:commandButton value="Send" action="{!sendingCSVAsAttachement}"/>


Here is controller -
public class CSVAttachmentANDDownload{
    public list<Account> accountList{get;set;}
    public list<Contact>Contacts {get;set;}
    public CSVAttachmentANDDownload(){
        accountList = [select id,Name,Phone from Account Limit 10];
    public void sendingCSVAsAttachement(){
        OrgWideEmailAddress[] owea = [select Id from OrgWideEmailAddress where Address = ''];
    Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
          String[] toAddresses = new String[] {Userinfo.getUserEmail()};
          mail.setSubject('Account Upload Results');
          if ( owea.size() > 0 ) {
            String body;
            body = '<html lang="ja" style="font-family:Calibri"><body>'+ '<br>'+
                        'Hi '+UserInfo.getName()+','+
                          '<br><br>'+'Please find enclosed accountlist'+'<br><br>'+
                          'Thank you,'+'<br/><br/>'+
            //List<dataWrapper> lstDataWrap = createDataWraps();
            List<String> headerFields = new List<String>{'Acountid','Account Name','Phone'};
            String csvString = ''; 
            for(String header : headerFields)
                csvString = csvString + ',' + header.replace(',','');
            csvString = csvString.replaceFirst(',','') + '\n';
            String fileRow = '';
            String fieldValue = '';
            for(Account acc : accountList )
                String data = acc.Id+ ',' + acc.Name+',' + acc.Phone;
                csvString = csvString + data + '\n';
            Blob csvBlob = Blob.valueOf(csvString);   //Convert the data to Blob format
            Messaging.EmailFileAttachment efa = new Messaging.EmailFileAttachment();
            efa.setFileName('AccountResult.csv');  //Set the name of the file
            mail.setFileAttachments(new Messaging.EmailFileAttachment[] {efa}); 
             Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
    public PageReference ResultsDownLoad(){
        Id accountid;
        accountid = Apexpages.currentPage().getParameters().get('accountid');
        Contacts = [SELECT id,Name,FirstName,Lastname,Phone,Title from contact where accountid =:accountid ];
        return Page.CSVDownLoad1;

if clicked on download result link contacts of corresponding account will be download in CSV format.
For this CSV download, there is another page(CSVDownLoad1) designed for it.
<apex:page controller="CSVAttachmentANDDownload" contentType="text/csv#Contact.csv">"Title","First Name","Last Name"
     <apex:repeat value="{!Contacts}" var="con" >

If you come across any issue on same, please feel free to comments or mail to