You need to sign in to do that
Don't have an account?
aparna 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;
}
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;
}
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
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();