You need to sign in to do that
Don't have an account?

too many script : 200001
Hello,
I have one method which is exporting record over 2000 and when i am clicking on export all button i am facing error.i.e. too many script statement :200001.
Now i can't optimize the lines so that i want to catch this exception and i want to show message so i thought to put try catch on that method but still i am getting that exception.
Here is the code of that method :-
public PageReference exportAll(){ Pagereference pg; try{ pg = new Pagereference('/apex/TransactionExcelGenerator?accId='+ controllerAccount.Id + '&exportall=yes' + '&listview='+ selectedList + '&sortfield=' + sortFieldName + '&sortfield1=' + sortFieldName1 + '&ordertype=' + orderType ); system.debug('----page---'+pg); return pg; } catch(Exception ex){ Apexpages.addMessage(new Apexpages.Message(Apexpages.Severity.INFO, 'Exporting this view is not possible due to large amount of data being accessed. Please either change view filter, select fewer rows to export or use reporting functionality to extract the data required:'+ex.getMessage())); return null; } }
Minkesh,
What I am guessing is that actually you are passing some parameter to the "TransactionExcelGenerator" page and the controller of that page is throwing that script error. You must find out the ways to optimize the controller of "TransactionExcelGenerator"
you can use Limits.getScriptStatements() to check as how much scripts is been used, Most probably some codes are being run into loop and some point of time they are crossing the 200000 scripts limit.
you can use something like the follow in the beginning or end of the loop (in the controller of TransactionExcelGenerator page)
if ((200000 - Limits.getScriptStatements()) < 10000)
break;
it will break the looping as soon as script left is less than 10000.
*also you can use system.debug('script used --'+Limits.getScriptStatements()) to check out how much script is being used*
All Answers
You cannot catch governor limit exceptions. The best way to handle this is to use the Limits methods to check how far into your governor limits you are at various points in your code. If you are getting close to violating them, you should abort your processing and present a message to the end user.
Minkesh,
What I am guessing is that actually you are passing some parameter to the "TransactionExcelGenerator" page and the controller of that page is throwing that script error. You must find out the ways to optimize the controller of "TransactionExcelGenerator"
you can use Limits.getScriptStatements() to check as how much scripts is been used, Most probably some codes are being run into loop and some point of time they are crossing the 200000 scripts limit.
you can use something like the follow in the beginning or end of the loop (in the controller of TransactionExcelGenerator page)
if ((200000 - Limits.getScriptStatements()) < 10000)
break;
it will break the looping as soon as script left is less than 10000.
*also you can use system.debug('script used --'+Limits.getScriptStatements()) to check out how much script is being used*
Hi,
I have a for loop over map having huge records, its giving too many script error.
I want some solution how can i solve this? serving my purpose of custom key (not ids as key)
Following is the piece of code:
Map<String, List<Account_Participation__c>> map_APWithCountry = new Map<String, List<Account_Participation__c>>();
Map<Id, Account_Participation__c> map_AP = new Map<Id, Account_Participation__c>();
map_AP.putAll([Select Id, Event__c, Catalogue_Country__c, Participation_Status__c,First_Timer1__c,Account__c from Account_Participation__c where Event__c = :listEvents]);
for(Id apId: map_AP.keySet())
{
setValidAccIds.add(map_AP.get(apId).Account__c);
String key = String.valueOf(map_AP.get(apId).Catalogue_Country__c) + String.valueOf(map_AP.get(apId).Event__c);
List<Account_Participation__c> groupedAPs = map_APWithCountry.get(key);
if (null==groupedAPs)
{
groupedAPs = new List<Account_Participation__c>();
map_APWithCountry.put(key, groupedAPs);
}
groupedAPs.add(map_AP.get(apId));
}