Monday, 21 May 2018

Salesforce - Schedule a class to create a record after n number of days and send an email template to the owner email.



 public static void scheduleTaskCreationJob(Task p_task,Integer days,EmailTemplate p_etemplate,String targetObjectId){       
        System.debug('---scheduleTaskCreationJob---');
        String day2=String.valueOf(datetime.now()+days);
        String time_str=day2.substringAfter(' '); //2018-05-06 15:33:41, get time only 
        String month=day2.subStringBefore(' ').split('-')[1];
        string day=day2.subStringBefore(' ').split('-')[2];
        String[] ctime=time_str.split(':');                           
        String sch = ctime[2]+' '+ctime[1]+' '+ctime[0]+' '+day+' '+month+' ?'; 
        System.debug('sch: '+sch);
        System.schedule('SalesProcessScheduler', sch, new SalesProcessScheduler(p_task,String.valueof(days+1),p_etemplate,targetObjectId));
    }       





global class SalesProcessScheduler implements Schedulable {
    public static Task tsk;
    public static String day;
    public static EmailTemplate emailTemplate;
    public static String targetObjectId;
    global void execute(SchedulableContext ctx) {
        createNewTask();
    }
    public static void createNewTask(){
        System.debug('---createNewTask---');
        Task t=new Task();
        t.Subject='Day '+day;
        t.WhoId=tsk.WhoId;
        t.Status='Not Started';
        insert t;       
        sendEmailTemplate(emailTemplate,tsk.whoId);
    }
    public SalesProcessScheduler(Task p_task,String p_day,EmailTemplate p_emailTemplate,String p_targetObjectId){
        tsk=p_task;
        day=p_day;
        emailTemplate=p_emailTemplate;
        targetObjectId=p_targetObjectId;
    }
    public static void sendEmailTemplate(EmailTemplate p_etemplate,String targetObjectId){
        System.debug('---sendEmailTemplate---');
        Messaging.SingleEmailMessage message = new Messaging.SingleEmailMessage();
        List<String> emaillist=new List<String>();
        // emaillist.add(email);
        message.toAddresses = emaillist;
        //message.ccAddresses = new List<String> {label.Off_Boarding_CC_Email_addresses};       
        message.setTargetObjectId(targetObjectId);
        message.setSenderDisplayName('Lead Sales Process');
        message.setUseSignature(false);
        message.setBccSender(false);
        message.setSaveAsActivity(false);       
        EmailTemplate et=p_etemplate;           
        message.setTemplateId(et.id);       
        Messaging.SingleEmailMessage[] messages =
            new List<Messaging.SingleEmailMessage> {message};
                Messaging.SendEmailResult[] results = Messaging.sendEmail(messages);       
        if (results[0].success) {
            System.debug('The email was sent successfully.');
        } else {
            System.debug('The email failed to send: '
                         + results[0].errors[0].message);
        }
    }
}

No comments:

Post a Comment