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
Vanitha ManiVanitha 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>
ShirishaShirisha (Salesforce Developers) 
Hi Vanitha,

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
Vanitha ManiVanitha Mani
Thank you shrisha.I read those articles but I am not sure how to modify my code and where to use transient keyword.I need help in modifying my code to fix this error.

Thanks.
Vanitha ManiVanitha Mani
Hi can anyone help me with this