Close Menu
SalesforceCodex
    Facebook X (Twitter) Instagram
    Trending
    • The Ultimate Guide to Data Cleanup Techniques for Salesforce
    • How to Leverage Model Context Protocol (MCP) to Enhance Salesforce AI
    • Top Mistakes Developers Make in Salesforce Apex Triggers
    • Introducing Agentforce3 to Salesforce Developers
    • The Ultimate Guide to Apex Order of Execution for Developers
    • How to Handle Bulkification in Apex with Real-World Use Cases
    • How to Confidently Manage Transactions in Salesforce Apex
    • Building a Dynamic Tree Grid in Lightning Web Component
    Facebook X (Twitter) Instagram
    SalesforceCodex
    Subscribe
    Saturday, August 2
    • Home
    • Salesforce Platform
      • Architecture
      • Apex
      • Lightning Web Components
      • Integration
      • Flows & Automation
      • Best Practices
      • Questions
      • News
      • Books Testimonial
    • Industries
      • Artificial Intelligence
    • Hire Me
    • Certification
      • How to Prepare for Salesforce Integration Architect Exam
      • Certification Coupons
    • Downloads
      • Salesforce Release Notes
      • Apex Coding Guidelines
    • About Us
      • Privacy Policy
    • Contact Us
    SalesforceCodex
    Home»Salesforce»Apex»How to Implement Basic Queueable Chaining in Salesforce Apex

    How to Implement Basic Queueable Chaining in Salesforce Apex

    Dhanik Lal SahniBy Dhanik Lal SahniMarch 31, 2025Updated:April 24, 2025No Comments5 Mins Read
    Facebook Twitter Pinterest LinkedIn Tumblr Email
    Queueable Chaining in Salesforce Apex
    Share
    Facebook Twitter LinkedIn Pinterest Email

    Salesforce Queueable Apex is an asynchronous process that runs long processes efficiently in the background. Sometimes, we need to execute another queueable job on completion of the first job for handling business requests. This is called queueable chanining. This post will explain queueable chaining and how to implement it in Salesforce Apex.

    We can also handle job chaining using Salesforce Batch and Schedule Apex. For this post, we will use a Queueable Apex job.

    What is Queueable Chaining in Salesforce?

    Queueable Chaining is the process of executing a sequence of Salesforce queuable apex jobs, where one job enqueues another job after it completes execution. This allows sequential, asynchronous processing of tasks in Salesforce.

    Use Case for Queueable Chaining

    Medstore, a pharma company, sells medical products online. It needs order processing within the Salesforce system. It should validate orders, process payments, generate invoices, and then update inventory.

    Solution

    We can handle the above business request using queueable apex chaining. Below are two solutions for handling queueable apex

    1. Strong Coupled Solution
    2. Loose Coupled Solution

    In this post, we will explore a strongly coupled solution, and in another post, we will solve the above business requirement using the loose-coupled solution.

    Strong Coupled Solution

    In a strongly coupled solution, we place the next job name in the current job’s apex. As we put the next job in the current job itself, both apex jobs are tightly coupled. So we can not change the next job at runtime.

    Below are apex classes to handle business requests using strongly coupled architecture.

    ValidationQueueable:

    This queueble apex will validate orders and customer information for order processing. Once the order queueable logic is finished, it will put the PaymentQueueable job in the queue.

    public class ValidationQueueable implements Queueable {
    OrderRequest request;
    public ValidationQueueable(OrderRequest reqst)
    {
    request=reqst;
    }
    public void execute(QueueableContext context) {
    System.debug('ValidationQueueable Called with params:'+ request);
    //Put all Validation Logic here
    //....
    // At the end start PaymentQueueable Job
    System.enqueueJob(new PaymentQueueable(request));
    }
    }

    PaymentQueueable

    PaymentQueueable class will handle payment-related logic for order processing. It might be a new payment system addition or an existing wallet/card payment; it will handle all the business logic. Once all payment information is finished, we can add the next apex job, InvoiceQueueable in the queue.

    public class PaymentQueueable implements Queueable {
    OrderRequest request;
    public PaymentQueueable(OrderRequest reqst)
    {
    request=reqst;
    }
    public void execute(QueueableContext context) {
    System.debug('PaymentQueueable Called with params:'+ request);
    //Put all Payment Related Logic here
    //....
    // At the end start InvoiceQueueable
    System.enqueueJob(new InvoiceQueueable(request));
    }
    }

    InvoiceQueueable

    InvoiceQueueable will handle business logic related to invoicing. All document processing can be handled in this queueable. Once we finish invoicing logic, we can put InventoryQueueable apex in queue for execution.

    public class InvoiceQueueable implements Queueable {
    OrderRequest request;
    public InvoiceQueueable(OrderRequest reqst)
    {
    request=reqst;
    }
    public void execute(QueueableContext context) {
    System.debug('InvoiceQueueable Called with params:'+ request);

    //Put all Invoicing Related Logic here
    //....
    // At the end start InvoiceQueueable
    System.enqueueJob(new InventoryQueueable(request));
    }
    }

    InventoryQueueable

    InventoryQueueable apex jobs will handle inventory-related logic, like updating product inventory in the warehouse. If inventory goes beyond the minimum threshold, then it will send an email to the warehouse manager about the inventory.

    public class InventoryQueueable implements Queueable {
    OrderRequest request;
    public InventoryQueueable(OrderRequest reqst)
    {
    request=reqst;
    }
    public void execute(QueueableContext context) {
    System.debug('InventoryQueueable Called with params:'+ request);
    //Put all Inventory Related Logic here
    //....
    }
    }

    OrderRequest wrapper class has parameters that will be used to pass information to all queueable classes. These parameters will be passed from the first queueable class (ValidationQueueable).

    public class OrderRequest {
    public string customerId;
    public string paymentId;
    public string orderId;
    }

    To run the first queueable class, we can add a scheduler apex or invocable method. If we want to execute it from any user interface (LWC or Aura), then we can add controller class. To execute it from flow, we can add an invocable method. To run from developer console, execute below code

    System.enqueueJob(new ValidationQueueable(null));

    Benefits of this solution

    This solution is easy to implement, and even a new developer with little experience can handle it with guidance.

    Disadvantage of this solution

    This solution is tightly coupled, so if we need to remove or add a new queueable in the queue, then we have to change the code. We also have to test both queueable jobs; we even need to change a single queueable job.

    Similar Posts

    • Avoid Batch Apex and Use Queueable Class
    • Transaction Finalizers for Salesforce Queueable Job
    • Enhancing Performance with File Compression in Apex
    • How to Correctly Publish Platform Event Using Salesforce Apex
    • How to Manage Technical Debt in Salesforce
    • How to Elevate Your Career to Salesforce Architect
    • Handle Heap Size for Apex Code Optimization
    • Implementing Apex Cursors for Optimal Resource Management in Salesforce
    • Build Scalable Solutions with Salesforce
    • Dynamic Code Execution using Callable Interface
    • Optimizing Salesforce Apex Code
    • Revisit Asynchronous Apex : Type and Usage
    • Salesforce Interview Question for Asynchronous Apex
    • Top 20 Salesforce Developer Interview Questions
    • Queueable Vs Batch Apex In Salesforce
    apex Apex Chaining Async Jobs in Apex Asynchronous apex asynchronous processes in salesforce Queueable queueable apex queueable chaining salesforce salesforce apex Schedule Apex
    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
    Previous ArticleHow to Suppress PMD Warnings in Salesforce Apex
    Next Article How to Implement Dynamic Queueable Chaining in Salesforce Apex
    Dhanik Lal Sahni
    • Website
    • Facebook
    • X (Twitter)

    With over 18 years of experience in web-based application development, I specialize in Salesforce technology and its ecosystem. My journey has equipped me with expertise in a diverse range of technologies including .NET, .NET Core, MS Dynamics CRM, Azure, Oracle, and SQL Server. I am dedicated to staying at the forefront of technological advancements and continuously researching new developments in the Salesforce realm. My focus remains on leveraging technology to create innovative solutions that drive business success.

    Related Posts

    By Dhanik Lal Sahni6 Mins Read

    How to Leverage Model Context Protocol (MCP) to Enhance Salesforce AI

    July 28, 2025
    By Dhanik Lal Sahni7 Mins Read

    Top Mistakes Developers Make in Salesforce Apex Triggers

    July 25, 2025
    By Dhanik Lal Sahni14 Mins Read

    The Ultimate Guide to Apex Order of Execution for Developers

    July 20, 2025
    Add A Comment
    Leave A Reply Cancel Reply

    Ranked #1 Salesforce Developer Blog by SalesforceBen.com
    SFBenTopDeveloper
    Ranked #4 Salesforce Developer Blog by ApexHours.com
    ApexHoursTopDevelopers
    Categories
    Archives
    Tags
    apex (116) apex best practices (5) apex code best practice (10) apex code optimization (6) Apex logging (4) apex rest (11) apex trigger best practices (6) architecture (22) Asynchronous apex (9) AWS (5) batch apex (10) best code practice (4) code optimization (9) custom metadata types (5) design principle (9) flow (16) google (6) google api (4) integration (19) integration architecture (6) lighting (8) lightning (66) lightning-combobox (5) lightning-datatable (10) lightning component (32) Lightning web component (64) lwc (53) named credential (8) news (4) optimize apex (5) optimize apex code (6) optimize apex trigger (5) Permission set (4) Queueable (9) queueable apex (4) rest api (23) salesforce (150) salesforce apex (52) salesforce api integration (5) Salesforce Interview Question (5) salesforce news (5) salesforce question (5) solid (6) tooling api (5) Winter 20 (8)

    Get our newsletter

    Want the latest from our blog straight to your inbox? Chucks us your detail and get mail when new post is published.
    * indicates required

    MailChimp

    Expert Salesforce Developer and Architect
    Ranked #1 SALESFORCE DEVELOPER BLOG BY SALESFORCEBEN.COM
    Featured on Top Salesforce Developer Blog By ApexHours
    Recent Posts
    • The Ultimate Guide to Data Cleanup Techniques for Salesforce
    • How to Leverage Model Context Protocol (MCP) to Enhance Salesforce AI
    • Top Mistakes Developers Make in Salesforce Apex Triggers
    • Introducing Agentforce3 to Salesforce Developers
    • The Ultimate Guide to Apex Order of Execution for Developers
    Ranked in Top Salesforce Blog by feedspot.com
    RSS Recent Stories
    • Top 10 Salesforce CRM Trends to Watch in 2025 July 18, 2025
    • Discover the Top 10 Salesforce AppExchange Apps to Boost Productivity July 10, 2025
    • Top 20 Salesforce Data Cloud Interview Questions & Answers for Admins June 5, 2025
    • How to Connect Excel to Salesforce to Manage Your Data and Metadata February 9, 2025
    • Difference Between With Security and Without Security in Apex January 2, 2025
    Archives
    Categories
    Tags
    apex (116) apex best practices (5) apex code best practice (10) apex code optimization (6) Apex logging (4) apex rest (11) apex trigger best practices (6) architecture (22) Asynchronous apex (9) AWS (5) batch apex (10) best code practice (4) code optimization (9) custom metadata types (5) design principle (9) flow (16) google (6) google api (4) integration (19) integration architecture (6) lighting (8) lightning (66) lightning-combobox (5) lightning-datatable (10) lightning component (32) Lightning web component (64) lwc (53) named credential (8) news (4) optimize apex (5) optimize apex code (6) optimize apex trigger (5) Permission set (4) Queueable (9) queueable apex (4) rest api (23) salesforce (150) salesforce apex (52) salesforce api integration (5) Salesforce Interview Question (5) salesforce news (5) salesforce question (5) solid (6) tooling api (5) Winter 20 (8)

    Get our newsletter

    Want the latest from our blog straight to your inbox? Chucks us your detail and get mail when new post is published.
    * indicates required

    Facebook X (Twitter) Instagram Pinterest YouTube Tumblr LinkedIn Reddit Telegram
    © 2025 SalesforceCodex.com. Designed by Vagmine Cloud Solution.

    Type above and press Enter to search. Press Esc to cancel.

    Ad Blocker Enabled!
    Ad Blocker Enabled!
    Our website is made possible by displaying online advertisements to our visitors. Please support us by disabling your Ad Blocker.