Skip to main content

Avoid Internal view state in Visualforce page

Have you ever overcome this issue of hitting internal view state limit on export to excel from Visualforce page? Well I had, so here is my blog post on how I resolved this. Hope it will help others.

I want bulk of records to be exported to excel using a visualforce page. Implementing export to excel functionality is very simple using visualforce. apex:pageblocktable is used to display all records in tabular format and contentType as excel sheet is included to convert the visualforce page to excel. To overcome collection size limit I set readonly attribute as true for the page, since we are not going to perform any DML operations and used nested collection to handle more than 10K records.

Since I had very few records in my organization I dint find any issue in exporting records from my visualforce. Later I tried to export for more than 10K records. Then I landed up in an exception saying View state limit error message. When I checked the view state of the particular page, I found its internal view state occupied 99% of the total view state.

We are talking something called internal view state. Let’s check what it is, "This represents the internal Salesforce data used by your Visualforce page. This can't be controlled by developers. You can see how much of your view state size is made up from internal elements by clicking the State folder". Internal view state will increase when we pass large set of records using visualforce tags like pageblock table, data table or output text. Since I have used pageblock table in the 'exportToExcel' visualforce page, when passing more than 10K records internal view state of my page got increased. How can we reduce internal view state? To reduce this internal view state I replaced the visualforce pageblock table into HTML table tag, since we are going to export to excel and internal view state is only for the visualforce tags.

After the changes done, I clicked the 'Export to Excel' button and it successfully exported more than 15K records. I even tested with 40K records, its working fine without any issue.

Key Points:
1. If you like to reduce internal view state, use HTML tags instead of visualforce page design tags
2. To overcome the 1000 collection limit, use nested list

Meet you all with the next post soon till then happy coding.


Popular posts from this blog

Avoid Duplicate Records Using Flow

In this blog post lets see how to avoid duplicate records in Salesforce using the powerful feature – Flow , As the word says, flow easily flows to fulfill the requirements with ease. ☺  Many think of appexchange solutions and source code to avoid the duplicate record in salesforce, But the method I'm going to explain here is completely different and very simple. It helps you to reduce your code and can easily rebuild for other objects with different field logic with simple clicks. Lets jump into the solution, we will use flow to check duplicate record logic and use apex trigger to initiate the Flow whenever a record is created or updated. Visual Work Flow : [Click] First we will create the Flow to check the duplicate records based on the name and store the result in the variable. In this example, we will use the Account object for the dupe check. Step 1  : Create a new visual flow with the Name ‘ DuplicateAccountCheck ' Step 2  : Click and drag the RecordLookup into t

Plan your Dreamforce with “Dreamforce Trail”

Salesforce has many good resources for anybody looking to begin Salesforce as beginner, Intermediate or Advanced. Trailhead is also one among the good resource to learn salesforce and my favorite too. I have also written blog post about Trailhead & my favorite module   This  blog post covers an interesting and helpful Trailhead module. Yes Its all about ' Dreamforce Trail ', if you are a Dreamforce Attendee, then I strongly recommend you to take a look into this Trailhead module. No Admin skill or No Developer skill is required for this module.Start winning Badges and is gamified so it motivates you to reach more badges and finally you end up gaining knowledge on Salesforce. Why do we have Dreamforce Trail module in Trailhead?  To help people who is coming to dreamforce for the first time and to plan well for the events. Dreamforce is a tech feast for anybody. Dreamforce is salesforce festival. If you don’t plan well, you will miss something highly helpful . This Dre

Export records from List view – ListView API

As part of the Winter’15 release salesforce introduced the List View API features which helps us to get details and records of list views for an object. I was started exploring more about the List view API and trying to build an use case using that. So I searched about List View in the IdeaExchange site then found that many users are looking for a solution to export records to excel directly from the list view. I built a solution for that Idea, which helps user to download all the records directly from the List view for both standard and custom object. You don’t have to make any change in the code to use this functionality for different objects. All you need is to create a custom button for that object as mentioned below. Lets take an example for Account object 1. Go to Setup –> Accounts –> Buttons, Links and Actions 2. Click ‘New Button or Link' 3. Enter  Label, Name and select display type as ‘List Button’ 4. Content source as “Onclick Javascript” and paste the