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

</apex:page>

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 = 'no-reply@brocade.com'];
    Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
          String[] toAddresses = new String[] {Userinfo.getUserEmail()};
          mail.setToAddresses(toAddresses);
          mail.setSubject('Account Upload Results');
          
          if ( owea.size() > 0 ) {
                mail.setOrgWideEmailAddressId(owea.get(0).Id);
            }
           
            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/>'+
                          'Salesforce'+'<br/>'+
                          '</body></html>';
                          
           mail.setHtmlBody(body);
            //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
            efa.setBody(csvBlob);        
            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" >
     {!con.Title},"{!con.FirstName}","{!con.LastName}"
     </apex:repeat>
</apex:page>

If you come across any issue on same, please feel free to comments or mail to asish162@gmail.com


No comments: