Generate PDF from Batch Class and schedule class and send email notification with Pdf attachment

Generate PDF from Batch Class and schedule class and send email notification with Pdf attachment

Requirement:- is Generate the PDF and and send email notification and insert new related record to keep track of the pdf and attachment to the record.
  • October 6, 2014
  • Like
  • 0
Best Answer chosen by Dagny Fernandes
Dagny Fernandes Dagny Fernandes
Below is my complete process, modified few things:

set up remote site Setup->Security Controle->Remote Site setting. click on New Remote Site
User-added image
Enter the detailes as in the image and "remote site url" is your ord url

Schedule class:-
global class ScheduleFinacialNotification implements Schedulable {
global string sendSessionId;

global ScheduleFinacialNotification(String sessionId){
  this.sendSessionId = sessionId;
}
global void execute(SchedulableContext SC) {
     BatchSendFinacialNotification batchApex=new BatchSendFinacialNotification();
     batchApex.sessionId = this.sendSessionId;
     Database.executeBatch(batchApex,1);  }}

Batch class:-

global class BatchSendFinacialNotification implements Database.Batchable<sObject>,Database.Stateful,Database.AllowsCallouts {
public String query;
global string sessionId;
global BatchSendFinacialNotification(){
  this.sessionId  = sessionId;     
        query    = 'Select Id,Name,Project__r.Go_Live_Date__c from Service_Project_Junction__c ';
    }
    global Database.QueryLocator start(Database.BatchableContext BC){
        System.debug('=========='+Database.getQueryLocator(query));
        return Database.getQueryLocator(query);
    }
  
global void execute(Database.BatchableContext BC, List<Service_Project_Junction__c> scope) {
  //List<Service_Project_Junction__c> pojJunRecList = [Select Id,Name,Project__c,Opportunity_Deal__c,Project__r.Id,Project__r.Go_Live_Date__c,Product_Opportunity_Junction__r.Service__r.Service_Type__c,Product_Opportunity_Junction__r.Service__r.Product_Price__c,Product_Opportunity_Junction__r.No_Of_Months__c,Product_Opportunity_Junction__r.Total_Price__c,Product_Opportunity_Junction__r.No_Of_Listings__c from Service_Project_Junction__c where Opportunity_Deal__c != null AND Project__r.Go_Live_Date__c != null];
 
  for(Service_Project_Junction__c proRec: scope){
 
   Integer duration = integer.valueOf(proRec.Product_Opportunity_Junction__r.No_Of_Months__c);
   Integer totMonthTillToday = proRec.Project__r.Go_Live_Date__c.monthsBetween(System.today());
   System.debug('Test in for loop==>'+proRec);
   if(totMonthTillToday <= duration && proRec.Project__r.Go_Live_Date__c.Day() == Date.today().day()){
    System.debug(sessionId+'Test in if loop==>'+this.sessionId);
    ServiceInvoiceRedirectController.attachPdfToRecord( proRec.Project__r.Id, this.sessionId);
    System.debug('Test in if loop after condiyion==>');
   }
  }
}

global void finish(Database.BatchableContext BC){     
    }
  
}

Call of REST Api class:-

@RestResource(urlMapping='/AttachPDF/*')
global class ServiceInvoiceRedirectController
{
@HttpGet
        global static void AttachPDFtoRecordREST()
{
       
            RestRequest req = RestContext.request;
            id recordId = req.requestURI.substring(req.requestURI.lastIndexOf('/')+1);

            PageReference pdfPage = new PageReference('/apex/ServiceInvoicePDF?Id='+recordId);
            pdfPage.getParameters().put('id',recordId);
            Blob pdf = pdfPage.getContentAsPdf(); //!Test.isRunningTest() ? pdfPage.getContentAsPdf() : Blob.ValueOf('dummy text');
          
            Project__c prjRec = [Select Id,Name,Builder_Name__c from Project__c where Id =: recordId];
            //Insert Invoice record for related project
         Invoice__c invoRec = new Invoice__c();
         invoRec.RecordTypeId = Constants_PicklistVariables.serInvoice;
         invoRec.Project__c = recordId;
         invoRec.Account__c = prjRec.Builder_Name__c;
         try{
         insert invoRec;
         }catch(Exception e){
             System.debug('Invoice=Exception-->'+e);
         }
         System.debug('Invoice=invoRec.id-->'+invoRec);
       
         //Insert Attacment to the invoice      
         Attachment a = New Attachment();
         a.body = pdf;
         a.parentID = invoRec.id;
         a.ContentType  = 'application/pdf';
         a.Name = 'SER-INV-'+invoRec.id+'.pdf';
         try{
         insert a;
         }catch(Exception e){
             System.debug('Attachment=Exception-->'+e);
         }
       
         //Create the email attachment
      Messaging.EmailFileAttachment efa = new Messaging.EmailFileAttachment();
      efa.setFileName('pdfName.pdf');//Pleace ad pdf name from contact name project and oppty concatinate
      efa.setContentType('application/pdf');
      efa.setBody(pdf);
    
      // Create the Singal Email Message
      Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
      email.setSubject('Financial Notification');
      email.setToAddresses(new String[] { 'dagny.fernandes@extentor.com' });//add account email id
      email.setPlainTextBody( 'Please Find Attachment your financial report Attached with this email.');
      email.setFileAttachments(new Messaging.EmailFileAttachment[] {efa});
    
      // Sends the email
      Messaging.SendEmailResult [] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[] {email});
          
        }

        // call this method from your Batch Apex
        global static void attachPdfToRecord( Id recordId, String sessionId )
        {
         System.debug('recordId==>'+recordId);
         System.debug('sessionId==>'+sessionId);
         System.debug('Iam in REST API Call method');
           // String addr = 'https://cs5.salesforce.com/services/apexrest/AttachPDF/' + recordId;
            HttpRequest req = new HttpRequest();
            req.setEndpoint('https://cs5.salesforce.com/services/apexrest/AttachPDF/a04O000000EHJN6IAP');
            req.setMethod('GET');
            req.setHeader('Authorization', 'OAuth ' + sessionId);

            Http http = new Http();
            HttpResponse response = http.send(req);  
        }
      
}


Schedule class from Developer Console in Anonymous Window:-

Datetime sysTime = System.now();
sysTime = sysTime.addSeconds(5);
String chron_exp =' '+sysTime.second() + ' ' + sysTime.minute() + ' ' + sysTime.hour() + ' ' + sysTime.day() + ' ' + sysTime.month() + ' ? ' + sysTime.year();
System.schedule('Job1',chron_exp , new ScheduleFinacialNotification(UserInfo.getSessionId()));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值