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
aparna d 1aparna d 1 

Apex CPU time limit exceeded when i click on the button

Hi All,

I am getting issue with Apex CPU time limit exceeded when i click on the button and error is coming from below method. Can any one please help meon this.
Thanks in advance

public List<salesforcerequestdocumentSfaccountreque.Contract> buildContractClassHierarchy (SB_Account_Letter__c serviceLetter, list<Asset__c> assetList, SB_Ref_Table__c letterDetails, list<Contract_c__c> selectedcontractList)
    {
        list<salesforcerequestdocumentSfaccountreque.Contract> result = new list<salesforcerequestdocumentSfaccountreque.Contract>();
        set<Id> contractSet = new set<Id>();
        list<Contract_c__c> allContracts = new list<Contract_c__c>();
        list<Asset__c> allAssets = new list<Asset__c>();
        list<Buyout__c> allBuyouts = new list<Buyout__c>();
        //1697
       // if (letterDetails.Letter_Code__c == 'USACCREPOSLTR')
        if (letterDetails.Class__c == '7') 
        {
           for (Contract_c__c sc :selectedcontractList)
          { 
           contractSet.add(sc.id);
        
           }
         }
            
        for (Asset__c a: assetList){
            contractSet.add(a.Contract_Number__c);
        }
        allContracts = this.getContractList(serviceLetter, contractSet, letterDetails);
        allAssets = this.getAssetList(allContracts, assetList);
        allBuyouts = this.getBuyoutList(contractSet);
        
        for (Contract_c__c c: allContracts)
        {
            salesforcerequestdocumentSfaccountreque.Contract cVO = new salesforcerequestdocumentSfaccountreque.Contract();
            cVO.Assets = new salesforcerequestdocumentSfaccountreque.Assets();
            cVO.Assets.Asset = new list<salesforcerequestdocumentSfaccountreque.Asset>();
            
            System.debug('medar heap before populateContractInfo call: '+ Limits.getHeapSize() );      
            populateContractInfo (c, cVO);
            System.debug('medar heap after populateContractInfo call: ' + Limits.getHeapSize() ); 
            
            for (Asset__c a: allAssets)
            {
                if (c.Id == a.Contract_Number__c)
                {
                    salesforcerequestdocumentSfaccountreque.Asset aVO = new salesforcerequestdocumentSfaccountreque.Asset();
                    
                    System.debug('medar heap before populateAssetInfo call:' + Limits.getHeapSize() );  
                    aVO = this.populateAssetInfo (a);
                    System.debug('medar Heap after populateAssetInfo call: ' + Limits.getHeapSize() );
                    system.debug('medar Heap size is: ' + Limits.getHeapSize());
                    cVO.Assets.Asset.add (aVO);
                     System.debug('medar after cVO.Assets.Asset.add (aVO)' );
                    system.debug('medar Heap size is before null aVO: ' + Limits.getHeapSize());
                    aVO = null;//medar attempting to reduce heap
                    system.debug('medar Heap size is after null aVO: ' + Limits.getHeapSize());
                }
            }
            
            if (letterDetails.Class__c == '2')
            {
                cVO.Buyouts = new salesforcerequestdocumentSfaccountreque.Buyouts();
                cVO.Buyouts.Buyout = new list<salesforcerequestdocumentSfaccountreque.Buyout>();
                for (Buyout__c b: allBuyouts)
                {
                    if (c.Id == b.Contract__c)
                    {
                        salesforcerequestdocumentSfaccountreque.Buyout bVO = new salesforcerequestdocumentSfaccountreque.Buyout();
                        System.debug('medar before bVO = this.populateBuyoutInfo(b)' );  
                        bVO = this.populateBuyoutInfo(b);
                        System.debug('medar after bVO = this.populateBuyoutInfo(b)' );  
                        cVO.Buyouts.Buyout.add(bVO);
                        system.debug('medar  Heap size before bVO is nulled: ' + Limits.getHeapSize());
                        bVO = null;//medar trying to reduce heap
                        system.debug('medar  Heap size after bVO is nulled: ' + Limits.getHeapSize());
                        System.debug('medar after cVO.Buyouts.Buyout.add(bVO);' );  
                    }
                }
            }
            System.debug('medar before result.add(cVO);' );
            result.add(cVO);
            System.debug('medar after result.add(cVO);' );
        }
        return result;   
    }
 
VinayVinay (Salesforce Developers) 
Hi Aparna,

Kindly review below link which can help you on Apex CPU time limit exceeded error.

https://help.salesforce.com/articleView?id=000339361&language=en_US&type=1&mode=1

Also I found below KI issue.
https://success.salesforce.com/issues_view?id=a1p3A000000AT8oQAG

Hope above information was helpful.

Please mark as Best Answer so that it can help others in the future.

Thanks,
Vinay Kumar
aparna d 1aparna d 1
Hi Vinay,

Thanks for your help , am getting error in below line. What i have to change in code. Can you please help me

salesforcerequestdocumentSfaccountreque.Asset aVO = new salesforcerequestdocumentSfaccountreque.Asset();