SaasGuru Logo

Kickstart your career with the World's First Salesforce & AI Programs by an IIT - Explore Courses 🎉

Kickstart your career with the World's First Salesforce & AI Programs by an IIT - Explore Courses 🎉
Queueable Apex in Salesforce - The Ultimate Guide

Queueable Apex in Salesforce – The Ultimate Guide

Navigating the world of Salesforce can be a rewarding journey, especially when you come across tools that can revolutionize your operational efficiency. One such tool is Queueable Apex, which stands as a beacon for those aiming for seamless asynchronous processing.

Here’s what you can expect to learn from this article:

  • Get a firm grasp of what Queueable Apex is and its pivotal role in Salesforce.
  • Understand the step-by-step process, from job submission to completion.
  • Discover the myriad advantages that Queueable Apex offers over other asynchronous processing tools in Salesforce.
  • While powerful, Queueable Apex comes with its own set of limitations. We’ll shed light on these so you can use the tool effectively.
  • A hands-on, step-by-step walkthrough on how to bring Queueable Apex to life in your Salesforce environment.
  • Dive into a real-world example to see Queueable Apex in action.

Whether you’re a seasoned Salesforce veteran or a newbie eager to expand your toolkit, this guide promises valuable insights for all. So, without further ado, let’s plunge into the world of Queueable Apex!

Salesforce Training Program India

What is Queueable Apex?

Queueable Apex, as a feature in Salesforce, introduces a more robust and flexible way to run asynchronous Apex code. It complements the existing functionality of future methods and batch Apex, offering a better solution for handling jobs that need to be run in the background.

Asynchronous processing refers to operations that are executed separately from the main flow of your application, thereby avoiding any disruption or slowdown in the user interface. Enhancing user experiences, especially amidst hefty data handling or intricate computations, is a significant attribute of this feature.

Queueable Apex enables the submission of tasks for asynchronous processing by queueing them. It works in the following manner:

  1. Job Submission: You can submit jobs for asynchronous processing through a Queueable class. This class should implement the Queueable interface and define an execute method, which specifies the operations to be performed.
  2. Job Queuing: When a job is submitted using the System.enqueueJob method, Salesforce places it in a queue for execution. The system automatically manages the job queue and executes the jobs when resources become available. Each job is assigned a job ID, which can be used to monitor or abort the job.
  3. Job Execution: The execute method in your Queueable class is invoked when your job reaches the front of the queue. This method contains the logic for the operations to be performed.
  4. Job Completion: Once the execute method has finished running, the job is removed from the queue.

Queueable Apex provides several advantages over future methods and batch Apex. It supports higher limits, enables chaining of jobs, and accepts complex data types as parameters, which makes it more flexible and powerful for handling large, complex jobs.

Benefits of Queueable Apex

Queueable Apex offers several benefits that make it an ideal choice for running complex, long-running tasks. Here are a few:

  1. Higher Limits: Queueable Apex has higher governor and heap size limits compared to synchronous Apex. This means it can handle more complex transactions and larger volumes of data.
  2. Support for Complex Data Types: Unlike Batch Apex and future methods, Queueable Apex supports non-primitive data types, including sObjects and custom Apex types. This provides developers with more flexibility when designing their applications.
  3. Job Chaining: Queueable Apex allows you to chain jobs, starting a new job from within the execution of another. This is especially useful when a sequence of operations needs to be performed.
  4. Returning a Job ID: When a job is enqueued, Salesforce returns a job ID that you can use to monitor or manage the job later.

Limitations of Queueable Apex

While Queueable Apex is powerful, it also comes with a few limitations:

  1. Limited Concurrent Executions: Salesforce restricts the number of Queueable Apex jobs that can run concurrently. The cap fluctuates contingent on the Salesforce edition and the volume of user licenses.
  2. 24-Hour Limit: If a job remains in the queue for more than 24 hours, Salesforce aborts it.
  3. Order of Execution: Salesforce does not guarantee the order of execution of queued jobs. If the sequence is important, you’ll need to use chaining.

Implementation of Queueable Apex

The implementation of Queueable Apex involves creating several elements, including a generic job object (AsyncJob.cls), a callable class for method configuration (GenericCallable.cls), and a service class for the orchestration of these elements (AsyncJobService.cls). Here’s a step-by-step guide on how to go about it.

1. AsyncJob.cls – The Queueable Class

The AsyncJob.cls class is the main Queueable Apex class. This class embraces the Queueable interface and the execute method, which houses the job’s logic.

public class AsyncJob implements Queueable {

    private GenericCallable toExecute;

    public AsyncJob(GenericCallable toExecute) {

        this.toExecute = toExecute;

    }

    public void execute(QueueableContext context) {

        toExecute.call();

    }

}

In this class, you have a private variable toExecute of the GenericCallable type, which is initialized through the constructor. The execute method then invokes the call method on this GenericCallable object.

2. GenericCallable.cls – The Callable Class

The GenericCallable.cls is a wrapper around the Callable interface. This class enables dynamic method invocations, thus allowing the use of various classes and methods in your Queueable job.

public class GenericCallable implements Callable {

    private Callable toCall;

    private Map<String, Object> params;

    public GenericCallable(Callable toCall, Map<String, Object> params) {

        this.toCall = toCall;

        this.params = params;

    }

    public Object call() {

        return toCall.call(params);

    }

}

In this class, toCall is a Callable object, and params is a map holding parameters for the method to be called. The call method then invokes the method on the Callable object with the specified parameters.

3. AsyncJobService.cls – The Service Class

The AsyncJobService.cls acts as the orchestrator. It creates the GenericCallable object and the AsyncJob object and then enqueues the job.

public class AsyncJobService {

    public static void run(Callable toCall, Map<String, Object> params) {

        GenericCallable callable = new GenericCallable(toCall, params);

        AsyncJob job = new AsyncJob(callable);

        System.enqueueJob(job);

    }

}

In the run method, a GenericCallable object and an AsyncJob object are created. The AsyncJob object is then added to the queue using the System.enqueueJob method.

To use this implementation, you can simply call the run method of the AsyncJobService class with the class and method you want to invoke and the parameters for that method.

This implementation provides a generic, reusable framework for executing Queueable Apex jobs, making it easier to run different classes and methods asynchronously.

Example of Queueable Apex

Let’s go through a basic example of Queueable Apex to illustrate its usage. In this example, we’ll create a Queueable Apex class that updates the Description field for all records in the Account object.

Define the Queueable Class

First, we define a class that implements the Queueable interface. The class includes an execute method that carries out the update operation.

public class UpdateAccountDescription implements Queueable {

    public void execute(QueueableContext context) {

        List<Account> accountsToUpdate = [SELECT Id, Description FROM Account];

        for (Account acc : accountsToUpdate) {

            acc.Description = ‘Updated description’;

        }

        update accountsToUpdate;

    }

}

In this class, UpdateAccountDescription, the execute method queries all Account records, updates the Description field, and then performs a DML update operation.

Add Job to the Queue

To add the job to the queue, we create an instance of the UpdateAccountDescription class and pass it to the System.enqueueJob method.

UpdateAccountDescription job = new UpdateAccountDescription();

ID jobId = System.enqueueJob(job);

The enqueueJob method returns a job ID that you can use to track and manage the job.

And that’s it! You’ve created a basic Queueable Apex job. The Salesforce system will automatically execute the job when resources are available, updating the Description field for all Account records.

Become a Salesforce Certified Professional

Conclusion

Queueable Apex is a powerful tool in the Salesforce developer’s arsenal. The performance of your Salesforce applications is not only elevated but the user experience is also refined through this feature. Mastering Queueable Apex can help you take your Salesforce development skills to the next level.

If you’re looking for comprehensive training to prepare for the migration or simply to enhance your Salesforce skills, consider enrolling for saasguru’s Salesforce Training Bootcamp Program. It’s designed to provide in-depth knowledge and practical experience to ensure you’re well-prepared to handle the complexities of Salesforce.

Join our vibrant community on Slack. This is a hub for you to engage, share insights, and grow alongside other SaaS aficionados. 

Don’t delay—join us today and begin networking!

Frequently Asked Questions (FAQs)

1. What is the Use of Queueable Apex in Salesforce?

Queueable Apex in Salesforce is used for running asynchronous operations, allowing complex processes to be executed separately from the main execution thread. This feature is crucial for operations that are too lengthy or complex to run in a synchronous context without hitting governor limits. It enables developers to manage and perform background tasks, such as data processing and integration calls, efficiently without disrupting the user interface or the flow of the application.

2. What are the Advantages of Queueable Apex in Salesforce?

The advantages of Queueable Apex include:

  • Higher Limits: Compared to synchronous Apex, Queueable Apex offers higher governor and heap size limits, allowing more extensive data processing.
  • Flexibility with Data Types: It supports complex data types, including sObjects and custom Apex types, providing more flexibility in handling diverse data.
  • Job Chaining: Queueable Apex allows for chaining of jobs, enabling a sequence of operations to be performed one after the other.
  • Monitoring Capability: Each enqueued job returns a job ID, which can be used to track the status of the job or to abort it if necessary.

3. What is the Difference Between Batch Apex and Queueable Apex?

Batch Apex and Queueable Apex are both used for asynchronous processing but have key differences:

  • Design Purpose: Batch Apex is designed for processing large data sets that need to be divided into smaller chunks, while Queueable Apex is ideal for handling individual asynchronous jobs that are too complex for a single transaction.
  • Concurrency and Sequencing: Batch Apex processes records in batches and is more suitable for large-scale data operations, whereas Queueable Apex is more flexible for chaining jobs and executing complex singular operations.
  • Usage Simplicity: Queueable Apex tends to be simpler to implement and manage compared to Batch Apex, especially for operations that don’t require batch processing of records.

4. Can We Schedule a Queueable Apex in Salesforce?

Directly scheduling Queueable Apex is not possible in the same way as scheduling Apex classes with the @Scheduled annotation. However, you can indirectly schedule a Queueable Apex job by invoking it from a scheduled Apex class or using a time-based workflow or process that triggers an Apex class, which then enqueues the Queueable job. This approach allows you to execute Queueable Apex at specified times or intervals.

Table of Contents

Subscribe & Get Closer to Your Salesforce Dream Career!

Get tips from accomplished Salesforce professionals delivered directly to your inbox.

Looking for Career Upgrade?

Book a free counselling session with our Course Advisor.

By providing your contact details, you agree to our Terms of use & Privacy Policy

Unlock Your AI -Powered Assistant

Gain Exclusive Access to Your Salesforce Copilot

Related Articles

Salesforce Announces Dreamforce 2025: Dates and Key Details

Discover the latest updates on Dreamforce 2025, including dates, location, and what to expect from Salesforce’s premier event. Read now!

Salesforce Named a Leader in 2024 for Multichannel Marketing Hubs

Salesforce recognized as a Leader in 2024 Gartner Magic Quadrant for Multichannel Marketing Hubs, driving personalized, cross-channel engagement.

Salesforce October 2024 Updates by saasguru

Salesforce’s October 2024 updates bring AI innovations, partnerships, and recognitions, driving cloud solutions across industries. Read now!