function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Akshat Tiwari 2Akshat Tiwari 2 

Need Help With The DataBase.Stateful

global class TeacherBonusClass implements database.Batchable<sObject>, Database.Stateful{
    
    
    global Integer recordsProcessed = 0;
    
    
    global static Database.QueryLocator start(Database.BatchableContext bc){
        return Database.getQueryLocator('Select Name, Salary__c from Teacher__c');
    }
    
    global static void execute(Database.BatchableContext bc, List<Teacher__c> teaList){
        
        List<Teacher__c> teaNewList = new List<Teacher__c>();
        for(Teacher__c tea: teaList){
            if(tea.Salary__c< 300000){
                tea.Salary__c = tea.Salary__c + (0.002 * tea.Salary__c);
                teaNewList.add(tea);
                
            }
            recordsProcessed = recordsProcessed + 1;
        }
        insert teaNewList;
        
    }
    
    global static void finish(Database.BatchableContext bc){
        
        Messaging.SingleEmailMessage  mail = new Messaging.SingleEmailMessage();
        string[] toAddresses = new String[] {'akshattiwari489@gmail.com'};
        mail.setSubject('Salary Bonus Alert');
        mail.setToAddresses(toAddresses);
        mail.setPlainTextBody('Your Salary Has been Incremented  by 0.2% and your new salary is');
        Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
        
        
        
        
    }

}

I am trying to maintain states accross the transaction and I am getting error " Variable Does Not Exist: recordsProcessed " when I am tring to store values inside the recordsProcessed inside for loop. What modifications should I make in the code?
@anilbathula@@anilbathula@
Hi Akshat

try this class:
global class TeacherBonusClass implements database.Batchable<sObject>, Database.Stateful{
    
    
    global Integer recordsProcessed = 0;
    
    
    global  Database.QueryLocator start(Database.BatchableContext bc){
        return Database.getQueryLocator('Select Name, Salary__c from Teacher__c');
    }
    
    global  void execute(Database.BatchableContext bc, List<Teacher__c> teaList){
        
        List<Teacher__c> teaNewList = new List<Teacher__c>();
        for(Teacher__c tea: teaList){
            if(tea.Salary__c< 300000){
                tea.Salary__c = tea.Salary__c + (0.002 * tea.Salary__c);
                teaNewList.add(tea);
                
            }
            recordsProcessed = recordsProcessed + 1;
        }
        insert teaNewList; 
        
    }
    
    global static void finish(Database.BatchableContext bc){
        
        Messaging.SingleEmailMessage  mail = new Messaging.SingleEmailMessage();
        string[] toAddresses = new String[] {'akshattiwari489@gmail.com'};
        mail.setSubject('Salary Bonus Alert');
        mail.setToAddresses(toAddresses);
        mail.setPlainTextBody('Your Salary Has been Incremented  by 0.2% and your new salary is');
        Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
        
        
        
        
    }

}

Please check line "insert teaNewlist" as you are missing mandatory fields in mapping.

Thanks
Anil.B
mukesh guptamukesh gupta
Hi Akshat,

Your code is correct , should not through error,

you can try 
recordsProcessed++;
Instead of 
recordsProcessed = recordsProcessed + 1;

if you need any assistanse, Please let me know!!

Kindly mark my solution as the best answer if it helps you.

Thanks
Mukesh 
Akshat Tiwari 2Akshat Tiwari 2
Thank you for responding @mukesh gupta and @anilbathula. I tried to make it record++  and its still not working. Also, I changed the insert to update as I wanted to update the salary

Here is modified code
 
global class TeacherBonusClass implements database.Batchable<sObject>, Database.Stateful{
    
    
    global Integer recordsProcessed = 0;
    
    
    global static Database.QueryLocator start(Database.BatchableContext bc){
        return Database.getQueryLocator('Select Name, Salary__c from Teacher__c');
    }
    
    global static void execute(Database.BatchableContext bc, List<Teacher__c> teaList){
        
        List<Teacher__c> teaNewList = new List<Teacher__c>();
        for(Teacher__c tea: teaList){
            if(tea.Salary__c< 300000){
                tea.Salary__c = tea.Salary__c + (0.002 * tea.Salary__c);
                tea.School__c = 'a055j0000033MxHAAU';
                teaNewList.add(tea);
                
            }
            recordsProcessed++;
        }
       
        update teaNewList;
        
    }
    
    global static void finish(Database.BatchableContext bc){
        
        Messaging.SingleEmailMessage  mail = new Messaging.SingleEmailMessage();
        string[] toAddresses = new String[] {'akshattiwari489@gmail.com'};
        mail.setSubject('Salary Bonus Alert');
        mail.setToAddresses(toAddresses);
        mail.setPlainTextBody('Your Salary Has been Incremented  by 0.2% and your new salary is');
        Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
        
        
        
        
    }

}



The error it shows is Variable does not exist: recordsProcessed What could be the possible reason for error?