You need to sign in to do that
Don't have an account?
Vanitha Mani
View state error exceeded 170KB
Hi can anyone solve view state error in my controller and VF page .
Controller: public with sharing class SVC_CR_CloneCRPackage_Ctl { private final static List<String> EXCLUDED_STATUSES = new List<String>{'Closed', 'Cancelled'}; public Boolean isCompleted {get; set;} public Boolean getRelatedAccountOnly {get; set;} public SelectableChangeRequest[] changeRequests {get; set;} private SVC_CP_QueryBuilder changeRequestsQB; private SVC_CR_Package__c crPackage; public SVC_CR_CloneCRPackage_Ctl() { getRelatedAccountOnly = true; isCompleted = false; crPackage = getCrPackage(); changeRequests = getChangeRequests(); } /** * Clones cr package to selected change requests */ public PageReference clonePackageToChangeRequests(){ Savepoint sp = Database.setSavepoint(); try { Set<ID> crIds = new Set<ID>(); for (SelectableChangeRequest record : changeRequests) { if (record.selected) { crIds.add(record.obj.Id); } } if (crIds.size() > 0) { return handleSuccess(SVC_CR_Package_Service.clonePackage(crIds, crPackage.Id)); } } catch (Exception e) { Database.rollback(sp); ApexPages.addMessage(SVC_ErrorHandler.logAndConvertToApexMessage(e)); } return null; } /** * Redirects to new package if there is one, * Displays list of new packages if there are many */ private PageReference handleSuccess(SVC_CR_Package__c[] newPackages) { if (newPackages.size() == 1) { return redirect(newPackages[0].Id); } showSuccess(newPackages); return null; } /** * Displays success message with list of new packages */ private void showSuccess(SVC_CR_Package__c[] newPackages) { for (SVC_CR_Package__c record : newPackages) { String message = Label.SVC_CR_ClonedPackages.replace('{0}', '/' + record.Id) .replace('{1}', record.Name); ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.INFO, message)); } ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.CONFIRM, Label.SVC_CR_ClonedPackageSuccess)); isCompleted = true; } /** * Redirects back to Opportunity record */ public PageReference cancel() { return redirect(crPackage.Id); } /** * Displays only change requests that has Account related to Opportunity */ public void withRelatedAccount() { getRelatedAccountOnly = true; changeRequests = getChangeRequests(); } /** * Displays all change requests */ public void withAllAccounts() { getRelatedAccountOnly = false; changeRequests = getChangeRequests(); } /** * Redirects to cr package page */ private PageReference redirect(ID recordId) { PageReference retURL = new PageReference('/' + recordId); retURL.setRedirect(true); return retURL; } /** * Queries cr package record */ private SVC_CR_Package__c getCrPackage() { return (SVC_CR_Package__c) SVC_CP_QueryBuilder.getInstance(SVC_CR_Package__c.SObjectType) .withAllFields() .withField('Change_Request__r.Opportunity__c') .withField('Change_Request__r.Account__r.Name') .withField('Change_Request__r.Account__r.Systems_Parent__c') .andWhereEq(SVC_CR_Package__c.Id, ApexPages.currentPage().getParameters().get('packageId')) .queryOne(); } /** * Queries change requests */ private SelectableChangeRequest[] getChangeRequests() { SVC_CP_QueryBuilder changeRequestsQB = SVC_CP_QueryBuilder.getInstance(SVC_Change_Request__c.SObjectType) .withAllFields() .withFields(new String[]{ 'Account__c', 'Account__r.Name', 'Account__r.Systems_Parent__c', 'Opportunity__c', 'Opportunity__r.Name', 'Change_Owner__c', 'Change_Owner__r.Name' }) .andWhereEq(SVC_Change_Request__c.RecordTypeId, SVC_CR_ChangeRequestService.getInstance().getProjectRecordTypeId()) // .andWhereNotIn( // SVC_Change_Request__c.Id, // SVC_CP_QueryBuilder.getInstance(SVC_CR_Package__c.SObjectType) // .withField(SVC_CR_Package__c.Change_Request__c) // .andWhereNotIn('Change_Request__r.Status__c', EXCLUDED_STATUSES) // ) .andWhereNotIn(SVC_Change_Request__c.Status__c, EXCLUDED_STATUSES); if (getRelatedAccountOnly) { Set<ID> relatedAccountIds = new Set<ID>{crPackage.Change_Request__r.Account__c}; if (crPackage.Change_Request__r.Account__r.Systems_Parent__c != null) { relatedAccountIds.add(crPackage.Change_Request__r.Account__r.Systems_Parent__c); } changeRequestsQB.andWhereIn('Account__r.Systems_Parent__c', relatedAccountIds); } SVC_Change_Request__c[] changeRequests = (SVC_Change_Request__c[]) changeRequestsQB.queryList(); SelectableChangeRequest[] crs = new SelectableChangeRequest[]{}; for (SVC_Change_Request__c cr : changeRequests) { crs.add(new SelectableChangeRequest(cr)); } return crs; } public class SelectableChangeRequest { public Boolean selected {get; set;} public SVC_Change_Request__c obj {get; set;} public SelectableChangeRequest(SVC_Change_Request__c obj) { this.obj = obj; this.selected = false; } } } Visual force page <apex:page controller="SVC_CR_CloneCRPackage_Ctl"> <apex:stylesheet value="{!URLFOR($Resource.BugPagination, 'DataTable/CSS/jquery.dataTables.min.css')}"/> <apex:stylesheet value="{!URLFOR($Resource.BugPagination, 'DataTable/ExternalCSS/ExternalCSS.css')}"/> <style> .message .messageText a { margin: 0; font-size: 100%; } </style> <script type="text/javascript" language="javascript" src="{!URLFOR($Resource.BugPagination, 'DataTable/JS/jquery-1.10.2.min.js')}"></script> <script type="text/javascript" language="javascript" src="{!URLFOR($Resource.BugPagination, 'DataTable/JS/jquery.dataTables.min.js')}"></script> <script type="text/javascript" language="javascript"> var j$ = jQuery.noConflict(); j$(document).ready(function() { initTable(); }); var initTable = function() { j$('table.dataTable').dataTable({ "bPaginate" : false, "bLengthChange" : false, "bFilter" : true, "bSort" : true, "bInfo" : true, "bAutoWidth" : false, "scrollY": "500px", "columnDefs": [ { "orderable": false, "targets": 0 }, ] }); }; </script> <apex:form > <apex:pageblock id="pbId"> <apex:pageMessages escape="false" id="messages"/> <apex:pageBlockButtons id="PgButtons"> <apex:commandButton value="Back" action="{!cancel}" immediate="true"/> <apex:commandButton value="Clone Package To Selected CRs" action="{!clonePackageToChangeRequests}" reRender="pbId" status="fetchStatus" rendered="{!NOT(isCompleted)}"/> </apex:pageBlockButtons> <apex:outputPanel > <apex:actionStatus id="fetchStatus"> <apex:facet name="start"> <img src="/img/loading.gif"/> </apex:facet> </apex:actionStatus> </apex:outputPanel> <apex:pageBlockSection id="pageSection" columns="1" rendered="{!NOT(isCompleted)}"> <apex:outputPanel id="accountFilters"> <apex:commandLink action="{!withRelatedAccount}" value="Show related Account" id="relatedAccountLink" rendered="{!!getRelatedAccountOnly}" reRender="pageSection" status="fetchStatus" onComplete="initTable();"/> <apex:commandLink action="{!withAllAccounts}" value="Show all Accounts" id="allAccountsLink" rendered="{!getRelatedAccountOnly}" reRender="pageSection" status="fetchStatus" onComplete="initTable();"/> </apex:outputPanel> <apex:pageBlockTable id="crTable" value="{!changeRequests}" var="item" styleClass="dataTable"> <apex:column id="row"> <apex:inputCheckbox id="selectBox" value="{!item.selected}"/> </apex:column> <apex:column > <apex:facet name="header">Change Request</apex:facet> <apex:outputLink value="/{!item.obj.Id}">{!item.obj.Name}</apex:outputLink> </apex:column> <apex:repeat value="{!$ObjectType.SVC_Change_Request__c.FieldSets.PackageCloneListView}" var="f"> <apex:column value="{!item.obj[f]}"/> </apex:repeat> </apex:pageBlockTable> </apex:pageBlockSection> </apex:pageblock> </apex:form> </apex:page>
Controller: public with sharing class SVC_CR_CloneCRPackage_Ctl { private final static List<String> EXCLUDED_STATUSES = new List<String>{'Closed', 'Cancelled'}; public Boolean isCompleted {get; set;} public Boolean getRelatedAccountOnly {get; set;} public SelectableChangeRequest[] changeRequests {get; set;} private SVC_CP_QueryBuilder changeRequestsQB; private SVC_CR_Package__c crPackage; public SVC_CR_CloneCRPackage_Ctl() { getRelatedAccountOnly = true; isCompleted = false; crPackage = getCrPackage(); changeRequests = getChangeRequests(); } /** * Clones cr package to selected change requests */ public PageReference clonePackageToChangeRequests(){ Savepoint sp = Database.setSavepoint(); try { Set<ID> crIds = new Set<ID>(); for (SelectableChangeRequest record : changeRequests) { if (record.selected) { crIds.add(record.obj.Id); } } if (crIds.size() > 0) { return handleSuccess(SVC_CR_Package_Service.clonePackage(crIds, crPackage.Id)); } } catch (Exception e) { Database.rollback(sp); ApexPages.addMessage(SVC_ErrorHandler.logAndConvertToApexMessage(e)); } return null; } /** * Redirects to new package if there is one, * Displays list of new packages if there are many */ private PageReference handleSuccess(SVC_CR_Package__c[] newPackages) { if (newPackages.size() == 1) { return redirect(newPackages[0].Id); } showSuccess(newPackages); return null; } /** * Displays success message with list of new packages */ private void showSuccess(SVC_CR_Package__c[] newPackages) { for (SVC_CR_Package__c record : newPackages) { String message = Label.SVC_CR_ClonedPackages.replace('{0}', '/' + record.Id) .replace('{1}', record.Name); ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.INFO, message)); } ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.CONFIRM, Label.SVC_CR_ClonedPackageSuccess)); isCompleted = true; } /** * Redirects back to Opportunity record */ public PageReference cancel() { return redirect(crPackage.Id); } /** * Displays only change requests that has Account related to Opportunity */ public void withRelatedAccount() { getRelatedAccountOnly = true; changeRequests = getChangeRequests(); } /** * Displays all change requests */ public void withAllAccounts() { getRelatedAccountOnly = false; changeRequests = getChangeRequests(); } /** * Redirects to cr package page */ private PageReference redirect(ID recordId) { PageReference retURL = new PageReference('/' + recordId); retURL.setRedirect(true); return retURL; } /** * Queries cr package record */ private SVC_CR_Package__c getCrPackage() { return (SVC_CR_Package__c) SVC_CP_QueryBuilder.getInstance(SVC_CR_Package__c.SObjectType) .withAllFields() .withField('Change_Request__r.Opportunity__c') .withField('Change_Request__r.Account__r.Name') .withField('Change_Request__r.Account__r.Systems_Parent__c') .andWhereEq(SVC_CR_Package__c.Id, ApexPages.currentPage().getParameters().get('packageId')) .queryOne(); } /** * Queries change requests */ private SelectableChangeRequest[] getChangeRequests() { SVC_CP_QueryBuilder changeRequestsQB = SVC_CP_QueryBuilder.getInstance(SVC_Change_Request__c.SObjectType) .withAllFields() .withFields(new String[]{ 'Account__c', 'Account__r.Name', 'Account__r.Systems_Parent__c', 'Opportunity__c', 'Opportunity__r.Name', 'Change_Owner__c', 'Change_Owner__r.Name' }) .andWhereEq(SVC_Change_Request__c.RecordTypeId, SVC_CR_ChangeRequestService.getInstance().getProjectRecordTypeId()) // .andWhereNotIn( // SVC_Change_Request__c.Id, // SVC_CP_QueryBuilder.getInstance(SVC_CR_Package__c.SObjectType) // .withField(SVC_CR_Package__c.Change_Request__c) // .andWhereNotIn('Change_Request__r.Status__c', EXCLUDED_STATUSES) // ) .andWhereNotIn(SVC_Change_Request__c.Status__c, EXCLUDED_STATUSES); if (getRelatedAccountOnly) { Set<ID> relatedAccountIds = new Set<ID>{crPackage.Change_Request__r.Account__c}; if (crPackage.Change_Request__r.Account__r.Systems_Parent__c != null) { relatedAccountIds.add(crPackage.Change_Request__r.Account__r.Systems_Parent__c); } changeRequestsQB.andWhereIn('Account__r.Systems_Parent__c', relatedAccountIds); } SVC_Change_Request__c[] changeRequests = (SVC_Change_Request__c[]) changeRequestsQB.queryList(); SelectableChangeRequest[] crs = new SelectableChangeRequest[]{}; for (SVC_Change_Request__c cr : changeRequests) { crs.add(new SelectableChangeRequest(cr)); } return crs; } public class SelectableChangeRequest { public Boolean selected {get; set;} public SVC_Change_Request__c obj {get; set;} public SelectableChangeRequest(SVC_Change_Request__c obj) { this.obj = obj; this.selected = false; } } } Visual force page <apex:page controller="SVC_CR_CloneCRPackage_Ctl"> <apex:stylesheet value="{!URLFOR($Resource.BugPagination, 'DataTable/CSS/jquery.dataTables.min.css')}"/> <apex:stylesheet value="{!URLFOR($Resource.BugPagination, 'DataTable/ExternalCSS/ExternalCSS.css')}"/> <style> .message .messageText a { margin: 0; font-size: 100%; } </style> <script type="text/javascript" language="javascript" src="{!URLFOR($Resource.BugPagination, 'DataTable/JS/jquery-1.10.2.min.js')}"></script> <script type="text/javascript" language="javascript" src="{!URLFOR($Resource.BugPagination, 'DataTable/JS/jquery.dataTables.min.js')}"></script> <script type="text/javascript" language="javascript"> var j$ = jQuery.noConflict(); j$(document).ready(function() { initTable(); }); var initTable = function() { j$('table.dataTable').dataTable({ "bPaginate" : false, "bLengthChange" : false, "bFilter" : true, "bSort" : true, "bInfo" : true, "bAutoWidth" : false, "scrollY": "500px", "columnDefs": [ { "orderable": false, "targets": 0 }, ] }); }; </script> <apex:form > <apex:pageblock id="pbId"> <apex:pageMessages escape="false" id="messages"/> <apex:pageBlockButtons id="PgButtons"> <apex:commandButton value="Back" action="{!cancel}" immediate="true"/> <apex:commandButton value="Clone Package To Selected CRs" action="{!clonePackageToChangeRequests}" reRender="pbId" status="fetchStatus" rendered="{!NOT(isCompleted)}"/> </apex:pageBlockButtons> <apex:outputPanel > <apex:actionStatus id="fetchStatus"> <apex:facet name="start"> <img src="/img/loading.gif"/> </apex:facet> </apex:actionStatus> </apex:outputPanel> <apex:pageBlockSection id="pageSection" columns="1" rendered="{!NOT(isCompleted)}"> <apex:outputPanel id="accountFilters"> <apex:commandLink action="{!withRelatedAccount}" value="Show related Account" id="relatedAccountLink" rendered="{!!getRelatedAccountOnly}" reRender="pageSection" status="fetchStatus" onComplete="initTable();"/> <apex:commandLink action="{!withAllAccounts}" value="Show all Accounts" id="allAccountsLink" rendered="{!getRelatedAccountOnly}" reRender="pageSection" status="fetchStatus" onComplete="initTable();"/> </apex:outputPanel> <apex:pageBlockTable id="crTable" value="{!changeRequests}" var="item" styleClass="dataTable"> <apex:column id="row"> <apex:inputCheckbox id="selectBox" value="{!item.selected}"/> </apex:column> <apex:column > <apex:facet name="header">Change Request</apex:facet> <apex:outputLink value="/{!item.obj.Id}">{!item.obj.Name}</apex:outputLink> </apex:column> <apex:repeat value="{!$ObjectType.SVC_Change_Request__c.FieldSets.PackageCloneListView}" var="f"> <apex:column value="{!item.obj[f]}"/> </apex:repeat> </apex:pageBlockTable> </apex:pageBlockSection> </apex:pageblock> </apex:form> </apex:page>
Greetings!
It could be because of the number of records increased.So,I would suggest you to check the below document for the changes that you need to take a look at in your code to fix the issue.
https://help.salesforce.com/articleView?id=000321547&type=1&mode=1
Kindly mark it as best answer if it helps so that it can help others in the future.
Warm Regards,
Shirisha Pathuri
Thanks.