0
global class BatchClassExample implements Database.Batchable<sObject>  
 {     
  global integer i;  
  global list<sObject> start(Database.BatchableContext BC)  
   {  
     list<Opportunity> oList=new list<Opportunity>([select id from opportunity where StageName='Closed Won']);  
    return oList;  
   }  
  global void execute(Database.BatchableContext BC, list<opportunity> oList)  
   {      
    Set<Id> opSet = new Set<Id>();       
    for(opportunity op:oList)    
     {  
        opSet.add(op.id);  
     }      
    AggregateResult[] results=[select count(id) from opportunity where id in:opSet];  
    for(AggregateResult ar:results)  
     {  
      i=Integer.ValueOf(ar.get('expr0'));  
     }  
      Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();  
      String[] toAddresses = new String[] {'[email protected]'};     
      mail.setToAddresses(toAddresses);  
      mail.setSubject('Count Of Opportunities closing today ');  
      mail.setPlainTextBody('Closed opportunities for today are: ' +i);  
      Messaging.sendEmail(new Messaging.SingleEmailMessage[] {mail} );  
   }   
  global void finish(Database.BatchableContext BC)  
   {   
   }  
 }  




global class ScheduleBatchClass implements schedulable  
{  
 ScheduleBatchClass sBC =new ScheduleBatchClass();  
 global void execute(SchedulableContext sc)  
  {  
   BatchClassExample  bCE= new BatchClassExample ();  
   Integer scopeSize = 200;  
   Database.executeBatch(bCE,scopeSize);    
  }  
  Datetime sysTime = System.now().addSeconds(60);        
  String sch= '' + sysTime.second() + ' ' + sysTime.minute() + ' ' + sysTime.hour() + ' ' + sysTime.day() + ' ' + sysTime.month() + ' ? ' + sysTime.year();  
  String jobID = system.schedule('Batch Scheduled Job', sch, sBC);  
}  
3
  • Can someone tell me, where am i going wrong?
    – pluto
    Aug 25, 2014 at 8:09
  • What do you want to do ? What's the errors displayed ? Please provide more informations !
    – SF_user
    Aug 25, 2014 at 8:23
  • i have to send an email daily, giving count of closed opportunities using batch scheduling. And the code has been compiled successfully, but i am not getting any email!!
    – pluto
    Aug 25, 2014 at 8:28

1 Answer 1

3

I don't see anything wrong with the email sending code. But it looks like you are not calling Database.executeBatch anywhere so the batch will never run. Personally, I would just use the "Schedule Apex" button to schedule this ScheduleBatchClass:

global class ScheduleBatchClass implements Schedulable {
    global void execute(SchedulableContext sc) {
        Integer scopeSize = 5000;
        Database.executeBatch(new BatchClassExample(), scopeSize);  
    } 
} 

There are also these two problems in the counting logic:

  • the class needs to implement a second marker interface implements Database.Batchable<sObject>, Database.Stateful { so that the value of i is preserved across batches
  • as the work is likely to be broken up into many batches, the total needs to be incremented not assigned i += Integer.ValueOf(ar.get('expr0')); and so the value needs to be initialized global integer i = 0;
5
  • 1
    Still have to implement Schedulable in BatchClassExample to use "Scheduled Apex" won't they? Aug 25, 2014 at 9:30
  • You are right - thank I'll update the answer.
    – Keith C
    Aug 25, 2014 at 9:48
  • @ Keith C oops,sorry i forgot to add Database.executeBatch method. But now i have modified the code. Still it is not sending any mail.
    – pluto
    Aug 25, 2014 at 10:23
  • @pluto Do address the other points too. But at this point you'll have to start doing some debugging unless anyone else can see the problem - here is sone info on how to do that.
    – Keith C
    Aug 25, 2014 at 10:42
  • I have uploaded the modified code. I am receiving the mail regarding closed opportunities when i run the code in execute anonymous. But somehow it is not getting scheduled. Could someone help?
    – pluto
    Aug 26, 2014 at 6:58

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .