You need to sign in to do that
Don't have an account?

How to create a Schedule Job which runs after specific interval (in hours, minutes, seconds etc)
Hi Folks,
Requirement: To create a Schedule/Cron/Code job which executes after a specific interval, say after every 1 minute.
There is no direct feature in SFDC of doing it but with a tricky way.
Step 1: Create an Apex class which contains the business logic which is required to be executed after specific intervals.
Step 2: Create a Scheduleable Apex Class Like below:
global class ScheduleChatter implements Schedulable {
global void execute(SchedulableContext SC) {
//The line of code below would contain the required business logic
TestChatter.initGoogleApp();
System.debug('-----------ScheduleChatter---------');
String hour = String.valueOf(Datetime.now().hour());
String min = String.valueOf(Datetime.now().minute() + 1);
String ss = String.valueOf(Datetime.now().second());
String nextFireTime = ss + ' ' + min + ' ' + hour + ' * * ?';
System.debug('-----------nextFireTime---------' + nextFireTime);
ScheduleChatter s = new ScheduleChatter();
System.schedule('Job Started At ' + String.valueOf(Datetime.now()), nextFireTime, s);
}
}
Step 3: This Schedule job is initiated by a code, which can be run on System log screen or via another trigger/class:
ScheduleChatter s = new ScheduleChatter();
String hour = String.valueOf(Datetime.now().hour());
String min = String.valueOf(Datetime.now().minute());
String ss = String.valueOf(Datetime.now().second());
String nextFireTime = ss + ' ' + min + ' ' + hour + ' * * ?';
system.schedule('Start me once', nextFireTime, s);
The Schedulable class will keep on calling itself after every 1 minute and eventually calls the code which is needed to be called after specified interval of time.
This code is written as part of R&D.
Thanks,
Sam
Below link definately help you out.
http://blog.sforce.com/sforce/2010/02/spring-10-saw-the-general-availability-of-one-of-my-favorite-new-features-of-the-platform-the-apex-schedulerwith-the-apex-s.html
Hello sam,
Thanks to give this valueable code for us.
but got a error when i reached max scheduled apex.
caused by: System.UnexpectedException: You have exceeded the maximum number (10) of Apex scheduled jobs.
This error is coming because every time we create a new scheduled job. so How can we delete completed scheduled job. we can't rech at max 10.
Yuvraj
It's worth adding here that the answer to the above question is to use the System.abortJob() method to delete unwanted scheduled jobs. The scheduled job id can be used or a job id can be retrieved from querying CronTrigger.
Try something like the following:
step 1. Create Batch class.
for example, I have a batch class that updates the Account "Count" field(Create this field) with all the contacts related to that Account
global class BatchUpadteAccountFieldNumberOfContacts implements Database.Batchable<sObject> {
global Database.QueryLocator start(Database.BatchableContext BC){
String query='SELECT Id FROM Account ';
return Database.getQueryLocator(query);
}
global void execute(Database.BatchableContext BC, List<Account> accList) {
Map<Id,Integer> mapAccountIdContacts = new Map<Id,Integer>();
List<account> AccountContactList = new List<account>();
AccountContactList = [select id, (select id from contacts) from account];
for(account accObj:AccountContactList) {
mapAccountIdContacts.put(accObj.id,accObj.contacts.size());
}
List<account> newAccountListUpdate = new List<account>();
for(Account accObj : AccountContactList) {
if(mapAccountIdContacts.get(accObj.id) != null) {
accObj.Number_of_Contacts__c = mapAccountIdContacts.get(accObj.id);
newAccountListUpdate.add(accObj);
}
}
Update newAccountListUpdate;
}
global void finish(Database.BatchableContext BC) {
}
}
Step 2: Write the Script to Schedule the above class(BatchUpadteAccountFieldNumberOfContacts) .
global class SchedulerUpadteAccountField implements Schedulable{
global void execute(SchedulableContext SC){
// create object of batch class BatchUpadteAccountFieldNumberOfContacts
BatchUpadteAccountFieldNumberOfContacts obj = new BatchUpadteAccountFieldNumberOfContacts();
// execute batch class
System.Database.executeBatch(obj);
}
}
Step 2: Write the Cron expression for the above class(SchedulerUpadteAccountField) to run in every day.
SchedulerUpadteAccountField schedulerObj = new SchedulerUpadteAccountField();
String sch = '0 0 0 * * ?';
String jobID = system.schedule('Create Opportunity BAtch Job', sch, schedulerObj);
Thanks,
Akshay