• Syed Ovais Alii
  • NEWBIE
  • 0 Points
  • Member since 2019

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 1
    Questions
  • 0
    Replies
I have an apex batch which i tested in sandbox and it is working as expected but in production it is executing without error but not commiting the records.

I executed the same batch code in anonymous block in production that worked fine and did the commit.

Batch Code Below
global class AppointmentAvailabilityUpdateBatch  implements 
Database.Batchable<sObject>, Database.Stateful {
    
    
    global Integer recordsProcessed = 0;
    global Database.QueryLocator start(Database.BatchableContext bc) {
        Id recordTypeId =Schema.SObjectType.Appointment__c.getRecordTypeInfosByName()
            .get('Available').getRecordTypeId();
        
        DateTime dt = Date.Today().addDays(2);
        
        return Database.getQueryLocator(
            'Select id,Medical_Expert__c,Clinic__c from Appointment__c '+
            'where recordTypeid =: recordTypeId and Appointment_Date_Time__c >=: dt'
        );
    }
    
    global void execute(Database.BatchableContext bc, List<Appointment__c> scope){
        
        Set<id> clinicIdset = new Set<id>();
        Set<id> expertId = new Set<id>();
        Set<id> expertIdAvlApt = new Set<id>();
        
        
        Map<id,List<id>> clinicsWRTExpert = new Map<id,List<id>>();
        
        List<Expert_and_Clinic_Link__c>  ecUpdatenewList = new List<Expert_and_Clinic_Link__c>();
        
        List<Expert_and_Clinic_Link__c>  ecUpdateList = new List<Expert_and_Clinic_Link__c>();
                
          for(Appointment__c apt : scope){
            
            List<id> clinicidsList = new List<id>();
            
            if(clinicsWRTExpert.containsKey(apt.Medical_Expert__c)){
                clinicidsList = clinicsWRTExpert.get(apt.Medical_Expert__c);
                
                if(!clinicidsList.contains(apt.Clinic__c)){
                    clinicidsList.add(apt.Clinic__c); 
                }
               
                clinicsWRTExpert.put(apt.Medical_Expert__c,clinicidsList); 
            }else{
                clinicidsList.add(apt.Clinic__c);     
                clinicsWRTExpert.put(apt.Medical_Expert__c,clinicidsList);   
                
            }
            
            
        }
        
        List<Expert_and_Clinic_Link__c>  ecList = [Select id,Avalability_Flag__c,Clinic__c,Contact__c
                                                  from Expert_and_Clinic_Link__c];
        
        
        if(scope != null && scope.size() != 0){
            
            
            for(Expert_and_Clinic_Link__c ec : ecList){
                
                if(clinicsWRTExpert.containsKey(ec.Contact__c)){
                    
                    List<id> clinicIds = clinicsWRTExpert.get(ec.Contact__c);
                    
                    for(Id cId : clinicIds){
                        
                        if(ec.Clinic__c == cid){
                            
                            ec.Avalability_Flag__c = true;
                            
                            if(!ecUpdateList.contains(ec)){
                                ecUpdateList.add(ec);
                            }
                            
                            recordsProcessed++;
                        }
                        
                       
                    }
                    
                }
                
            }
            
          
            
        }else{
            

            for(Expert_and_Clinic_Link__c ec : ecList){
                
                ec.Avalability_Flag__c = false; 
                ecUpdateList.add(ec);
                recordsProcessed++;
                
            }
            
        }
        
        
        for(Expert_and_Clinic_Link__c ec : ecList){
            
            if(!ecUpdateList.contains(ec)){
                
                ec.Avalability_Flag__c = false; 
                ecUpdateList.add(ec);
                
            }
        }
        
        
        
        if(ecUpdateList.size() > 0){
            
           Database.SaveResult[] results = Database.update(ecUpdateList, false);
           system.debug('results::'+ results); 
        }
                

        
        
    }
    
    
        

global void finish(Database.BatchableContext bc){
    System.debug(recordsProcessed + ' records processed. Shazam!');
    AsyncApexJob job = [SELECT Id, Status, NumberOfErrors, 
                        JobItemsProcessed,
                        TotalJobItems, CreatedBy.Email
                        FROM AsyncApexJob
                        WHERE Id = :bc.getJobId()];
    
    system.debug('Total Record Updated::' + job );
    
}    
}

Code which i run in anonymous block.
 
Integer recordCount = 0;

Id recordTypeId =Schema.SObjectType.Appointment__c.getRecordTypeInfosByName()
            .get('Available').getRecordTypeId();
        
DateTime dt = Date.Today().addDays(2);


List<Appointment__c> scope = [Select id,Medical_Expert__c,Clinic__c from Appointment__c 
            where recordTypeid =: recordTypeId and Appointment_Date_Time__c >=: dt];


 	Set<id> clinicIdset = new Set<id>();
        Set<id> expertId = new Set<id>();
        Set<id> expertIdAvlApt = new Set<id>();
        
        
        Map<id,List<id>> clinicsWRTExpert = new Map<id,List<id>>();
        
        List<Expert_and_Clinic_Link__c>  ecUpdateList = new List<Expert_and_Clinic_Link__c>();
                
          for(Appointment__c apt : scope){
            
            List<id> clinicidsList = new List<id>();
            
            if(clinicsWRTExpert.containsKey(apt.Medical_Expert__c)){
                clinicidsList = clinicsWRTExpert.get(apt.Medical_Expert__c);
                
                
                if(!clinicidsList.contains(apt.Clinic__c)){
                    clinicidsList.add(apt.Clinic__c); 
                }
               
                clinicsWRTExpert.put(apt.Medical_Expert__c,clinicidsList); 
            }else{
                clinicidsList.add(apt.Clinic__c);     
                clinicsWRTExpert.put(apt.Medical_Expert__c,clinicidsList);   
                
            }
            
            
        }
        
        List<Expert_and_Clinic_Link__c>  ecList = [Select id,Avalability_Flag__c,Clinic__c,Contact__c
                                                  from Expert_and_Clinic_Link__c];
        
        
        if(scope != null && scope.size() != 0){
            
            
            for(Expert_and_Clinic_Link__c ec : ecList){
                
                if(clinicsWRTExpert.containsKey(ec.Contact__c)){

                    List<id> clinicIds = clinicsWRTExpert.get(ec.Contact__c);
                    
                    for(Id cId : clinicIds){
                        if(ec.Clinic__c == cid){
                            
                            ec.Avalability_Flag__c = true;
                            
                            if(!ecUpdateList.contains(ec)){
                                ecUpdateList.add(ec);
                            }
                            
                            recordCount++;
                        }
                        
                       
                    }
                    
                }
                
            }
            
            
        }else{
            

            for(Expert_and_Clinic_Link__c ec : ecList){
                
                ec.Avalability_Flag__c = false; 
                ecUpdateList.add(ec);
                recordCount++;
                
            }
            
        }
        
        
        for(Expert_and_Clinic_Link__c ec : ecList){
            
            if(!ecUpdateList.contains(ec)){
                
                ec.Avalability_Flag__c = false; 
                ecUpdateList.add(ec);
                
            }
        }
        
        
        
        if(ecUpdateList.size() > 0){
           system.debug('recordCount:'+recordCount); 
           update ecUpdateList;
        }

These line in the batch class are executing. i debugged it but seems like it rolls back after that. 
if(ecUpdateList.size() > 0){
            
           Database.SaveResult[] results = Database.update(ecUpdateList, false);
           system.debug('results::'+ results); 
        }

Same batch is working fine in sandbox without any issue. I already checked the profile permission fls and class access everything seems fine.

HELP!!!!