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
Deepak Sharma 184Deepak Sharma 184 

test class issue - System.LimitException: Too many SOQL queries: 101

Hi Expert,

Iam getting error "System.LimitException: Too many SOQL queries: 101" when i write test class for "update Estimated Cost", iam not able to run it,
and getting error too many soql queries, from other apex class-  "updatePortfolioActualCost", and i have also writen in my test class- seeAllData = false, but it is checking for the other class too. can anybody help me on this.

test class- 

@isTest(seeAllData = false)
private class UpdateEstimatedCostTest
{
    static testMethod void verifyEstimatedCost()
 {      
      CloudbyzITPM__Project_Portfolio__c portfolio1 = new CloudbyzITPM__Project_Portfolio__c(Name = 'Porfolio 1', CloudbyzITPM__Estimated_Costs__c=13.00);
      CloudbyzITPM__Project_Portfolio__c portfolio2 = new CloudbyzITPM__Project_Portfolio__c(Name = 'portfolio 1.1',CloudbyzITPM__Estimated_Costs__c=17.00);
     
     Test.startTest();
     
     
     
     insert portfolio1;
     
     insert portfolio2;
        
     CloudbyzITPM__Project_Portfolio__c portfolio1_1 = [Select id,name,CloudbyzITPM__Estimated_Costs__c from CloudbyzITPM__Project_Portfolio__c where id = :portfolio1.id];
     CloudbyzITPM__Project_Portfolio__c portfolio2_2 = [Select id,name,CloudbyzITPM__Estimated_Costs__c from CloudbyzITPM__Project_Portfolio__c where id = :portfolio2.id];
    
     
     
     CloudbyzITPM__Project__c affectedPro = new CloudbyzITPM__Project__c(Name = 'Project 1');
    
    // creating project without portfoilio and planned estimated cost
    
     insert affectedPro;
    
     CloudbyzITPM__Project__c affectedPro1 = new CloudbyzITPM__Project__c(Name = 'Project 2', CloudbyzITPM__Project_Portfolio__c= portfolio1_1.id );
   
     insert affectedPro1;
     
     
     CloudbyzITPM__Project__c affectedPro1_1 = [Select id,name,CloudbyzITPM__Planned_Estimated_Costs__c,CloudbyzITPM__Project_Portfolio__c from CloudbyzITPM__Project__c where id = :affectedPro1.id limit 1]; 
 
  // change the portfolio value of a project
 
     affectedPro1_1.CloudbyzITPM__Project_Portfolio__c = portfolio2_2.id;
  
     
     update affectedPro1_1;
    
     
     // remove planned estimated cost of project mapped to a portfoilo
     
     affectedPro1_1.CloudbyzITPM__Planned_Estimated_Costs__c = null;
     
     update affectedPro1_1;
    
   // change the portfolio and update the estimated cost
     
     affectedPro1_1.CloudbyzITPM__Planned_Estimated_Costs__c = 450;
     
     update affectedPro1_1;
     
   //remove portfoilio with actual hours
   
    
    affectedPro1_1.CloudbyzITPM__Project_Portfolio__c = null;
    
    update affectedPro1_1;
    
    
     CloudbyzITPM__Project__c affectedPro2 = new CloudbyzITPM__Project__c(Name = 'Project 3', CloudbyzITPM__Planned_Estimated_Costs__c =200.00);
    
    // creating project without portfolio and with estimated cost
    
     insert affectedPro2;
     
     
     portfolio1_1.CloudbyzITPM__Estimated_Costs__c=affectedPro2.CloudbyzITPM__Planned_Estimated_Costs__c;
     
     update portfolio1;
     
     portfolio2_2.CloudbyzITPM__Estimated_Costs__c=affectedPro2.CloudbyzITPM__Planned_Estimated_Costs__c;
     
     update portfolio2;
     
     portfolio1_1.CloudbyzITPM__Estimated_Costs__c=affectedPro1.CloudbyzITPM__Planned_Estimated_Costs__c;
     
     
     update portfolio1;
     
     portfolio2_2.CloudbyzITPM__Estimated_Costs__c=affectedPro1.CloudbyzITPM__Planned_Estimated_Costs__c;
     
     update portfolio2_2;
     
     
    CloudbyzITPM__Project__c affectedPro2_1 = [Select id,name,CloudbyzITPM__Planned_Estimated_Costs__c,CloudbyzITPM__Project_Portfolio__c from CloudbyzITPM__Project__c where id = :affectedPro2.id limit 1]; 
    affectedPro2_1.CloudbyzITPM__Planned_Estimated_Costs__c=300.00;
    
    // change the value of estimated cost of project which is mapped to a portfolio
    
    update affectedPro2_1;
    
    affectedPro2.CloudbyzITPM__Planned_Estimated_Costs__c=100.00;
    update affectedPro2;
     
     
    delete affectedPro2_1;
    
    delete affectedPro;
     Test.stopTest();  
 } 
}


Different class where iam getting error- on line no.100 

public class updatePortfolioActualCosts 

{
    public static List<CloudbyzITPM__Project__c> affectedActualCosts = new List<CloudbyzITPM__Project__c>();
    public static List<CloudbyzITPM__Project__c> oldaffectedActualCosts = new List<CloudbyzITPM__Project__c>();
    public static set<ID> affc = new set<ID>();
    public static set<ID> affcold = new set<ID>();
    
    
    public static void processAfterUpdateActualCosts()
  {
      // inserting old and new values
  
       affectedActualCosts = (List<CloudbyzITPM__Project__c>)Trigger.New;
       oldaffectedActualCosts = (List<CloudbyzITPM__Project__c>)Trigger.Old;
       
      // process after deleting the project 
       
       if(Trigger.isDelete)
       {
         for(CloudbyzITPM__Project__c  affc1 : oldaffectedActualCosts)
       {
       
      // check whether the portfolio is selescted for the project
       
       if(affc1.CloudbyzITPM__Project_Portfolio__c != null)
       {
         system.debug('value of affc1'+ affc1);
         affc.add(affc1.CloudbyzITPM__Project_Portfolio__c);
       }
       }
         system.debug('this is the value'+ affc);
       
       // process after selecting the portfolio
       
       if(affc.size()>0)
       {
         CloudbyzITPM__Project_Portfolio__c fn = [select id,name,CloudbyzITPM__Total_Actual_Cost__c from CloudbyzITPM__Project_Portfolio__c where id in: affc limit 1];
         list<CloudbyzITPM__Project__c> affectedActualCosts1 = [select id, name,CloudbyzITPM__Total_Actual_Cost__c, CloudbyzITPM__Project_Portfolio__c from CloudByzITPM__Project__c where CloudbyzITPM__Project_Portfolio__c = :fn.id];
          
         Decimal j=0;
         System.debug('@@affectedActualCosts1@@'+affectedActualCosts1+'@@affectedActualCosts1.size'+affectedActualCosts1.size());  
       if(affectedActualCosts1.size()>0)
       {
         for(CloudbyzITPM__Project__C afc1 : affectedActualCosts1)
       {
         System.debug('@@afc1.CloudbyzITPM__Total_Actual_Cost__c@@'+afc1.CloudbyzITPM__Total_Actual_Cost__c);
       if(afc1.CloudbyzITPM__Total_Actual_Cost__c !=0 && afc1.CloudbyzITPM__Total_Actual_Cost__c!=null)
         
         // add all the actual cost of the associated project
            
          j = j + afc1.CloudbyzITPM__Total_Actual_Cost__c;
       }
    }
    
        // put all the roll ups of actual cost to portfolio
    
       if(j>0)
       {
         System.debug('@@pBUFinal@@');
         fn.CloudbyzITPM__Total_Actual_Cost__c = j;
       }
          
       else
       {
         fn.CloudbyzITPM__Total_Actual_Cost__c = 0;
       }
         update fn; 
         System.debug('@@fn4@@'+fn);
       }
    }
       else
       {
       if(affectedActualCosts.size()>0)
       {
         system.debug('@@@value of affc1'+ affectedActualCosts);
         for(integer i = 0; i<affectedActualCosts.size(); ++i)
       {
       if(affectedActualCosts[i]!= null && affectedActualCosts[i].CloudbyzITPM__Project_Portfolio__c != null && oldaffectedActualCosts!= null && oldaffectedActualCosts[i]!= null && oldaffectedActualCosts[i].CloudbyzITPM__Project_Portfolio__c != null && oldaffectedActualCosts[i].CloudbyzITPM__Project_Portfolio__c != affectedActualCosts[i].CloudbyzITPM__Project_Portfolio__c)
       {
         system.debug('value of affc1'+ affectedActualCosts[i]);
         affc.add(affectedActualCosts[i].CloudbyzITPM__Project_Portfolio__c);
         affcold.add(oldaffectedActualCosts[i].CloudbyzITPM__Project_Portfolio__c);
       }
       if(affectedActualCosts[i].CloudbyzITPM__Project_Portfolio__c != null)
       {
         system.debug('value of affc1'+ affectedActualCosts[i]);
         affc.add(affectedActualCosts[i].CloudbyzITPM__Project_Portfolio__c);
       } 
       else if(oldaffectedActualCosts!= null && oldaffectedActualCosts[i]!= null && oldaffectedActualCosts[i].CloudbyzITPM__Project_Portfolio__c != null)
       {
         affc.add(oldaffectedActualCosts[i].CloudbyzITPM__Project_Portfolio__c); 
       }
             
     }
       if(affcold.size()>0)
       {
         system.debug('this is the value'+ affc);
         CloudbyzITPM__Project_Portfolio__c fn = [select id,name,CloudbyzITPM__Total_Actual_Cost__c from CloudbyzITPM__Project_Portfolio__c where id in: affcold limit 1];
         list<CloudbyzITPM__Project__c> affectedActualCosts1 = [select id, name,CloudbyzITPM__Total_Actual_Cost__c, CloudbyzITPM__Project_Portfolio__c from CloudByzITPM__Project__c where CloudbyzITPM__Project_Portfolio__c = :fn.id];
      
         Decimal j=0;
         System.debug('@@affectedActualCosts1@@'+affectedActualCosts1+'@@affectedActualCosts1.size'+affectedActualCosts1.size());  
     
      if(affectedActualCosts1.size()>0)
       {
         for(CloudbyzITPM__Project__C afc1 : affectedActualCosts1)
       {
         System.debug('@@afc1.CloudbyzITPM__Total_Actual_Cost__c@@'+afc1.CloudbyzITPM__Total_Actual_Cost__c);
     
      if(afc1.CloudbyzITPM__Total_Actual_Cost__c !=0 && afc1.CloudbyzITPM__Total_Actual_Cost__c!=null)
            j = j + afc1.CloudbyzITPM__Total_Actual_Cost__c;
       }
      }
    
      if(j>0)
      {
         System.debug('@@pBUFinal@@');
         fn.CloudbyzITPM__Total_Actual_Cost__c = j;
      }
      else
      {
         fn.CloudbyzITPM__Total_Actual_Cost__c = 0;
      }
      update fn; 
         System.debug('@@fn4@@'+fn);
      }
      if(affc.size()>0)
      {
         system.debug('this is the value'+ affc);
         CloudbyzITPM__Project_Portfolio__c fn = [select id,name,CloudbyzITPM__Total_Actual_Cost__c from CloudbyzITPM__Project_Portfolio__c where id in: affc limit 1];
         list<CloudbyzITPM__Project__c> affectedActualCosts1 = [select id, name,CloudbyzITPM__Total_Actual_Cost__c, CloudbyzITPM__Project_Portfolio__c from CloudByzITPM__Project__c where CloudbyzITPM__Project_Portfolio__c = :fn.id];
      
         Decimal j=0;
         System.debug('@@affectedActualCosts1@@'+affectedActualCosts1+'@@affectedActualCosts1.size'+affectedActualCosts1.size());  
      if(affectedActualCosts1.size()>0)
       {
         for(CloudbyzITPM__Project__C afc1 : affectedActualCosts1)
       {
         System.debug('@@afc1.CloudbyzITPM__Total_Actual_Cost__c@@'+afc1.CloudbyzITPM__Total_Actual_Cost__c);
      if(afc1.CloudbyzITPM__Total_Actual_Cost__c !=0 && afc1.CloudbyzITPM__Total_Actual_Cost__c!=null)
            j = j + afc1.CloudbyzITPM__Total_Actual_Cost__c;
       }
    }
    
      if(j>0)
       {
         System.debug('@@pBUFinal@@');
         fn.CloudbyzITPM__Total_Actual_Cost__c = j;
       }
      else
      {
         fn.CloudbyzITPM__Total_Actual_Cost__c = 0;
      }
         update fn; 
         System.debug('@@fn4@@'+fn);
    }
    }
    }
}
}

Regards,

Deepak
Sankaranarayanan VenkatachalamSankaranarayanan Venkatachalam
Hi Deepak,

In your first class, I see that you are creating two 'CloudbyzITPM__Project_Portfolio__c' records and inserting them indivually. One better way to do it is creating a list of 'CloudbyzITPM__Project_Portfolio__c' and inserting the list once. Also you are updaing various values of 'affectedPro1_1' instance of 'CloudbyzITPM__Project__c' object and performing update for each and every time. You can perform all the changes and update the record once. One thing I would do in my test classes is, adding the 'Test.startTest()' after I finish performing few DMLs. i.e. in the middle of the method, instead of adding it in the top of the method.

Please try these and let me know if it solves the issue.

Regards,
Sankaranarayanan V