Ora

How to schedule jobs on Salesforce?

Published in Salesforce Automation 6 mins read

To schedule jobs on Salesforce, you primarily use Apex classes that implement the Schedulable interface, allowing you to automate tasks to run at specific times or intervals. Salesforce provides both user interface and programmatic methods for setting up these automated jobs.

Understanding Salesforce Job Scheduling

Salesforce job scheduling is essential for automating routine administrative tasks, data processing, and system integrations without manual intervention. This includes operations like nightly data cleanups, scheduled report generation, or mass data updates. The core mechanism for scheduling these jobs is often an Apex class, which can then be set to run at a predefined frequency.

Methods for Scheduling Jobs

Salesforce offers several ways to schedule and automate tasks, with the Apex Scheduler being the most direct method for recurring jobs.

1. Scheduling Apex through the User Interface (Apex Scheduler)

For straightforward scheduling of an Apex class, you can use the Salesforce user interface. This method is ideal for one-off or recurring jobs that don't require complex, dynamic scheduling logic.

Steps to Schedule Apex via UI:

  1. Navigate to Apex Classes: From Salesforce Setup, enter Apex Classes in the Quick Find box, then select Apex Classes.
  2. Click Schedule Apex: On the Apex Classes page, click the Schedule Apex button.
  3. Define Job Details:
    • Job Name: Enter a descriptive name for your scheduled job (e.g., "Daily Data Cleanup").
    • Apex Class: Use the lookup to select the Apex class you want to schedule. This class must implement the Schedulable interface.
    • Frequency: Choose whether the job should run Weekly or Monthly.
    • Preferred Start Time: Select the hour when the job should start.
    • Start Date and End Date: Specify the duration for which the job should run.
  4. Save: Click Save to activate your scheduled job.

Example:
Imagine you have an Apex class named DailyCleanupBatch that extends Batchable<SObject> and implements Schedulable. You can schedule it via the UI to run every Monday through Friday at 2:00 AM to process old records.

2. Programmatic Scheduling with the Schedulable Interface

For more complex scenarios, such as scheduling a job based on dynamic conditions, or if you need to schedule multiple jobs from a single point, programmatic scheduling using the System.schedule method is preferred. This requires an Apex class that implements the Schedulable interface.

Key Components:

  • Schedulable Interface: Your Apex class must implement Database.Schedulable and contain a execute method.

    public class MyScheduledJob implements Schedulable {
        public void execute(SchedulableContext sc) {
            // Your job logic goes here
            // For example, calling a Batch Apex job
            Database.executeBatch(new MyBatchClass());
        }
    }
  • System.schedule Method: Use this method to schedule your class. It takes three arguments:

    1. Job Name: A unique name for the scheduled job.
    2. Cron Expression: A string that defines the schedule frequency (e.g., "0 0 1 ?" for 1 AM every day).
    3. Schedulable Class Instance: An instance of your Schedulable class.
    // Example of programmatic scheduling
    String jobName = 'MyDailyScheduledBatchJob';
    String cronExpression = '0 0 1 * * ?'; // Runs every day at 1:00 AM
    MyScheduledJob scheduledJob = new MyScheduledJob();
    System.schedule(jobName, cronExpression, scheduledJob);

    You would typically execute System.schedule from the Developer Console (anonymous Apex), a setup page, or as part of a one-time deployment script.

    Understanding Cron Expressions:

    A cron expression is a string with six or seven fields that specify time and date.

    Field Allowed Values Description
    1 Seconds (0-59)
    2 Minutes (0-59)
    3 Hours (0-23)
    4 Day of Month (1-31)
    5 Month (1-12 or JAN-DEC)
    6 Day of Week (1-7 or SUN-SAT) (1=Sunday, 7=Saturday)
    7 Year (optional, 1970-2099)

    Common Cron Examples:

    • 0 0 1 * * ?: Every day at 1:00 AM
    • 0 30 23 * * ?: Every day at 11:30 PM
    • 0 0 10 ? * MON-FRI: Every weekday (Mon-Fri) at 10:00 AM

3. Other Job Automation Methods

While not "scheduled" in the same way as Schedulable Apex, these methods also enable automation:

  • Batch Apex: Used for processing large volumes of records. Batch Apex classes often implement Database.Batchable<SObject> and are typically executed once, or scheduled using the Schedulable interface.
  • Queueable Apex: Provides more robust asynchronous processing than @future methods, allowing for chaining jobs. It's not directly scheduled but can be invoked from a scheduled Apex class.
  • Scheduled Flows: Salesforce Flow offers a "Scheduled Paths" feature, allowing you to run a Flow at a specified time and frequency without writing Apex code. This is an excellent low-code alternative for many automation needs.

Monitoring Scheduled Jobs

After scheduling a job, it's crucial to monitor its status and execution. Salesforce provides a dedicated page for this.

In Salesforce, you can find the scheduled Apex jobs by navigating to the 'Scheduled Jobs' page. This is accessible through the Salesforce Setup. Once in Setup, enter Scheduled Jobs in the Quick Find box, and then select 'Scheduled Jobs' under the 'Monitoring' section.

This page provides a comprehensive overview of all currently scheduled jobs, including:

Field Description
Job Name The name given to the scheduled job.
Apex Class The name of the Apex class being executed.
Submitted By The user who scheduled the job.
Submitted Date The date and time the job was scheduled.
Next Run The date and time of the next scheduled execution.
Status The current status (e.g., Queued, Complete, Failed).
Action Options to Delete the scheduled job.

You can also monitor the progress and logs of individual job executions through the 'Apex Jobs' and 'Debug Logs' pages in Setup.

Best Practices for Job Scheduling

  • Error Handling: Implement robust error handling and logging within your scheduled Apex classes to catch and manage exceptions.
  • Governor Limits: Be mindful of Salesforce's governor limits, especially for CPU time, DML statements, and query rows. Scheduled jobs, particularly Batch Apex, are designed to work within these limits.
  • Test Thoroughly: Always test your scheduled jobs in a sandbox environment before deploying to production.
  • Idempotency: Design your jobs to be idempotent, meaning running them multiple times produces the same result as running them once, to avoid data corruption in case of re-runs.
  • Monitor Regularly: Regularly check the Scheduled Jobs and Apex Jobs pages to ensure your jobs are running as expected.
  • Descriptive Naming: Use clear and descriptive names for your scheduled jobs and Apex classes for easier identification and management.
  • Time Zones: Remember that System.schedule uses the organization's default time zone. Be aware of this when setting up schedules for global teams.

By following these guidelines and leveraging Salesforce's powerful scheduling tools, you can effectively automate a wide range of tasks, enhancing efficiency and data integrity within your Salesforce instance.