You need to sign in to do that
Don't have an account?
CBN
How to Write a Scheduler class for Daily and weekly
Hi All,
How to write a scheduler class for daily and weekly for below Batch Apex
How to write a scheduler class for daily and weekly for below Batch Apex
- IF the recent Recharge record for 'Internet Plan' record was made 1 day ago and its 'Data Plan' = 'Daily', then create Recharge record.
- IF the recent Recharge for 'Internet Plan' was made 6 days ago and 'Data Plan' = 'Weekly', then create Recharge record.
global class batchCreateRecharge implements Database.Batchable<sobject> { global Database.QueryLocator start(Database.BatchableContext bc){ String query = 'SELECT Id, Data_Plan__c,Total_Amount__c FROM Internet_Plan__c'; return Database.getQueryLocator(query); } global void execute(Database.BatchableContext bc, List<Internet_Plan__c> scope) { try { List<Recharge__c> rcList = new List<Recharge__c>(); for(Internet_Plan__c IP : scope) { Recharge__c rc = new Recharge__c(); rc.Amount__c = IP.Total_Amount__c; rc.Internet_Plan__c= IP.id; rcList.add(rc); System.debug('******Recharge list'+rcList); } insert rcList; } catch( DmlException e ) { // HANDLES EXCEPTIONS RELATED TO DML STATEMENTS. System.debug( 'QueryException:-\n' + e.getMessage() + '\nLine Number:-\n' + e.getLineNumber() ); } catch( Exception e ) { // HANDLES EXCEPTIONS OTHER THAN ABOVE SUCH AS NULL POINTER EXCEPTIONS OR ETC. System.debug( 'QueryException:-\n' + e.getMessage() + '\nLine Number:-\n' + e.getLineNumber() ); } } global void finish(Database.BatchableContext bc) { } }
Kindly Support and Suggest
Try out the below code:
global class ScheduleCreateRecharge implements Schedulable{
global void execute(SchedulableContext sc) {
batchCreateRecharge batch = new batchCreateRecharge ();
Database.executeBatch(batch, 100); //max no of records need to process
}
then schedule your batch job from developer console-->debug-->anonymous window
system.schedule('ScheduleCreateRecharge ','0 0 22 1/1 * ? *', new ScheduleCreateRecharge ()); // you can check the cron(0 0 22 1/1 * ? *) for weekly and daily from this site : http://www.cronmaker.com/
Help Topics
http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_batch_interface.htm
http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_scheduler.htm
Hope this will help you.
Regards,
Chirag
You can write a scheduler calss like below ,
After that you can schedule the class with standard UI .
Setup>> Apex Classes > Schedule Apex (Button ) then below UI you can choose the class Name and contnue .
Let me know incase it helps !!!
Thanks
Manoj
You can schedule your batch class simply by using the cron trigger expression which will be fire according to your requirement. you can generate a cron trigger according to time, day, week, month, etc. Please refer to the following code as they may be helpful in solving your query.
global class batchCreateRecharge implements Database.Batchable<sobject>,Schedulable {
global Database.QueryLocator start(Database.BatchableContext bc){
String query = 'SELECT Id, Data_Plan__c,Total_Amount__c FROM Internet_Plan__c';
return Database.getQueryLocator(query);
}
global void execute(Database.BatchableContext bc, List<Internet_Plan__c> scope) {
try {
List<Recharge__c> rcList = new List<Recharge__c>();
for(Internet_Plan__c IP : scope) {
Recharge__c rc = new Recharge__c();
rc.Amount__c = IP.Total_Amount__c;
rc.Internet_Plan__c= IP.id;
rcList.add(rc);
System.debug('******Recharge list'+rcList);
}
insert rcList;
}
catch( DmlException e ) {
// HANDLES EXCEPTIONS RELATED TO DML STATEMENTS.
System.debug( 'QueryException:-\n' + e.getMessage() + '\nLine Number:-\n' + e.getLineNumber() );
}
catch( Exception e ) {
// HANDLES EXCEPTIONS OTHER THAN ABOVE SUCH AS NULL POINTER EXCEPTIONS OR ETC.
System.debug( 'QueryException:-\n' + e.getMessage() + '\nLine Number:-\n' + e.getLineNumber() );
}
}
global void finish(Database.BatchableContext bc) {
}
}
global void execute(SchedulableContext sc) {
batchCreateRecharge batch = new batchCreateRecharge ();
Database.executeBatch(batch, 100); //max no of records need to process
}
--------- Run this in Excute Anonymous window----------------
system.schedule('ScheduleCreateRecharge ','0 0 0 ? * MON,TUE,WED,THU,FRI,SAT,SUN *', new ScheduleCreateRecharge ());
I hope you find the above solution helpful. If it does, please mark as Best Answer to help others too.
Thanks and Regards,
Deepali Kulshrestha