Why Apex Schedulers Sometimes Fail: Understanding and Troubleshooting Scheduled Jobs in Salesforce Apex?

Why Apex Schedulers Sometimes Fail: Understanding and Troubleshooting Scheduled Jobs in Salesforce Apex?

On February 6, 2024, Posted by , In Salesforce Apex Tutorial, With Comments Off on Why Apex Schedulers Sometimes Fail: Understanding and Troubleshooting Scheduled Jobs in Salesforce Apex?
Why Apex Schedulers Sometimes Fail: Understanding and Troubleshooting Scheduled Jobs in Salesforce Apex?
Why Apex Schedulers Sometimes Fail: Understanding and Troubleshooting Scheduled Jobs in Salesforce Apex?

How can I verify the functionality of an Apex scheduler designed for lead checks in Salesforce, considering it only operates correctly for the initial action or scheduled task, despite working as intended when executed via the Developer Console’s anonymous window?

global class CallQueueLeadChecker implements Schedulable {
    Datetime dtNow = System.now();

    global void execute(SchedulableContext SC) {
        try {
            checkLead();
        } catch (Exception e) {
            // Log the exception if something goes wrong
            System.debug('Error in CallQueueLeadChecker: ' + e.getMessage());
        }
    }

    public void checkLead() {
        // Query for Leads that match specific criteria
        List<Lead> leadList = [
            SELECT Id, Active_Call_Queue2__c  
            FROM Lead 
            WHERE Active_Call_Queue2__c = FALSE 
            AND No_Call_Queue__c = FALSE 
            AND (NOT Phone LIKE '%wrong%') 
            AND (NOT Phone LIKE '%invalid%') 
            AND (NOT MobilePhone LIKE '%wrong%') 
            AND (NOT MobilePhone LIKE '%invalid%') 
            AND (Phone != null OR MobilePhone != null) 
            AND (Status = 'Open' OR Status = 'Contacted') 
            AND Picked_By__c = null 
            AND Is_Picked__c = FALSE 
            AND (Last_Open_Timestamp_Formula__c < :dtNow OR Last_Open_Timestamp_Formula__c = NULL) 
            ORDER BY Hubspot_Score__c DESC NULLS LAST 
            LIMIT 200
        ];

        // Debug statement to log the size of the lead list
        System.debug('Number of leads fetched: ' + leadList.size());

        // Update each lead in the list
        for (Lead l : leadList) {
            l.Active_Call_Queue2__c = TRUE;
        }

        // Update the leads in Salesforce
        if (!leadList.isEmpty()) {
            update leadList;
            // Log the number of leads updated
            System.debug('Number of leads updated: ' + leadList.size());
        }
    }
}

// Scheduling the job to run every 15 minutes
System.schedule('Call Queue Checker 0', '0 0 * * * ?', new CallQueueLeadChecker());
System.schedule('Call Queue Checker 15', '0 15 * * * ?', new CallQueueLeadChecker());
System.schedule('Call Queue Checker 30', '0 30 * * * ?', new CallQueueLeadChecker());
System.schedule

Answer:

To address the issue of your Apex scheduler only executing the first job as expected, and to ensure robust and efficient execution of subsequent jobs, you can consider the following enhancements to your code:

  1. Improve Error Handling: Introduce try-catch blocks to gracefully handle exceptions and ensure that any runtime errors are logged for later analysis.
  2. Optimize SOQL Query: Review the SOQL query for performance and ensure it’s selective to prevent hitting governor limits.
  3. Add Debug Logs: Include debug statements to trace the execution flow and capture important variable values, which can be invaluable for troubleshooting.

Here’s how you might revise your CallQueueLeadChecker class with these suggestions:

global class CallQueueLeadChecker implements Schedulable {
    Datetime dtNow = System.now();

    global void execute(SchedulableContext SC) {
        try {
            checkLead();
        } catch (Exception e) {
            // Log the exception details
            System.debug('Exception occurred: ' + e.getMessage());
            // Consider sending an email alert or logging to a custom object for persistent error tracking
        }
    }

    public void checkLead() {
        List<Lead> leadList = new List<Lead>();
        try {
            leadList = [
                SELECT Id, Active_Call_Queue2__c 
                FROM Lead 
                WHERE Active_Call_Queue2__c = FALSE 
                    AND No_Call_Queue__c = FALSE 
                    AND (NOT Phone LIKE '%wrong%') 
                    AND (NOT Phone LIKE '%invalid%') 
                    AND (NOT MobilePhone LIKE '%wrong%') 
                    AND (NOT MobilePhone LIKE '%invalid%') 
                    AND (Phone != null OR MobilePhone != null) 
                    AND (Status = 'Open' OR Status = 'Contacted') 
                    AND Picked_By__c = null 
                    AND Is_Picked__c = FALSE 
                    AND (Last_Open_Timestamp_Formula__c < :dtNow OR Last_Open_Timestamp_Formula__c = NULL) 
                ORDER BY Hubspot_Score__c DESC NULLS LAST 
                LIMIT 200
            ];
            System.debug('Number of leads fetched: ' + leadList.size());
        } catch (QueryException qe) {
            System.debug('Error fetching leads: ' + qe.getMessage());
            // Handle the query exception
        }

        // Process the leads
        if (!leadList.isEmpty()) {
            for (Lead l : leadList) {
                l.Active_Call_Queue2__c = TRUE;
            }
            try {
                update leadList;
                System.debug('Leads updated successfully.');
            } catch (DmlException dmlEx) {
                System.debug('Error updating leads: ' + dmlEx.getMessage());
                // Handle the DML exception
            }
        }
    }
}

And your cron job setup looks correct. However, ensure that the scheduled jobs are not overlapping and that the system resources are not being overly strained at the exact times these jobs kick off.

Remember, debugging and optimizing scheduled jobs may require you to review the debug logs and potentially adjust the debug log levels to capture the necessary information. Also, keep an eye on the Salesforce governor limits and ensure that your job’s operation stays within these limits to prevent unexpected terminations.

Master Salesforce in Noida: Advance Your Career with In-Demand Skills and Lucrative Opportunities

Salesforce has swiftly emerged as a critical skill for professionals in tech-centric cities like Noida. Known as one of India’s top IT hubs, Noida hosts numerous software companies that rely on Salesforce to manage customer relationships and streamline business processes. Building proficiency in Salesforce, particularly in roles like Salesforce Admin, Developer (Apex), Lightning, and Integration, can greatly boost your career prospects in Noida. The need for these specialized skills is growing rapidly, and the competitive salaries further add to their appeal.

Why Salesforce is a Must-Have Skill in Noida

Noida has positioned itself as a key player in India’s tech industry, attracting multinational corporations and creating an increasing demand for skilled professionals. Salesforce, as a leading CRM platform, plays a pivotal role in fulfilling this demand. Salesforce training in Noida provides a distinct edge due to the city’s vibrant job market. Major companies like Deloitte, Accenture, Infosys, TCS, and Capgemini are continuously seeking certified Salesforce experts. These firms rely on specialists in Salesforce modules like Admin, Developer (Apex), Lightning, and Integration to effectively manage and enhance their Salesforce platforms.

Certified Salesforce professionals are not only highly sought after but also enjoy competitive pay scales. In Noida, Salesforce developers and administrators earn some of the highest salaries in the tech field. This makes Salesforce expertise a valuable asset, opening doors to career advancement and financial rewards. Obtaining a Salesforce certification from a reputable training provider can significantly boost your employability and pave the way for career success.

Why CRS Info Solutions is the Top Choice for Salesforce Training in Noida

CRS Info Solutions stands out as a premier institute for Salesforce training in Noida, offering extensive courses in Admin, Developer, Integration, and Lightning Web Components (LWC). Their seasoned instructors deliver not only theoretical knowledge but also practical, hands-on training to prepare you for real-world challenges. CRS Info Solutions is dedicated to helping you become a certified Salesforce professional, empowering you to step into the workforce with confidence. With a practical teaching approach and a comprehensive curriculum, you’ll be fully prepared to meet the expectations of leading employers in Noida. Begin your Salesforce journey today.

Comments are closed.