You need to sign in to do that
Don't have an account?
Art Smorodin 7
Getting "Apex CPU time limit exceeded" error.Can anyone help?
Hello everyone,
I am new to VisualForce but have some experiense doing Triggers and Classes. Trying to devlop a VF page which will show Contacts and Leads under a single view, frouped by Stage ( Stage__c is a common field on both Objects). Tbale should also have some data related to Tasks ( if a Contact has 5 overdue tasks, table shoud show that count).
I have VF page, Controlled and a class partially developped. As I add ned fields and calculations I test the page. It was working fine but now I see that "Apex CPU time limit exceeded " error.
Can you guys look at my code and suggest some modifications. Please be advised that my code is a bit of a mess, since I was taking parts of codes from all over the place and tried to fmodify it to meet my needs.
VF Page:
Contoller:
Class:
Thank you in advance!
I am new to VisualForce but have some experiense doing Triggers and Classes. Trying to devlop a VF page which will show Contacts and Leads under a single view, frouped by Stage ( Stage__c is a common field on both Objects). Tbale should also have some data related to Tasks ( if a Contact has 5 overdue tasks, table shoud show that count).
I have VF page, Controlled and a class partially developped. As I add ned fields and calculations I test the page. It was working fine but now I see that "Apex CPU time limit exceeded " error.
Can you guys look at my code and suggest some modifications. Please be advised that my code is a bit of a mess, since I was taking parts of codes from all over the place and tried to fmodify it to meet my needs.
VF Page:
<apex:page controller="DisplaySectionsController" sidebar="false" readOnly="true"> <apex:sectionHeader title="My Sample Display Page" subtitle="Group by States" description="This page shows how you can dynamically group results by field value."/> <apex:pageBlock title="My Tasks"> <table border="1"> <tr> <td width="50%"></td> <td>Count</td> </tr> <tr> <td id="pastdue">New contact requests</td> <td><apex:outputText value="" id="theValue"/></td> </tr> <tr> <td id="pastdue">Past due</td> <td><apex:outputLink value="/00O36000006wJ0w" id="theLink"><apex:outputText value="{!pastDue}" /></apex:outputLink></td> </tr> <tr> <td id="bold">Due today</td> <td><apex:outputText value="{!dueTod}"/></td> </tr> <tr> <td id="bold">Due tomorrow</td> <td><apex:outputText value="{!dueTmr}"/></td> </tr> <tr> <td>Due next 7 days</td> <td><apex:outputText value="{!duen7d}"/></td> </tr> <tr> <td>Other scheduled</td> <td></td> </tr> </table> </apex:pageBlock><br/> <apex:repeat value="{!states}" var="state"> <apex:pageBlock title="People is Stage: {!state}" > <table border = "1" width = "100%"> <tr> <td>Name</td> <td>Status</td> <td>Overdue Tasks</td> <td>Scheduled Tasks</td> <td>Most recent prospect Activity (days)</td> <td>Most recent interaction (days)</td> <td>Next interaction (days)</td> <td>Prospect Rating</td> <td>Other key contacts</td> <td>Other non-key contacts</td> <td>Contact description</td> <td>Most recent expression</td> <td>Most recent interaction</td> <td>Next Task</td> </tr> <apex:repeat value="{!RowList}" var="item"><apex:outputPanel rendered="{!IF(state=item.Stage,true,false)}"> <tr align ="center"> <td>{!item.Name}</td> <td>Status</td> <td>{!item.overTsk}</td> <td>{!item.schedTsk}</td> <td>{!item.MRPAd}</td> <td><apex:outputText value="{!item.stars}" escape="false"/></td> </tr> </apex:outputPanel></apex:repeat> </table> </apex:pageBlock> </apex:repeat> </apex:page>
Contoller:
public with sharing class DisplaySectionsController { public List<Contact> contacts {get;set;} public List<Lead> leads {get;set;} public String[] states {get;set;} List<Task> myTasks2; Map<String, List<Id>> listMyTasks = new Map<String, List<Id>>(); private Integer pastDue; private Integer dueTod ; private Integer dueTmr; private Integer duen7d; //public List<TableRow> RowList {get; set;} TskQueryClass TQC = new TskQueryClass(); Public class TableRow{ public String Name {get; set;} public Integer overTsk {get; set;} public Integer schedTsk {get; set;} public Integer MRPAd {get; set;} public Integer MRIntd {get; set;} public Integer NxtIntd {get; set;} public Integer Rating {get; set;} public String conDesc {get; set;} public String MRExp {get; set;} public String MRint {get; set;} public String NxtTsk {get; set;} public String Stage {get; set;} public String stars {get; set;} } public DisplaySectionsController() { // for demo purposes limit the states contacts = [Select ID, Name, Stage__c, Account.Name,scoring_prospect_level_stars__c From Contact Where Stage__c IN ('SAL', 'MQL','Buyer', 'Relevant', 'Connected','Qualifying','Actionable Response','Response','Prospecting','Target','Name') AND OwnerId = :userinfo.getuserId() AND CreatedDate >= 2016-01-01T00:00:00.000Z]; leads = [Select ID, Name, Stage__c, Company From Lead Where Stage__c IN ('SAL', 'MQL','Buyer', 'Relevant', 'Connected','Qualifying','Actionable Response','Response','Prospecting','Target','Name') AND OwnerId = :userinfo.getuserId() AND CreatedDate >= 2016-01-01T00:00:00.000Z]; // dynamically create set of unique states from query Set<String> stateSet = new Set<String>(); String[] stateSet2 = new String[]{'SAL', 'MQL','Buyer', 'Relevant', 'Connected','Qualifying','Actionable Response','Response','Prospecting','Target','Name'} ; for (Contact a : contacts) stateSet.add(a.Stage__c); for (Lead l : leads) stateSet.add(l.Stage__c); // convert the set into a string array states = new String[stateSet.size()]; Integer i = 0; for (String state : stateSet) { states[i] = state; i++; } //------------------------------------------------------------------------------------------------------------------------ myTasks2 = TQC.returnmyTasks(); for(Task a : myTasks2){ List<String> temp = listMyTasks.get(a.xTask_Status__c); if(temp == null) { listMyTasks.put(a.xTask_Status__c, new List<Id>{a.Id}); } else { temp.add(a.Id); } } }//end DisplaySectionsController() public Integer getpastDue(){ List<id> temp = listMyTasks.get('Pastdue'); if (temp != NULL) pastDue = temp.size(); else pastDue = 0; return pastDue; } public Integer getdueTod(){ List<id> temp = listMyTasks.get('DueToday'); if (temp != NULL) dueTod = temp.size(); else dueTod = 0; return dueTod; } public Integer getdueTmr(){ List<id> temp = listMyTasks.get('DueTmr'); if (temp != NULL) dueTmr = temp.size(); else dueTmr = 0; return dueTmr; } public Integer getduen7d(){ List<id> temp = listMyTasks.get('Scheduled'); if (temp != NULL) duen7d = temp.size(); else duen7d = 0; return duen7d; } //--------------------------------------------------------------------------------------------------------------------------------- public List<TableRow> getRowList(){ String MRPAtype = VFReporting_page__c.getInstance().Most_recent_prospect_activity_type__c; String MRPAsub = VFReporting_page__c.getInstance().Most_recent_prospect_activity_subject__c; Date startDate = system.today(); List<Task> MRPA; Integer MRPAdsice; List<TableRow> RowList = new List<TableRow>(); TableRow tr; Integer i = 0; String[] val = new String[]{'Name','Target','Prospecting','Response', 'Actionable Response','Qualifying','Connected', 'Relevant', 'Buyer', 'MQL', 'SAL', 'SQL', 'Customer'}; Map<Id, Task> testMap = new Map<Id, Task>([Select Id, whoId, xTask_Status__c from Task where OwnerId = :userinfo.getuserId() AND Status IN ('Not Started', 'In Progress') ]); for (Contact con :contacts){ tr = new TableRow(); tr.Name = con.Account.Name + ': '+ con.Name; tr.Stage = con.Stage__c; tr.stars = con.scoring_prospect_level_stars__c; tr.overTsk = TQC.abc(con.id, testMap.values()); tr.schedTsk = TQC.bbc(con.id, testMap.values()); RowList.add(tr); } for (Lead led : leads){ tr = new TableRow(); tr.Name =led.Company + ': '+ led.Name; tr.Stage = led.Stage__c; tr.overTsk = TQC.abc(led.id, testMap.values()); tr.schedTsk = TQC.bbc(led.id, testMap.values()); RowList.add(tr); } return RowList; } }
Class:
public with sharing class TskQueryClass { Public Static List<Task> myTaskList= New List<Task>(); Public Static Integer t6, t7; public List<Task> returnmyTasks(){ myTaskList =[Select id, ActivityDate, WhoId,xTask_Status__c from Task where OwnerId = :userinfo.getuserId() AND Status IN ('Not Started', 'In Progress') AND Subject IN ('New lead', 'Contact Request')]; return myTaskList; } public Integer abc(id ID, List<Task> Tazk){ List<id> op = new List<Id>(); for (Task t : Tazk){ if(t.whoId == ID && t.xTask_Status__c == 'Pastdue') op.add(t.whoId); } t6=op.size(); op.clear(); return t6; } public Integer bbc(id ID, List<Task> Tazk){ List<id> op2 = new List<Id>(); for (Task t : Tazk){ if(t.whoId == ID && t.xTask_Status__c == 'Scheduled') op2.add(t.whoId); } t7=op2.size(); op2.clear(); return t7; } }
Thank you in advance!