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
SriniSrini 

BatchApex

Hi Team,

We have updated the Total_Sw_Channel_Manager__c and Total_Sw_Account_Manager__c field on opportunity using trigger which is working fine mentiiend below.But problem is this is effecting some other functionality.So we want to create batch apex based on below trigger logic.Can any one please help me to creating batch logic.

trigger OpportunitySplitTrigger on OpportunitySplit (after insert,after update, before delete,after unDelete) 
{
    set<id> oppIds = new set<id>();
    if(trigger.isafter)
    {
        for(OpportunitySplit opsp : trigger.new)
        {
            if((trigger.isupdate && opsp.Role_Name__c != trigger.oldmap.get(opsp.id).Role_Name__c ) || trigger.isinsert)
            oppIds.add(opsp.opportunityId);
        }
    }
    if(trigger.isbefore && trigger.isdelete)
    {
        for(OpportunitySplit opsp : trigger.old)
        {
            if(RecourssionClass.iscalledsplitdeletefunctionality == false){
                RecourssionClass.iscalledsplitdeletefunctionality = true;
                //oppIds.add(opsp.opportunityId);
            }
        }
    }
    
    if(oppIds.size()>0)
    {
        list<opportunity> lstOppToUpdate = new list<opportunity>();
        for(Opportunity opp : [select id,Total_Sw_Channel_Manager__c,Total_Sw_Account_Manager__c,(select id,Role_Name__c  from OpportunitySplits where Role_Name__c ='SW Account Manager' OR Role_Name__c ='SW Channel Manager') from opportunity where id in:oppIds])
        {
            integer sumAcMngr =0;
            integer sumChMgnr =0;
            if(opp.OpportunitySplits.size()>0)
            {
                for(OpportunitySplit oSplit : opp.OpportunitySplits)
                {
                    if(oSplit.Role_Name__c =='SW Account Manager' )
                        sumAcMngr+=1; 
                    else if(oSplit.Role_Name__c =='SW Channel Manager')
                        sumChMgnr +=1;
                }
            }
            opp.Total_Sw_Channel_Manager__c = sumChMgnr;
            opp.Total_Sw_Account_Manager__c= sumAcMngr;
            lstOppToUpdate.add(opp);
        }
        if(lstOppToUpdate.size()>0)
            update lstOppToUpdate;
    }
}

Thanks in Advance
Best Answer chosen by Srini
Nayana KNayana K
global class OpportunitySplitBatch implements Database.Batchable<Sobject> {
    
    
    global OpportunitySplitBatch() {
    }
    
    global Database.QueryLocator start(Database.BatchableContext BC) {
        Id idOpp = 'xxxxxxxxxx';
        String query = 'SELECT Id FROM Opportunity WHERE Id =:idOpp ';
        return Database.getQueryLocator(query);
    }

       global void execute(Database.BatchableContext BC, List<Opportunity> lstOpp) {
           
        Map<Id, Integer> mapIdOppTosumAcMngr = new Map<Id, Integer>();
        Map<Id, Integer> mapIdOppTosumChMgnr = new Map<Id, Integer>();
        Map<Id, Opportunity> mapOpportunity = new Map<Id, Opportunity>(lstOpp);
        Opportunity objOppToUpdate;
        List<Opportunity> lstOppToUpdate = new List<Opportunity>();
        
        // opportunities with children opportunity splits
        for(OpportunitySplit objOppSplit : [SELECT Id, Role_Name__c, OpportunityId 
                                            FROM OpportunitySplit 
                                            WHERE Role_Name__c IN ('SW Account Manager','SW Channel Manager') 
                                                AND OpportunityId IN: mapOpportunity.keySet() ])
        { 
            if(objOppSplit.Role_Name__c == 'SW Account Manager')
                mapIdOppTosumAcMngr.put(objOppSplit.OpportunityId, mapIdOppTosumAcMngr.containsKey(objOppSplit.OpportunityId) ? (mapIdOppTosumAcMngr.get(objOppSplit.OpportunityId)+1): 1);
            else 
                mapIdOppTosumChMgnr.put(objOppSplit.OpportunityId, mapIdOppTosumChMgnr.containsKey(objOppSplit.OpportunityId) ? (mapIdOppTosumChMgnr.get(objOppSplit.OpportunityId)+1): 1);    
        }
        
        
    
        for(Opportunity objOpp : mapOpportunity.values())
        {
            objOppToUpdate = new Opportunity(Id = objOpp.Id);
            
            objOppToUpdate .Total_Sw_Account_Manager__c = mapIdOppTosumAcMngr.containsKey(objOpp.Id) ? mapIdOppTosumAcMngr.get(objOpp.Id) : 0;
            objOppToUpdate .Total_Sw_Channel_Manager__c = mapIdOppTosumChMgnr.containsKey(objOpp.Id) ? mapIdOppTosumChMgnr.get(objOpp.Id) : 0;
            lstOppToUpdate.add(objOppToUpdate );
            
        }
        if(!lstOppToUpdate.isEmpty())
            update lstOppToUpdate;
    }
    
    global void finish(Database.BatchableContext BC) {
        
    }
    
}



Please try this.  
?: is ternary operator which works like if condition.

All Answers

Nayana KNayana K
global class OpportunitySplitBatch implements Database.Batchable<Sobject> {
	
	
	global OpportunitySplitBatch() {
	}
	
	global Database.QueryLocator start(Database.BatchableContext BC) {
		
		String query = 'SELECT Id FROM Opportunity';
		return Database.getQueryLocator(query);
	}

   	global void execute(Database.BatchableContext BC, List<Opportunity> lstOpp) {
   	    
	    Map<Id, Integer> mapIdOppTosumAcMngr = new Map<Id, Integer>();
		Map<Id, Integer> mapIdOppTosumChMgnr = new Map<Id, Integer>();
		Map<Id, Opportunity> mapOpportunityToUpdate = new Map<Id, Opportunity>();
		Map<Id, Opportunity> mapOpportunity = new Map<Id, Opportunity>(lstOpp);
	    
	    // opportunities with children opportunity splits
        for(OpportunitySplit objOppSplit : [SELECT Id, Role_Name__c, OpportunityId 
											FROM OpportunitySplit 
											WHERE Role_Name__c IN ('SW Account Manager','SW Channel Manager') 
												AND OpportunityId IN: mapOpportunity.keySet() ])
        { 
            if(objOppSplit.Role_Name__c == 'SW Account Manager')
				mapIdOppTosumAcMngr.put(mapIdOppTosumAcMngr.containsKey(objOppSplit.OpportunityId) ? (mapIdOppTosumAcMngr.get(objOppSplit.OpportunityId)+1) : 1);
			else 
				mapIdOppTosumChMgnr.put(mapIdOppTosumChMgnr.containsKey(objOppSplit.OpportunityId) ? (mapIdOppTosumChMgnr.get(objOppSplit.OpportunityId)+1) : 1);	
				
			if(mapOpportunityToUpdate.containsKey(objOppSplit.OpportunityId))
			{
				mapOpportunityToUpdate.get(objOppSplit.OpportunityId).put('Total_Sw_Channel_Manager__c', mapIdOppTosumChMgnr.get(objOppSplit.OpportunityId));
				mapOpportunityToUpdate.get(objOppSplit.OpportunityId).put('Total_Sw_Account_Manager__c', mapIdOppTosumAcMngr.get(objOppSplit.OpportunityId));
			}
			else
				mapOpportunityToUpdate.put(objOppSplit.OpportunityId, new Opportunity(Id = objOppSplit.OpportunityId, 
																						Total_Sw_Channel_Manager__c = mapIdOppTosumChMgnr.get(objOppSplit.OpportunityId),
																						Total_Sw_Account_Manager__c = mapIdOppTosumAcMngr.get(objOppSplit.OpportunityId)));
			
			if(mapOpportunity.containsKey(objOppSplit.OpportunityId))
				mapOpportunity.remove(objOppSplit.OpportunityId);
        }
		
		// opportunties with 0 children Opportunity splits
		for(Opportunity objOpp : mapOpportunity.values())
		{
			mapOpportunityToUpdate.put(objOpp.Id, new Opportunity(Id = objOpp.Id, 
																Total_Sw_Channel_Manager__c = 0,
																Total_Sw_Account_Manager__c = 0));
			
		}
        if(!mapOpportunityToUpdate.isEmpty())
            update mapOpportunityToUpdate.values();
	}
	
	global void finish(Database.BatchableContext BC) {
		
	}
	
}

 
SriniSrini
Hi Nayana ,

Thanks for your help.Not able to understand the code line number 33.I have tried your logic we are facing the errors like ine breaks not allowed in string literals at line 21 .Can you please update the below code.

global class OpportunitySplitBatch implements Database.Batchable<Sobject>{
     global OpportunitySplitBatch(){         
     }
     global Database.QueryLocator start(Database.BatchableContext BC){
         String query = 'SELECT Id FROM Opportunity';
         return Database.getQueryLocator(query);
        }
     global void execute(Database.BatchableContext BC, List<Opportunity> lstOpp){
         Map<Id,Integer> MapIdOppTosumAcMngr = new Map<Id,Integer>();
         Map<Id,Integer> MapIdOppTosumChMgnr = new Map<Id,Integer>();
         Map<Id,Opportunity> MapOpportunityToUpdate = new Map<Id,Opportunity>();
         Map<Id,Opportunity> MapOpportunity = new Map<Id,Opportunity>(lstOpp);
      // opportunities with children opportunity splits
         for(OpportunitySplit objOppSplit : [SELECT Id,Role_Name__c,OpportunityId FROM OpportunitySplit WHERE Role_Name__c IN ('SW Account Manager','SW Channel Manager') AND OpportunityId IN: mapOpportunity.keySet()]){
             if(objOppSplit.Role_Name__c == 'SW Account Manager')
                 apIdOppTosumAcMngr.put(MapIdOppTosumAcMngr.containsKey(objOppSplit);apIdOppTosumAcMngr.get(objOppSplit.OpportunityId)+1) : 1);
             else
                 MapIdOppTosumChMgnr.put(MapIdOppTosumChMgnr.containsKey(objOppSplit);MapIdOppTosumChMgnr.get(objOppSplit.OpportunityId)+1) : 1);
             
             if(MapOpportunityToUpdate.containsKey(objOppSplit.OpportunityId)){
                 MapOpportunityToUpdate.get(objOppSplit.OpportunityId).put('Total_SMapIdOppTosumChMgnr.get(objOppSplit.OpportunityId));
                 MapOpportunityToUpdate.get(objOppSplit.OpportunityId).put('Total_SmapIdOppTosumAcMngr.get(objOppSplit.OpportunityId));
                }
              else
                  MapOpportunityToUpdate.put(objOppSplit.OpportunityId,new OpportunityId) = objOppSplit),OpportunityId = MapIdOppTosumChMgnr.get(objOppSplit.OpportunityId) = MapIdOppTosumAcMngr.get(objOppSplit.OpportunityId)));
              if(MapOpportunity.containsKey(objOppSplit.OpportunityId))
                  MapOpportunity.remove(objOppSplit.OpportunityId);
          }
          // opportunties with 0 children Opportunity splits
               for(Opportunity objOpp : MapOpportunity.values()){
                   MapOpportunityToUpdate.put(objOpp.Id,new Opportunity(Id = objOpp.Id,Total_Sw_Channel_Manager__c = 0,Total_Sw_Account_Manager__c = 0 ));
               }
               if(!MapOpportunityToUpdate.isEmpty()){
                   update MapOpportunityToUpdate.values();
                   }
                   
            global void finish(Database.BatchableContext BC){
                
            }
        }
    }        
    
    
Thanks

 
Nayana KNayana K
global class OpportunitySplitBatch implements Database.Batchable<Sobject> {
    
    
    global OpportunitySplitBatch() {
    }
    
    global Database.QueryLocator start(Database.BatchableContext BC) {
        
        String query = 'SELECT Id FROM Opportunity';
        return Database.getQueryLocator(query);
    }

       global void execute(Database.BatchableContext BC, List<Opportunity> lstOpp) {
           
        Map<Id, Integer> mapIdOppTosumAcMngr = new Map<Id, Integer>();
        Map<Id, Integer> mapIdOppTosumChMgnr = new Map<Id, Integer>();
        Map<Id, Opportunity> mapOpportunityToUpdate = new Map<Id, Opportunity>();
        Map<Id, Opportunity> mapOpportunity = new Map<Id, Opportunity>(lstOpp);
        
        // opportunities with children opportunity splits
        for(OpportunitySplit objOppSplit : [SELECT Id, Role_Name__c, OpportunityId 
                                            FROM OpportunitySplit 
                                            WHERE Role_Name__c IN ('SW Account Manager','SW Channel Manager') 
                                                AND OpportunityId IN: mapOpportunity.keySet() ])
        { 
            if(objOppSplit.Role_Name__c == 'SW Account Manager')
                mapIdOppTosumAcMngr.put(objOppSplit.OpportunityId, mapIdOppTosumAcMngr.containsKey(objOppSplit.OpportunityId) ? (mapIdOppTosumAcMngr.get(objOppSplit.OpportunityId)+1): 1);
            else 
                mapIdOppTosumChMgnr.put(objOppSplit.OpportunityId, mapIdOppTosumChMgnr.containsKey(objOppSplit.OpportunityId) ? (mapIdOppTosumChMgnr.get(objOppSplit.OpportunityId)+1): 1);    
                
            if(mapOpportunityToUpdate.containsKey(objOppSplit.OpportunityId))
            {
                mapOpportunityToUpdate.get(objOppSplit.OpportunityId).put('Total_Sw_Channel_Manager__c', mapIdOppTosumChMgnr.get(objOppSplit.OpportunityId));
                mapOpportunityToUpdate.get(objOppSplit.OpportunityId).put('Total_Sw_Account_Manager__c', mapIdOppTosumAcMngr.get(objOppSplit.OpportunityId));
            }
            else
                mapOpportunityToUpdate.put(objOppSplit.OpportunityId, new Opportunity(Id = objOppSplit.OpportunityId, 
                                                                                        Total_Sw_Channel_Manager__c = mapIdOppTosumChMgnr.get(objOppSplit.OpportunityId),
                                                                                        Total_Sw_Account_Manager__c = mapIdOppTosumAcMngr.get(objOppSplit.OpportunityId)));
            
            if(mapOpportunity.containsKey(objOppSplit.OpportunityId))
                mapOpportunity.remove(objOppSplit.OpportunityId);
        }
        
        // opportunties with 0 children Opportunity splits
        for(Opportunity objOpp : mapOpportunity.values())
        {
            mapOpportunityToUpdate.put(objOpp.Id, new Opportunity(Id = objOpp.Id, 
                                                                Total_Sw_Channel_Manager__c = 0,
                                                                Total_Sw_Account_Manager__c = 0));
            
        }
        if(!mapOpportunityToUpdate.isEmpty())
            update mapOpportunityToUpdate.values();
    }
    
    global void finish(Database.BatchableContext BC) {
        
    }
    
}
SriniSrini
@Nayana,

And also can you please correct me to line numbers are  Which you are mentioend in the code
if(objOppSplit.Role_Name__c == 'SW Account Manager')
27  mapIdOppTosumAcMngr.put(mapIdOppTosumAcMngr.containsKey(objOppSplit.OpportunityId) ? (mapIdOppTosumAcMngr.get(objOppSplit.OpportunityId)+1) : 1);
28      else
29                mapIdOppTosumChMgnr.put(mapIdOppTosumChMgnr.containsKey(objOppSplit.OpportunityId) ? (mapIdOppTosumChMgnr.get(objOppSplit.OpportunityId)+1) : 1);  

Thanks
Nayana KNayana K
I have updated those lines to :
 if(objOppSplit.Role_Name__c == 'SW Account Manager')
                mapIdOppTosumAcMngr.put(objOppSplit.OpportunityId, mapIdOppTosumAcMngr.containsKey(objOppSplit.OpportunityId) ? (mapIdOppTosumAcMngr.get(objOppSplit.OpportunityId)+1): 1);
            else 
                mapIdOppTosumChMgnr.put(objOppSplit.OpportunityId, mapIdOppTosumChMgnr.containsKey(objOppSplit.OpportunityId) ? (mapIdOppTosumChMgnr.get(objOppSplit.OpportunityId)+1): 1);    

I had missed adding key into map.
Check now
Nayana KNayana K
the lines :
if(objOppSplit.Role_Name__c == 'SW Account Manager')
                mapIdOppTosumAcMngr.put(objOppSplit.OpportunityId, mapIdOppTosumAcMngr.containsKey(objOppSplit.OpportunityId) ? (mapIdOppTosumAcMngr.get(objOppSplit.OpportunityId)+1): 1);
            else 
                mapIdOppTosumChMgnr.put(objOppSplit.OpportunityId, mapIdOppTosumChMgnr.containsKey(objOppSplit.OpportunityId) ? (mapIdOppTosumChMgnr.get(objOppSplit.OpportunityId)+1): 1);    


can be re-written in simple way like this :

if(objOppSplit.Role_Name__c == 'SW Account Manager')
{
if(mapIdOppTosumAcMngr.containsKey(objOppSplit.OpportunityId))      
mapIdOppTosumAcMngr.put(objOppSplit.OpportunityId, mapIdOppTosumAcMngr.get(objOppSplit.OpportunityId)+1);
else
mapIdOppTosumAcMngr.put(objOppSplit.OpportunityId, 1);
}
 else 
{
if(mapIdOppTosumChMgnr.containsKey(objOppSplit.OpportunityId))      
mapIdOppTosumChMgnr.put(objOppSplit.OpportunityId, mapIdOppTosumChMgnr.get(objOppSplit.OpportunityId)+1);
else
mapIdOppTosumChMgnr.put(objOppSplit.OpportunityId, 1);
}
              
 
SriniSrini
Hi Nayana,

Compilation is Succesfully completed but i want to know how to test the batch working or not.Can you please tell me how to check one opprtuntiyid whether batch is running or not,Where i can  put the one opprtunityid in SOQL.

Please update hear Developer console Logic.
Once again Thankyou.Please help us

Thanks

 
SriniSrini
@Nayana,

I have done the testing..With one id. It is not update the count of total SW account manager .Can you please check the below code which we are tried.

global class OpportunitySplitBatch implements Database.Batchable<Sobject>{
    global OpportunitySplitBatch(){         
    }
    global Database.QueryLocator start(Database.BatchableContext BC){
        String query = 'select id, Total_Sw_Channel_Manager__c, Total_Sw_Account_Manager__c, (select id, Role_Name__c  from OpportunitySplits where Role_Name__c = \'SW Account Manager\' OR Role_Name__c =\'SW Channel Manager\') from Opportunity where Id= \'  xxxxxx \' ';
    
     return Database.getQueryLocator(query);
    }
    global void execute(Database.BatchableContext BC,List<Opportunity> lstOpp){
        Map<Id,Integer> MapIdOppTosumAcMngr = new Map<Id,Integer>();
        Map<Id,Integer> MapIdOppTosumChMgnr = new Map<Id,Integer>();
        Map<Id,Opportunity> MapOpportunityToUpdate = new Map<Id,Opportunity>();
        Map<Id,Opportunity> MapOpportunity = new Map<Id,Opportunity>(lstOpp);
        
     // opportunities with children opportunity splits
     
            for(OpportunitySplit objOppSplit : [SELECT Id,Role_Name__c,OpportunityId FROM OpportunitySplit WHERE Role_Name__c IN ('SW Account Manager','SW Channel Manager') AND OpportunityId IN: MapOpportunity.keySet()]){
                     if(objOppSplit.Role_Name__c == 'SW Account Manager'){
                     if(MapIdOppTosumAcMngr.containsKey(objOppSplit.OpportunityId)) 
                        MapIdOppTosumAcMngr.put(objOppSplit.OpportunityId,MapIdOppTosumAcMngr.get(objOppSplit.OpportunityId)+1);
                        else
                            MapIdOppTosumAcMngr.put(objOppSplit.OpportunityId,1);
                    }
                     else{
                         if(MapIdOppTosumChMgnr.containsKey(objOppSplit.OpportunityId))
                            MapIdOppTosumChMgnr.put(objOppSplit.OpportunityId, MapIdOppTosumChMgnr.get(objOppSplit.OpportunityId)+1);
                            else
                                MapIdOppTosumChMgnr.put(objOppSplit.OpportunityId,1);
                        }            
                        // opportunties with 0 children Opportunity splits
                        for(Opportunity objOpp : MapOpportunity.values()){
                            MapOpportunityToUpdate.put(objOpp.Id,new Opportunity(Id = objOpp.Id,Total_Sw_Channel_Manager__c = 0,Total_Sw_Account_Manager__c = 0 ));
                        }
                        if(!MapOpportunityToUpdate.isEmpty())
                            update MapOpportunityToUpdate.values();
            }
    }
    global void finish(Database.BatchableContext BC){        
    }
}
   
Thanks      
    
    
 
Nayana KNayana K
global class OpportunitySplitBatch implements Database.Batchable<Sobject> {
    
    
    global OpportunitySplitBatch() {
    }
    
    global Database.QueryLocator start(Database.BatchableContext BC) {
        Id idOpp = 'xxxxxxxxxx';
        String query = 'SELECT Id FROM Opportunity WHERE Id =:idOpp ';
        return Database.getQueryLocator(query);
    }

       global void execute(Database.BatchableContext BC, List<Opportunity> lstOpp) {
           
        Map<Id, Integer> mapIdOppTosumAcMngr = new Map<Id, Integer>();
        Map<Id, Integer> mapIdOppTosumChMgnr = new Map<Id, Integer>();
        Map<Id, Opportunity> mapOpportunity = new Map<Id, Opportunity>(lstOpp);
        Opportunity objOpp;
        List<Opportunity> lstOppToUpdate = new List<Opportunity>();
        
        // opportunities with children opportunity splits
        for(OpportunitySplit objOppSplit : [SELECT Id, Role_Name__c, OpportunityId 
                                            FROM OpportunitySplit 
                                            WHERE Role_Name__c IN ('SW Account Manager','SW Channel Manager') 
                                                AND OpportunityId IN: mapOpportunity.keySet() ])
        { 
            if(objOppSplit.Role_Name__c == 'SW Account Manager')
                mapIdOppTosumAcMngr.put(objOppSplit.OpportunityId, mapIdOppTosumAcMngr.containsKey(objOppSplit.OpportunityId) ? (mapIdOppTosumAcMngr.get(objOppSplit.OpportunityId)+1): 1);
            else 
                mapIdOppTosumChMgnr.put(objOppSplit.OpportunityId, mapIdOppTosumChMgnr.containsKey(objOppSplit.OpportunityId) ? (mapIdOppTosumChMgnr.get(objOppSplit.OpportunityId)+1): 1);    
        }
        
        
    
        for(Opportunity objOpp : mapOpportunity.values())
        {
            objOpp = new Opportunity(Id = objOpp.Id);
            
            objOpp.Total_Sw_Account_Manager__c = mapIdOppTosumAcMngr.containsKey(objOpp.Id) ? mapIdOppTosumAcMngr.get(objOpp.Id) : 0;
            objOpp.Total_Sw_Channel_Manager__c = mapIdOppTosumChMgnr.containsKey(objOpp.Id) ? mapIdOppTosumChMgnr.get(objOpp.Id) : 0;
            lstOppToUpdate.add(objOpp);
            
        }
        if(!lstOppToUpdate.isEmpty())
            update lstOppToUpdate;
    }
    
    global void finish(Database.BatchableContext BC) {
        
    }
    
}



Please try this once
SriniSrini
@Nayana,

I have Modified the logic It is not update the count of total SW account manager .May i know the why you are mentioned (?) symbols in between the logic? 

And also crated twice  1." Opportunity objOpp;" 2.  for(Opportunity objOpp : MapOpportunity.values())


Can you please have a look below code:
global class OpportunitySplitBatch implements Database.Batchable<Sobject>{
    global OpportunitySplitBatch(){         
    }
    global Database.QueryLocator start(Database.BatchableContext BC){
        String query = 'select id, Total_Sw_Channel_Manager__c, Total_Sw_Account_Manager__c, (select id, Role_Name__c  from OpportunitySplits where Role_Name__c = \'SW Account Manager\' OR Role_Name__c =\'SW Channel Manager\') from Opportunity where Id= \' xxxxxx\' ';
        // String query = 'SELECT Id,Role_Name__c,OpportunityId FROM OpportunitySplit where Role_Name__c = 'SW Channel Manager' AND OpportunityId ='0061A000011ToBOQA0';
    //String query = 'SELECT Id FROM Opportunity where id';
     //String query = 'select id,Role_Name__c  from OpportunitySplits where Role_Name__c = 'SW Account Manager' OR Role_Name__c = 'SW Channel Manager') from opportunity where id in:oppIds';
     //String query ='SELECT Id,Role_Name__c,OpportunityId FROM OpportunitySplit WHERE Role_Name__c IN ('SW Account Manager','SW Channel Manager') from Opportunity where id in:oppIds';
     return Database.getQueryLocator(query);
    }
    global void execute(Database.BatchableContext BC,List<Opportunity> lstOpp){
        Map<Id,Integer> MapIdOppTosumAcMngr = new Map<Id,Integer>();
        Map<Id,Integer> MapIdOppTosumChMgnr = new Map<Id,Integer>();
        //Map<Id,Opportunity> MapOpportunityToUpdate = new Map<Id,Opportunity>();
        // Opportunity objOpp;
        Map<Id,Opportunity> MapOpportunity = new Map<Id,Opportunity>(lstOpp);
         List<Opportunity> lstOppToUpdate = new List<Opportunity>();
        
     // opportunities with children opportunity splits
     
            for(OpportunitySplit objOppSplit : [SELECT Id,Role_Name__c,OpportunityId FROM OpportunitySplit WHERE Role_Name__c IN ('SW Account Manager','SW Channel Manager') AND OpportunityId IN: MapOpportunity.keySet()]){
                //for(OpportunitySplit objOppSplit : [SELECT Id,Role_Name__c,OpportunityId FROM OpportunitySplit where Role_Name__c = 'SW Channel Manager' AND OpportunityId ='xxxxx']){
                  if(objOppSplit.Role_Name__c == 'SW Account Manager')
                    // if(MapIdOppTosumAcMngr.containsKey(objOppSplit.OpportunityId)) 
                        MapIdOppTosumAcMngr.put(objOppSplit.OpportunityId,MapIdOppTosumAcMngr.containsKey(objOppSplit.OpportunityId) ? (MapIdOppTosumAcMngr.get(objOppSplit.OpportunityId)+1): 1);
                        else
                         MapIdOppTosumChMgnr.put(objOppSplit.OpportunityId, MapIdOppTosumChMgnr.containsKey(objOppSplit.OpportunityId) ? (MapIdOppTosumChMgnr.get(objOppSplit.OpportunityId)+1): 1);    
                         
                    }
                    /* else{
                         if(MapIdOppTosumChMgnr.containsKey(objOppSplit.OpportunityId))
                            MapIdOppTosumChMgnr.put(objOppSplit.OpportunityId, MapIdOppTosumChMgnr.get(objOppSplit.OpportunityId)+1);
                            else
                                MapIdOppTosumChMgnr.put(objOppSplit.OpportunityId,1);
                        }           
                        // opportunties with 0 children Opportunity splits
                        for(Opportunity objOpp : MapOpportunity.values()){
                            MapOpportunityToUpdate.put(objOpp.Id,new Opportunity(Id = objOpp.Id,Total_Sw_Channel_Manager__c = 0,Total_Sw_Account_Manager__c = 0 ));
                        }
                        if(!MapOpportunityToUpdate.isEmpty())
                            update MapOpportunityToUpdate.values();*/
                            
                           for(Opportunity objOpp : MapOpportunity.values()){
                           objOpp = new Opportunity(Id = objOpp.Id);            
                           objOpp.Total_Sw_Account_Manager__c = MapIdOppTosumAcMngr.containsKey(objOpp.Id) ? MapIdOppTosumAcMngr.get(objOpp.Id) : 0;
                           objOpp.Total_Sw_Channel_Manager__c = MapIdOppTosumChMgnr.containsKey(objOpp.Id) ? MapIdOppTosumChMgnr.get(objOpp.Id) : 0;
                           lstOppToUpdate.add(objOpp);
                          }
                            if(!lstOppToUpdate.isEmpty())
                            update lstOppToUpdate;
    }
    global void finish(Database.BatchableContext BC){       
    }
}

Thanks

 
Nayana KNayana K
global class OpportunitySplitBatch implements Database.Batchable<Sobject> {
    
    
    global OpportunitySplitBatch() {
    }
    
    global Database.QueryLocator start(Database.BatchableContext BC) {
        Id idOpp = 'xxxxxxxxxx';
        String query = 'SELECT Id FROM Opportunity WHERE Id =:idOpp ';
        return Database.getQueryLocator(query);
    }

       global void execute(Database.BatchableContext BC, List<Opportunity> lstOpp) {
           
        Map<Id, Integer> mapIdOppTosumAcMngr = new Map<Id, Integer>();
        Map<Id, Integer> mapIdOppTosumChMgnr = new Map<Id, Integer>();
        Map<Id, Opportunity> mapOpportunity = new Map<Id, Opportunity>(lstOpp);
        Opportunity objOppToUpdate;
        List<Opportunity> lstOppToUpdate = new List<Opportunity>();
        
        // opportunities with children opportunity splits
        for(OpportunitySplit objOppSplit : [SELECT Id, Role_Name__c, OpportunityId 
                                            FROM OpportunitySplit 
                                            WHERE Role_Name__c IN ('SW Account Manager','SW Channel Manager') 
                                                AND OpportunityId IN: mapOpportunity.keySet() ])
        { 
            if(objOppSplit.Role_Name__c == 'SW Account Manager')
                mapIdOppTosumAcMngr.put(objOppSplit.OpportunityId, mapIdOppTosumAcMngr.containsKey(objOppSplit.OpportunityId) ? (mapIdOppTosumAcMngr.get(objOppSplit.OpportunityId)+1): 1);
            else 
                mapIdOppTosumChMgnr.put(objOppSplit.OpportunityId, mapIdOppTosumChMgnr.containsKey(objOppSplit.OpportunityId) ? (mapIdOppTosumChMgnr.get(objOppSplit.OpportunityId)+1): 1);    
        }
        
        
    
        for(Opportunity objOpp : mapOpportunity.values())
        {
            objOppToUpdate = new Opportunity(Id = objOpp.Id);
            
            objOppToUpdate .Total_Sw_Account_Manager__c = mapIdOppTosumAcMngr.containsKey(objOpp.Id) ? mapIdOppTosumAcMngr.get(objOpp.Id) : 0;
            objOppToUpdate .Total_Sw_Channel_Manager__c = mapIdOppTosumChMgnr.containsKey(objOpp.Id) ? mapIdOppTosumChMgnr.get(objOpp.Id) : 0;
            lstOppToUpdate.add(objOppToUpdate );
            
        }
        if(!lstOppToUpdate.isEmpty())
            update lstOppToUpdate;
    }
    
    global void finish(Database.BatchableContext BC) {
        
    }
    
}



Please try this.  
?: is ternary operator which works like if condition.
This was selected as the best answer
Nayana KNayana K
Let me know if u face any issues and check debug logs for the flow...post debug log content here if possible
SriniSrini
@Nayana,

Thanks for your spending valuable time to me. As i am new for SFDC but still am trying to get the Output with your help thanks for that.  I have tried the  modified logic.Posting my debug logs hear. plese check and let me know.Tell me onething where i put the system.debugs in our code.

Just i have tried something may be that is helpfull to find the logs.Please check below debug log list.

(68285782)|VARIABLE_ASSIGNMENT|[50]|objOpp|{"s":1,"v":{"Id":"0061A000011ToBOQA0","Total_Sw_Channel_Man (7 more) ...":1,"Total_Sw_Account_Man (7 more) ...":1,"OpportunitySplits":[{"s":2,"v":{"OpportunityId":"0061A000011ToBOQA0","Id":"04954000000A59iAAC","Role_Name__c":"SW Channel Manager"}},{"s":3,"v":{"OpportunityId":"0061A000011ToBOQA0","Id":"04954000000A59jAAC","Role_Name__c":"SW Account Manager"}}]}}|0x576f2bb9
03:24:22.0 (68291287)|STATEMENT_EXECUTE|[50]
03:24:22.0 (68292721)|STATEMENT_EXECUTE|[51]
03:24:22.0 (68306612)|HEAP_ALLOCATE|[51]|Bytes:4
03:24:22.0 (69245206)|VARIABLE_ASSIGNMENT|[51]|this.Id|"0061A000011ToBOQA0"|0x37156626
03:24:22.0 (69292697)|VARIABLE_ASSIGNMENT|[51]|objOppToUpdate|{"Id":"0061A000011ToBOQA0"}|0x37156626
03:24:22.0 (69296616)|STATEMENT_EXECUTE|[53]
03:24:22.0 (69300975)|HEAP_ALLOCATE|[53]|Bytes:10
03:24:22.0 (69368204)|HEAP_ALLOCATE|[53]|Bytes:2
03:24:22.0 (69389574)|HEAP_ALLOCATE|[53]|Bytes:12
03:24:22.0 (69415636)|USER_DEBUG|[53]|DEBUG|#######:()
03:24:22.0 (69423578)|STATEMENT_EXECUTE|[54]
03:24:22.0 (69518795)|HEAP_ALLOCATE|[54]|Bytes:28
03:24:22.0 (69523366)|HEAP_ALLOCATE|[54]|Bytes:28
03:24:22.0 (69594464)|VARIABLE_ASSIGNMENT|[54]|this.Total_Sw_Account_Manager__c|1|0x37156626
03:24:22.0 (69599201)|STATEMENT_EXECUTE|[55]
03:24:22.0 (69655858)|HEAP_ALLOCATE|[55]|Bytes:28
03:24:22.0 (69659766)|HEAP_ALLOCATE|[55]|Bytes:28
03:24:22.0 (69710725)|VARIABLE_ASSIGNMENT|[55]|this.Total_Sw_Channel_Manager__c|1|0x37156626
03:24:22.0 (69727323)|HEAP_ALLOCATE|[50]|Bytes:5
03:24:22.0 (69744029)|VARIABLE_ASSIGNMENT|[50]|objOpp|null|

Thanks

 
Nayana KNayana K
Hey can you please use exactly below code and post the debug log for this code? Please dont change anything in the code, it will be easy to debug for me...Only replace idOpp = SOME ID VALUE

global class OpportunitySplitBatch implements Database.Batchable<Sobject> {

    global OpportunitySplitBatch() {
    }
    
    global Database.QueryLocator start(Database.BatchableContext BC) {
        Id idOpp = 'xxxxxxxxxx';
        String query = 'SELECT Id FROM Opportunity WHERE Id =:idOpp ';
        return Database.getQueryLocator(query);
    }

       global void execute(Database.BatchableContext BC, List<Opportunity> lstOpp) {
           
        Map<Id, Integer> mapIdOppTosumAcMngr = new Map<Id, Integer>();
        Map<Id, Integer> mapIdOppTosumChMgnr = new Map<Id, Integer>();
        Map<Id, Opportunity> mapOpportunity = new Map<Id, Opportunity>(lstOpp);
        Opportunity objOppToUpdate;
        List<Opportunity> lstOppToUpdate = new List<Opportunity>();
        
        system.debug('====lstOpp===22='+lstOpp);
        system.debug('====mapOpportunity===23='+mapOpportunity);
        
        // opportunities with children opportunity splits
        for(OpportunitySplit objOppSplit : [SELECT Id, Role_Name__c, OpportunityId 
                                            FROM OpportunitySplit 
                                            WHERE Role_Name__c IN ('SW Account Manager','SW Channel Manager') 
                                                AND OpportunityId IN: mapOpportunity.keySet() ])
        { 
            system.debug('====objOppSplit===31='+objOppSplit);
        
            if(objOppSplit.Role_Name__c == 'SW Account Manager')
            {
                system.debug('====Condition 1===='+objOppSplit);
                mapIdOppTosumAcMngr.put(objOppSplit.OpportunityId, mapIdOppTosumAcMngr.containsKey(objOppSplit.OpportunityId) ? (mapIdOppTosumAcMngr.get(objOppSplit.OpportunityId)+1): 1);
            }
                
            else 
            {
                system.debug('====Condition 1===='+objOppSplit);
                mapIdOppTosumChMgnr.put(objOppSplit.OpportunityId, mapIdOppTosumChMgnr.containsKey(objOppSplit.OpportunityId) ? (mapIdOppTosumChMgnr.get(objOppSplit.OpportunityId)+1): 1);  
            }
                  
        }

        for(Opportunity objOpp : mapOpportunity.values())
        {
            objOppToUpdate = new Opportunity(Id = objOpp.Id);
            
            objOppToUpdate .Total_Sw_Account_Manager__c = mapIdOppTosumAcMngr.containsKey(objOpp.Id) ? mapIdOppTosumAcMngr.get(objOpp.Id) : 0;
            objOppToUpdate .Total_Sw_Channel_Manager__c = mapIdOppTosumChMgnr.containsKey(objOpp.Id) ? mapIdOppTosumChMgnr.get(objOpp.Id) : 0;
            lstOppToUpdate.add(objOppToUpdate );
            
            system.debug('====objOppToUpdate===='+objOppToUpdate);
            
        }
        if(!lstOppToUpdate.isEmpty())
            update lstOppToUpdate;
    }
    
    global void finish(Database.BatchableContext BC) {
        
    }
    
}
 
SriniSrini
Please Check the Below debug logs

04:43:44.0 (128353)|CODE_UNIT_STARTED|[EXTERNAL]|01p54000000578M|OpportunitySplitBatch 04:43:44.0 (1529540)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:52 04:43:44.0 (1545771)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:9 04:43:44.0 (1549454)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:17 04:43:44.0 (1575898)|METHOD_ENTRY|[1]|01p54000000578M|OpportunitySplitBatch.OpportunitySplitBatch() 04:43:44.0 (1581164)|STATEMENT_EXECUTE|[1] 04:43:44.0 (1590411)|STATEMENT_EXECUTE|[1] 04:43:44.0 (1600104)|METHOD_EXIT|[1]|OpportunitySplitBatch 04:43:44.0 (1606271)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:4 04:43:44.0 (1609349)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:12 04:43:44.0 (1624710)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:8 04:43:44.0 (1636160)|VARIABLE_SCOPE_BEGIN|[12]|this|OpportunitySplitBatch|true|false 04:43:44.0 (1689674)|VARIABLE_ASSIGNMENT|[12]|this|{}|0x1064d608 04:43:44.0 (1695577)|VARIABLE_SCOPE_BEGIN|[12]|BC|Database.BatchableContext|true|false 04:43:44.0 (1819371)|VARIABLE_ASSIGNMENT|[12]|BC|{"childJobId":"7075400000FQ9KgAAL","jobId":"7075400000FQ9KbAAL"}|0xd0bde0b 04:43:44.0 (1827416)|VARIABLE_SCOPE_BEGIN|[12]|lstOpp|List<Opportunity>|true|false 04:43:44.0 (1861305)|VARIABLE_ASSIGNMENT|[12]|lstOpp|{"s":1,"v":[{"s":2,"v":{"Id":"0061A000011ToBOQA0"}}]}|0x25e39f89 04:43:44.0 (1875559)|STATEMENT_EXECUTE|[12] 04:43:44.0 (1877165)|STATEMENT_EXECUTE|[14] 04:43:44.0 (1891672)|HEAP_ALLOCATE|[14]|Bytes:4 04:43:44.0 (1913290)|VARIABLE_SCOPE_BEGIN|[14]|mapIdOppTosumAcMngr|Map<Id,Integer>|true|false 04:43:44.0 (1937107)|VARIABLE_ASSIGNMENT|[14]|mapIdOppTosumAcMngr|{"s":1,"v":{}}|0x4363600d 04:43:44.0 (1940379)|STATEMENT_EXECUTE|[15] 04:43:44.0 (1944427)|HEAP_ALLOCATE|[15]|Bytes:4 04:43:44.0 (1951979)|VARIABLE_SCOPE_BEGIN|[15]|mapIdOppTosumChMgnr|Map<Id,Integer>|true|false 04:43:44.0 (1964648)|VARIABLE_ASSIGNMENT|[15]|mapIdOppTosumChMgnr|{"s":1,"v":{}}|0x75012aff 04:43:44.0 (1967435)|STATEMENT_EXECUTE|[16] 04:43:44.0 (2002541)|HEAP_ALLOCATE|[16]|Bytes:4 04:43:44.0 (2082383)|HEAP_ALLOCATE|[16]|Bytes:8 04:43:44.0 (2093332)|HEAP_ALLOCATE|[16]|Bytes:4 04:43:44.0 (2106949)|VARIABLE_SCOPE_BEGIN|[16]|mapOpportunity|Map<Id,Opportunity>|true|false 04:43:44.0 (2134082)|VARIABLE_ASSIGNMENT|[16]|mapOpportunity|{"s":1,"v":{"0061A000011ToBOQA0":{"s":2,"v":{"Id":"0061A000011ToBOQA0"}}}}|0x4ca7fc01 04:43:44.0 (2138694)|STATEMENT_EXECUTE|[17] 04:43:44.0 (2143951)|VARIABLE_SCOPE_BEGIN|[17]|objOppToUpdate|Opportunity|true|false 04:43:44.0 (2151271)|VARIABLE_ASSIGNMENT|[17]|objOppToUpdate|null| 04:43:44.0 (2153188)|STATEMENT_EXECUTE|[18] 04:43:44.0 (2159277)|HEAP_ALLOCATE|[18]|Bytes:4 04:43:44.0 (2260667)|VARIABLE_SCOPE_BEGIN|[18]|lstOppToUpdate|List<Opportunity>|true|false 04:43:44.0 (2269967)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:4 04:43:44.0 (2282480)|VARIABLE_ASSIGNMENT|[18]|lstOppToUpdate|{"s":1,"v":[]}|0x1d665f66 04:43:44.0 (2285435)|STATEMENT_EXECUTE|[20] 04:43:44.0 (2289679)|HEAP_ALLOCATE|[20]|Bytes:16 04:43:44.0 (2385184)|HEAP_ALLOCATE|[20]|Bytes:37 04:43:44.0 (2410542)|HEAP_ALLOCATE|[20]|Bytes:53 04:43:44.0 (2435666)|HEAP_ALLOCATE|[50]|Bytes:5 04:43:44.0 (2462085)|HEAP_ALLOCATE|[56]|Bytes:5 04:43:44.0 (2471793)|HEAP_ALLOCATE|[64]|Bytes:7 04:43:44.0 (2522881)|USER_DEBUG|[20]|DEBUG|====lstOpp===22=(Opportunity:{Id=0061A000011ToBOQA0}) 04:43:44.0 (2531250)|STATEMENT_EXECUTE|[21] 04:43:44.0 (2535570)|HEAP_ALLOCATE|[21]|Bytes:24 04:43:44.0 (2593963)|HEAP_ALLOCATE|[21]|Bytes:56 04:43:44.0 (2610787)|HEAP_ALLOCATE|[21]|Bytes:80 04:43:44.0 (2625182)|USER_DEBUG|[21]|DEBUG|====mapOpportunity===23={0061A000011ToBOQA0=Opportunity:{Id=0061A000011ToBOQA0}} 04:43:44.0 (2634679)|HEAP_ALLOCATE|[24]|Bytes:158 04:43:44.0 (2643486)|HEAP_ALLOCATE|[24]|Bytes:4 04:43:44.0 (2652132)|HEAP_ALLOCATE|[24]|Bytes:7 04:43:44.0 (2718845)|HEAP_ALLOCATE|[27]|Bytes:26 04:43:44.0 (4121826)|SOQL_EXECUTE_BEGIN|[24]|Aggregations:0|SELECT Id, Role_Name__c, OpportunityId FROM OpportunitySplit 04:43:44.0 (84154255)|SOQL_EXECUTE_END|[24]|Rows:2 04:43:44.0 (84204129)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:12 04:43:44.0 (84566376)|HEAP_ALLOCATE|[24]|Bytes:49 04:43:44.0 (84575914)|HEAP_ALLOCATE|[24]|Bytes:8 04:43:44.0 (84605704)|SYSTEM_METHOD_ENTRY|[7]|QueryLocatorIterator.QueryLocatorIterator() 04:43:44.0 (84611174)|STATEMENT_EXECUTE|[7] 04:43:44.0 (84627980)|SYSTEM_METHOD_EXIT|[7]|QueryLocatorIterator 04:43:44.0 (84639886)|HEAP_ALLOCATE|[24]|Bytes:28 04:43:44.0 (84736957)|HEAP_ALLOCATE|[24]|Bytes:12 04:43:44.0 (84757046)|HEAP_ALLOCATE|[24]|Bytes:8 04:43:44.0 (84759738)|HEAP_ALLOCATE|[24]|Bytes:8 04:43:44.0 (84769145)|VARIABLE_SCOPE_BEGIN|[15]|this|Database.QueryLocatorIterator|true|false 04:43:44.0 (84830119)|VARIABLE_ASSIGNMENT|[15]|this|{}|0x7944cb73 04:43:44.0 (84835057)|VARIABLE_SCOPE_BEGIN|[15]|values|List<SObject>|true|false 04:43:44.0 (84880470)|VARIABLE_ASSIGNMENT|[15]|values|{"s":1,"v":[{"s":2,"v":{"Id":"04954000000A59iAAC","Role_Name__c":"SW Channel Manager","OpportunityId":"0061A000011ToBOQA0"}},{"s":3,"v":{"Id":"04954000000A59jAAC","Role_Name__c":"SW Account Manager","OpportunityId":"0061A000011ToBOQA0"}}]}|0x4dbb3768 04:43:44.0 (84886008)|VARIABLE_SCOPE_BEGIN|[15]|ql|Database.QueryLocator|true|false 04:43:44.0 (84902683)|VARIABLE_ASSIGNMENT|[15]|ql|{"query":"SELECT Id, Role_Name (138 more) ..."}|0x2cc0ddc9 04:43:44.0 (84906262)|VARIABLE_SCOPE_BEGIN|[15]|totalNumRecords|Integer|false|false 04:43:44.0 (84911066)|VARIABLE_ASSIGNMENT|[15]|totalNumRecords|2 04:43:44.0 (84913773)|VARIABLE_SCOPE_BEGIN|[15]|queryMoreSize|Integer|false|false 04:43:44.0 (84916698)|VARIABLE_ASSIGNMENT|[15]|queryMoreSize|49998 04:43:44.0 (84982856)|HEAP_ALLOCATE|[24]|Bytes:28 04:43:44.0 (85013656)|METHOD_ENTRY|[24]||Database.QueryLocatorIterator.hasNext() 04:43:44.0 (85196148)|METHOD_EXIT|[24]||Database.QueryLocatorIterator.hasNext() 04:43:44.0 (85207217)|METHOD_ENTRY|[24]||Database.QueryLocatorIterator.next() 04:43:44.0 (85331191)|METHOD_EXIT|[24]||Database.QueryLocatorIterator.next() 04:43:44.0 (85344577)|VARIABLE_SCOPE_BEGIN|[24]|objOppSplit|OpportunitySplit|true|false 04:43:44.0 (85364419)|VARIABLE_ASSIGNMENT|[24]|objOppSplit|{"s":1,"v":{"Id":"04954000000A59iAAC","Role_Name__c":"SW Channel Manager","OpportunityId":"0061A000011ToBOQA0"}}|0x579efc89 04:43:44.0 (85369991)|STATEMENT_EXECUTE|[28] 04:43:44.0 (85371576)|STATEMENT_EXECUTE|[29] 04:43:44.0 (85377164)|HEAP_ALLOCATE|[29]|Bytes:21 04:43:44.0 (85492461)|HEAP_ALLOCATE|[29]|Bytes:107 04:43:44.0 (85514785)|HEAP_ALLOCATE|[29]|Bytes:128 04:43:44.0 (85540499)|USER_DEBUG|[29]|DEBUG|====objOppSplit===31=OpportunitySplit:{Id=04954000000A59iAAC, Role_Name__c=SW Channel Manager, OpportunityId=0061A000011ToBOQA0} 04:43:44.0 (85580103)|HEAP_ALLOCATE|[31]|Bytes:18 04:43:44.0 (85610100)|STATEMENT_EXECUTE|[38] 04:43:44.0 (85612071)|STATEMENT_EXECUTE|[39] 04:43:44.0 (85614883)|HEAP_ALLOCATE|[39]|Bytes:19 04:43:44.0 (85679223)|HEAP_ALLOCATE|[39]|Bytes:107 04:43:44.0 (85696049)|HEAP_ALLOCATE|[39]|Bytes:126 04:43:44.0 (85710832)|USER_DEBUG|[39]|DEBUG|====Condition 1====OpportunitySplit:{Id=04954000000A59iAAC, Role_Name__c=SW Channel Manager, OpportunityId=0061A000011ToBOQA0} 04:43:44.0 (85718072)|STATEMENT_EXECUTE|[40] 04:43:44.0 (85798843)|HEAP_ALLOCATE|[40]|Bytes:4 04:43:44.0 (85814155)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:-4 04:43:44.0 (85826429)|METHOD_ENTRY|[24]||Database.QueryLocatorIterator.hasNext() 04:43:44.0 (85848567)|METHOD_EXIT|[24]||Database.QueryLocatorIterator.hasNext() 04:43:44.0 (85854053)|METHOD_ENTRY|[24]||Database.QueryLocatorIterator.next() 04:43:44.0 (85910113)|METHOD_EXIT|[24]||Database.QueryLocatorIterator.next() 04:43:44.0 (85919029)|VARIABLE_SCOPE_BEGIN|[24]|objOppSplit|OpportunitySplit|true|false 04:43:44.0 (85937749)|VARIABLE_ASSIGNMENT|[24]|objOppSplit|{"s":1,"v":{"Id":"04954000000A59jAAC","Role_Name__c":"SW Account Manager","OpportunityId":"0061A000011ToBOQA0"}}|0x73809f99 04:43:44.0 (85941622)|STATEMENT_EXECUTE|[28] 04:43:44.0 (85942909)|STATEMENT_EXECUTE|[29] 04:43:44.0 (85981504)|HEAP_ALLOCATE|[29]|Bytes:107 04:43:44.0 (85995583)|HEAP_ALLOCATE|[29]|Bytes:128 04:43:44.0 (86008306)|USER_DEBUG|[29]|DEBUG|====objOppSplit===31=OpportunitySplit:{Id=04954000000A59jAAC, Role_Name__c=SW Account Manager, OpportunityId=0061A000011ToBOQA0} 04:43:44.0 (86033272)|STATEMENT_EXECUTE|[32] 04:43:44.0 (86035083)|STATEMENT_EXECUTE|[33] 04:43:44.0 (86095635)|HEAP_ALLOCATE|[33]|Bytes:107 04:43:44.0 (86112399)|HEAP_ALLOCATE|[33]|Bytes:126 04:43:44.0 (86126588)|USER_DEBUG|[33]|DEBUG|====Condition 1====OpportunitySplit:{Id=04954000000A59jAAC, Role_Name__c=SW Account Manager, OpportunityId=0061A000011ToBOQA0} 04:43:44.0 (86133523)|STATEMENT_EXECUTE|[34] 04:43:44.0 (86180347)|HEAP_ALLOCATE|[34]|Bytes:4 04:43:44.0 (86189485)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:-4 04:43:44.0 (86200084)|METHOD_ENTRY|[24]||Database.QueryLocatorIterator.hasNext() 04:43:44.0 (86214094)|METHOD_EXIT|[24]||Database.QueryLocatorIterator.hasNext() 04:43:44.0 (86223377)|VARIABLE_ASSIGNMENT|[24]|objOppSplit|null| 04:43:44.0 (86281479)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:8 04:43:44.0 (86292608)|HEAP_ALLOCATE|[45]|Bytes:36 04:43:44.0 (86500365)|HEAP_ALLOCATE|[45]|Bytes:5 04:43:44.0 (86518097)|HEAP_ALLOCATE|[45]|Bytes:8 04:43:44.0 (86528103)|VARIABLE_SCOPE_BEGIN|[45]|objOpp|Opportunity|true|false 04:43:44.0 (86545242)|VARIABLE_ASSIGNMENT|[45]|objOpp|{"s":1,"v":{"Id":"0061A000011ToBOQA0"}}|0x620672c9 04:43:44.0 (86548985)|STATEMENT_EXECUTE|[46] 04:43:44.0 (86550282)|STATEMENT_EXECUTE|[47] 04:43:44.0 (86566502)|HEAP_ALLOCATE|[47]|Bytes:4 04:43:44.0 (86724112)|VARIABLE_ASSIGNMENT|[47]|this.Id|"0061A000011ToBOQA0"|0x76d1814e 04:43:44.0 (86759681)|VARIABLE_ASSIGNMENT|[47]|objOppToUpdate|{"Id":"0061A000011ToBOQA0"}|0x76d1814e 04:43:44.0 (86763258)|STATEMENT_EXECUTE|[49] 04:43:44.0 (86874149)|HEAP_ALLOCATE|[49]|Bytes:28 04:43:44.0 (86878592)|HEAP_ALLOCATE|[49]|Bytes:28 04:43:44.0 (86957015)|VARIABLE_ASSIGNMENT|[49]|this.Total_Sw_Account_Manager__c|1|0x76d1814e 04:43:44.0 (86961314)|STATEMENT_EXECUTE|[50] 04:43:44.0 (87024407)|HEAP_ALLOCATE|[50]|Bytes:28 04:43:44.0 (87029076)|HEAP_ALLOCATE|[50]|Bytes:28 04:43:44.0 (87072314)|VARIABLE_ASSIGNMENT|[50]|this.Total_Sw_Channel_Manager__c|1|0x76d1814e 04:43:44.0 (87076273)|STATEMENT_EXECUTE|[51] 04:43:44.0 (87116906)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:4 04:43:44.0 (87126074)|STATEMENT_EXECUTE|[53] 04:43:44.0 (87130658)|HEAP_ALLOCATE|[53]|Bytes:22 04:43:44.0 (87188494)|HEAP_ALLOCATE|[53]|Bytes:97 04:43:44.0 (87204900)|HEAP_ALLOCATE|[53]|Bytes:119 04:43:44.0 (87220186)|USER_DEBUG|[53]|DEBUG|====objOppToUpdate====Opportunity:{Id=0061A000011ToBOQA0, Total_Sw_Account_Manager__c=1, Total_Sw_Channel_Manager__c=1} 04:43:44.0 (87235830)|HEAP_ALLOCATE|[45]|Bytes:5 04:43:44.0 (87249113)|VARIABLE_ASSIGNMENT|[45]|objOpp|null| 04:43:44.0 (87283814)|STATEMENT_EXECUTE|[57] 04:43:44.0 (87348871)|DML_BEGIN|[57]|Op:Update|Type:Opportunity|Rows:1 04:43:44.0 (87387746)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:8 04:43:44.773 (773132969)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:8 04:43:44.773 (773198364)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:8 04:43:44.773 (773232192)|ENTERING_MANAGED_PKG|GE_X_Sell 04:43:44.773 (773363642)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:11 04:43:44.773 (773392689)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:4 04:43:44.773 (773407912)|VARIABLE_SCOPE_BEGIN|[7]|this|GE_X_Sell.GE_xSell_OpportunityTrigger|true|false 04:43:44.773 

Thanks
SriniSrini
@Nayana.

Wow..It's working as expected. Great help. I was learned a lot on this code. Thank you very much

Need one more help on this code: Needs to be add the one condition "Who ever modified the last24hrs in opty "

If possible help me to create test class for this.

Thank you so much....Great help.

Thanks
Nayana KNayana K
Please mark this answer as as solved.

Few clarifications to ask :
1. Is it something like this you are looking for ? == ====>      LastModifiedDate >= YESTERDAY 
OR 
2. If the time is 6pm now, then you want all the records which is modified from yesterday's 6pm  (24 hours)?

I will assume you are looking for point #2 and I have modified below code. I am not sure how efficiently it will work, but you can give a try.

global class OpportunitySplitBatch implements Database.Batchable<Sobject> {

    global OpportunitySplitBatch() {
    }
    
    global Database.QueryLocator start(Database.BatchableContext BC) {
        DateTime dt = DateTime.now().addHours(-24);
        String query = 'SELECT Id FROM Opportunity WHERE LastModifiedDate >=: dt ';
        return Database.getQueryLocator(query);
    }

       global void execute(Database.BatchableContext BC, List<Opportunity> lstOpp) {
           
        Map<Id, Integer> mapIdOppTosumAcMngr = new Map<Id, Integer>();
        Map<Id, Integer> mapIdOppTosumChMgnr = new Map<Id, Integer>();
        Map<Id, Opportunity> mapOpportunity = new Map<Id, Opportunity>(lstOpp);
        Opportunity objOppToUpdate;
        List<Opportunity> lstOppToUpdate = new List<Opportunity>();
        
        system.debug('====lstOpp===22='+lstOpp);
        system.debug('====mapOpportunity===23='+mapOpportunity);
        
        // opportunities with children opportunity splits
        for(OpportunitySplit objOppSplit : [SELECT Id, Role_Name__c, OpportunityId 
                                            FROM OpportunitySplit 
                                            WHERE Role_Name__c IN ('SW Account Manager','SW Channel Manager') 
                                                AND OpportunityId IN: mapOpportunity.keySet() ])
        { 
            system.debug('====objOppSplit===31='+objOppSplit);
        
            if(objOppSplit.Role_Name__c == 'SW Account Manager')
            {
                system.debug('====Condition 1===='+objOppSplit);
                mapIdOppTosumAcMngr.put(objOppSplit.OpportunityId, mapIdOppTosumAcMngr.containsKey(objOppSplit.OpportunityId) ? (mapIdOppTosumAcMngr.get(objOppSplit.OpportunityId)+1): 1);
            }
                
            else 
            {
                system.debug('====Condition 1===='+objOppSplit);
                mapIdOppTosumChMgnr.put(objOppSplit.OpportunityId, mapIdOppTosumChMgnr.containsKey(objOppSplit.OpportunityId) ? (mapIdOppTosumChMgnr.get(objOppSplit.OpportunityId)+1): 1);  
            }
                  
        }

        for(Opportunity objOpp : mapOpportunity.values())
        {
            objOppToUpdate = new Opportunity(Id = objOpp.Id);
            
            objOppToUpdate .Total_Sw_Account_Manager__c = mapIdOppTosumAcMngr.containsKey(objOpp.Id) ? mapIdOppTosumAcMngr.get(objOpp.Id) : 0;
            objOppToUpdate .Total_Sw_Channel_Manager__c = mapIdOppTosumChMgnr.containsKey(objOpp.Id) ? mapIdOppTosumChMgnr.get(objOpp.Id) : 0;
            lstOppToUpdate.add(objOppToUpdate );
            
            system.debug('====objOppToUpdate===='+objOppToUpdate);
            
        }
        if(!lstOppToUpdate.isEmpty())
            update lstOppToUpdate;
    }
    
    global void finish(Database.BatchableContext BC) {
        
    }
}



Test class :

I have never used OpportunitySplit, so I am not sure if any restrictions are there while inserting them in test class. I will give psuedo kind of code, rest is in your hand.


@isTest
private class OpportunitySplitBatchTest {

    static testmethod void test() {
       List<Opportunity> lstOpp = new List<Opportunity>();
       List<Opportunity> lstOppToVerify = new List<Opportunity>();
       List<OpportunitySplit> lstOppSplit = new List<OpportunitySplit>();
       
       Date dtClose = Date.Today().addDays(30);
       
       for(Integer i=0; i< 101; i++)
       {
            lstOpp.add(new Opportunity(Name = 'Test Opp' + i, CloseDate = dtClose, StageName = 'Prospecting'));
       }
       insert lstOpp;
       
       // inserting opportunity split for only first 100 opportunities 
       for(Integer i=0; i< 100; i++)
       {
            for(Integer j=0; j<3; j++)
            {
                lstOppSplit.add(new OpportunitySplit(OpportunityId =  lstOpp[i].Id, Role_Name__c = 'SW Account Manager'));
                lstOppSplit.add(new OpportunitySplit(OpportunityId =  lstOpp[i].Id, Role_Name__c = 'SW Channel Manager'));
            }
       }
       insert lstOppSplit;
       
       /* For the 101th opportunity, I have not inserted OppSplit because after batch run I want verify if it is having Total_Sw_Account_Manager__c =0, Total_Sw_Channel_Manager__c = 0 */
       
       Test.startTest();
       OpportunitySplitBatch objBatch = new OpportunitySplitBatch();
       Database.executeBatch(objBatch);
       Test.stopTest();
        
        Integer count = 0;
        for(Opportunity objOpp : [SELECT Total_Sw_Account_Manager__c, Total_Sw_Channel_Manager__c FROM Opportunity ORDER BY LastModifiedDate ASC])
        {
            count++;
            // verify the count on first 100 records 
            if(count <= 100)
            {
                system.assertEquals(3, objOpp.Total_Sw_Account_Manager__c);
                system.assertEquals(3, objOpp.Total_Sw_Channel_Manager__c);
            }
            // verify the count on first 101th record 
            else
            {
                system.assertEquals(0, objOpp.Total_Sw_Account_Manager__c);
                system.assertEquals(0, objOpp.Total_Sw_Channel_Manager__c);
            }
            
        }
    }
}

 
Nayana KNayana K
Any issues faced? Did it give expected result?
SriniSrini
@Nayana,

We are good as of now.If any thing else i will let you know. Don't mine can you give me your mail id hear?

Thanks