How to write the Schedule Apex Class with Test Class in Salesforce
This post describes about to create a Schedule Apex class with Test Class, Monitor the Scheduled Jobs, Delete the Scheduled Jobs.
Use Case:
To update the Contact records every hours after 6 minutes (like 8:06, 9:06, 10:06, etc..)
Schedule Apex Class:
[JAVA]
global class contactUpdateFromScheduleClass implements Schedulable {
// Execute below code in developer console
// It schedules this class to run every hour after 6 minutes (like 8:06, 9:06, 10:06, etc..)
// This is one minute after the exchange rates are fetched from Open Exchange Rates.
/*
contactUpdateFromScheduleClass contactUpdate = new contactUpdateFromScheduleClass();
// Seconds Minutes Hours Day_of_month Month Day_of_week optional_year
String schedule = ‘0 6 * * * ?’;
String jobID = System.schedule(‘Contact Update’, schedule, contactUpdate);
*/
global void execute(SchedulableContext sc) {
//Fetch to All Contact Records
List listContact = new List([SELECT Id, FirstName, LastName, Email
FROM Contact]);
// Loop through list and update Contact Name
for (Contact con : listContact){
con.Description = con.FirstName + ‘ – ‘ + con.LastName +’ Update from Schedulable Class’;
}
update listContact;
}
}
[/JAVA]
How to Create Test Class for the Schedulable Apex Class?
[JAVA]
@isTest
public class contactUpdateFromScheduleClassTest {
@isTest static void contactUpdateTest_Schedule() {
Contact cont = new Contact(FirstName =’First Name’, LastName =’Last Name’, Email=’[email protected]’);
insert cont;
// Seconds Minutes Hours Day_of_month Month Day_of_week optional_year
String CRON_EXP = ‘0 6 * * * ?’;
Test.startTest();
String jobId = System.schedule(‘Update Contacts’, CRON_EXP, new scheduleStoneExRates());
CronTrigger ct = [SELECT Id, CronExpression, TimesTriggered, NextFireTime FROM CronTrigger WHERE id = :jobId];
System.assertEquals(CRON_EXP, ct.CronExpression);
System.assertEquals(0, ct.TimesTriggered);
Test.stopTest();
}
}
[/JAVA]
Run Test Class From Developer Console -> Test -> New Run -> Select the Test Class
Schedule the Class using Developer console
Execute the following code into Developer Console, It schedules this class to run every hour after 6 minutes (like 8:06, 9:06, 10:06, etc..)
This is one minute after the exchange rates are fetched from Open Exchange Rates.
[JAVA]
contactUpdateFromScheduleClass contactUpdate = new contactUpdateFromScheduleClass();
// Seconds Minutes Hours Day_of_month Month Day_of_week optional_year
String schedule = ‘0 6 * * * ?’;
String jobID = System.schedule(‘Contact Update’, schedule, contactUpdate);
[/JAVA]
Monitor Scheduled Jobs from Salesforce Setup
Setup -> Jobs -> Scheduled Jobs -> All Scheduled Jobs
How to Delete Scheduled Jobs?
There are two ways possible and below are the details to delete Scheduled Apex jobs
1)
Delete from Setup -> Jobs -> Scheduled Jobs -> Delete from “All Scheduled Jobs” List
2)
Delete from Developer Console and execute the (System.abortJob) following code in your salesforce org:
[JAVA]
for(CronTrigger deleteCron: [SELECT Id FROM CronTrigger ]) {
System.abortJob(deleteCron.Id);
}
[/JAVA]
Source: https://help.salesforce.com/articleView?id=code_schedule_batch_apex.htm&type=5
Main Class
Test Class: