One of our VF page is based on a REST web-service which retrieves Service requests from Siebel in real-time. When number of records exceeds 1000, we were receiving below error because of which i added 'readonly' attribute in VF page component. 'Content cannot be displayed: Collection size 1,582 exceeds maximum size of 1,000'
Now we are getting view state error. And 'Internal' is occupying 210kb so not sure which ones I can make Transient.
I went through a post about this but didn't quite understand that. Below code is from Controller class, please help.
public class AccountServiceControllerExtension2 {
public final Account acct{get; Set;}
public String siebelId{get; set;}
public String requestBody{get; set;}
public String requestResult{get; set;}
public list<list<String>> mainList{get; set;}
public String pageUrl{get;set;}
public Transient list<list<list<String>>> allList{get;set;}
public list<list<String>> temp;
public list<String> dataList1;
public list<String> dataList2;
public list<String> dataList3;
public list<String> dataList4;
public list<String> dataList5;
public AccountServiceControllerExtension2(ApexPages.StandardController stdController) {
this.acct = (Account)stdController.getRecord();
pageUrl = URL.getSalesforceBaseUrl().toExternalForm()+'/apex/ServiceRequest2?id='+acct.id;
List<Account> siebelIdLs=[select Siebel_Row_ID__c from Account where Id=:acct.id limit 1];
siebelId='';
if(siebelIdLs.size()==1)
{
if(siebelIdls.get(0).Siebel_Row_ID__c!=''&&siebelIdls.get(0).Siebel_Row_ID__c!=null){
siebelId=siebelIdls.get(0).Siebel_Row_ID__c;
}
}
String requestUrl='https://esbintg-m1.nit.oclc.org/services/getServiceRequest';
String result='';
Transient List<String> mresult = new List<String>();
if(siebelId!='')
{
AccountHttpRequest ahr=new AccountHttpRequest();
mresult=ahr.postCall(requestUrl,siebelId);
if(mresult[0] == 'Success')
{
result = mresult[1];
Transient List<map<String,String>> mapList=parseJason(result); //get list data from json response
if(mapList.size()>0)
{
list<WebRequestMapListWrapper> wrapperList=new list<WebRequestMapListWrapper>();
for(Integer i=0;i<mapList.size();i++){
WebRequestMapListWrapper wrapper1=new WebRequestMapListWrapper(mapList.get(i));
wrapperList.add(wrapper1);
}
wrapperList.sort();
mapList=new List<map<String,String>>();
//reverse order
for(Integer i = wrapperList.size()-1; i>=0;i--){
mapList.add(wrapperList.get(i).dataMap);
}
}
else
{
requestResult='No data for this account.';
}
allList=new List<list<list<String>>>(); //Top level list for all rows
list<String> dataList1=new List<String>();
for(Integer i=0;i<mapList.size();i++)
{
temp=new List<list<String>>();
dataList1=new List<String>(); //Bottom level list for real data
temp.add(dataList1);
allList.add(temp);
if(mapList.get(i).get('abstract')==null) mapList.get(i).put('abstract','');
.
.
<code which Gets and Adds to the List>
.
.
dataList1.add('pageBlockTable'+String.valueOf(i)); //No.14
}
}
else
{
requestResult = mresult[1];
}
}
else
{ requestResult='No Siebel Row ID.';
}
}
public list<map<String,String>> parseJason(String result)
{
Map<String, String> amap=new Map<string, String>();
List<map<String,String>> mapList=new List<map<String,String>>();
if(result==''||result==null){
return mapList;
}
Map<String, String> tempMap;
JSONParser parser = JSON.createParser(result);
boolean flag=false;
while (parser.nextToken() != null) {
if ((parser.getCurrentToken() == JSONToken.FIELD_NAME)){
String fieldName = parser.getText();
if(flag){
if(fieldName=='abstract'){
tempMap = new Map<String, String>();
mapList.add(tempMap);
parser.nextToken();
tempMap.put('abstract',parser.getText());
}
.
.
<Statements which parses each token>
.
.
}
if(fieldName=='serviceRequest'){
flag=true;
//System.debug('----------');
}
}
}
return mapList;
}
}
And my VF Page
<apex:page standardController="Account" extensions="AccountServiceControllerExtension2" readOnly="true" id="page">
<style type="text/css">
.vfTableMainInfo {
table-layout:fixed;
word-wrap:break-word;
overflow:hidden;
width: 50px;
}
.vfTable {
table-layout:fixed;
word-wrap:break-word;
overflow:hidden;
width: 50px;
}
.expandFoldText{
color: rgb(1,91,167);
}
.expandFoldText1{
color: rgb(1,91,167);
}
.expandFoldText2{
color: rgb(1,91,167);
display: none;
}
</style>
<apex:form id="form">
<apex:pageBlock id="main1" title="Service Data">
<apex:repeat id="repeat" value="{!allList}" var="innerList">
<apex:pageBlockTable id="subTable1" value="{!innerList}" var="item" styleClass="vfTable">
<apex:column >
<label id="plus{!innerList[0][14]}" class="expandFoldText1" onmouseover="componentColorMouseOver(this);" onmouseout="componentColorMouseOut(this);" onclick="expandProudct1(this,{!innerList[0][14]});" >(+)</label>
<label id="minus{!innerList[0][14]}" class="expandFoldText2" onmouseover="componentColorMouseOver(this);" onmouseout="componentColorMouseOut(this);" onclick="expandProudct2(this,{!innerList[0][14]});">(-) </label>
{!item[0]}
<apex:facet name="header">
<label>Product</label>
</apex:facet>
</apex:column>
<apex:column value="{!item[1]}">
<apex:facet name="header">Status</apex:facet>
</apex:column>
<apex:column value="{!item[2]}">
<apex:facet name="header">Abstract</apex:facet>
</apex:column>
<apex:column value="{!item[3]}">
<apex:facet name="header">Date Open</apex:facet>
</apex:column>
</apex:pageBlockTable>
<div id="{!innerList[0][14]}" style="display:none">
<apex:pageBlockTable id="subTable2" value="{!innerList}" var="item" styleClass="vfTable">
<apex:column >
<apex:facet name="header"></apex:facet>
</apex:column>
<apex:column value="{!item[4]}">
<apex:facet name="header">Name</apex:facet>
</apex:column>
<apex:column value="{!item[5]}">
<apex:facet name="header">SR Number</apex:facet>
</apex:column>
<apex:column value="{!item[6]}">
<apex:facet name="header">Date Closed</apex:facet>
</apex:column>
</apex:pageBlockTable>
<apex:pageBlockTable id="subTable3" value="{!innerList}" var="item" styleClass="vfTable">
<apex:column >
<apex:facet name="header"></apex:facet>
</apex:column>
<apex:column value="{!item[7]}">
<apex:facet name="header">Resolution</apex:facet>
</apex:column>
<apex:column value="{!item[8]}">
<apex:facet name="header">Owner</apex:facet>
</apex:column>
<apex:column value="{!item[9]}">
<apex:facet name="header"></apex:facet>
</apex:column>
</apex:pageBlockTable>
</div>
</apex:repeat>
</apex:pageBlock>
</apex:form>
<script>
function hideAllHeader(){
var headerList=document.getElementsByClassName("headerRow");
tableList=document.getElementsByTagName("table");
var aTable;
var headers;
var test=tableList[3];
for (var i = 0; i < tableList.length; i++) {
if((tableList[i].id!=="page:form:main1:repeat:0:subTable1")&&(tableList[i].id.indexOf("page:form:main1:repeat:")===0)){
headers=tableList[i].getElementsByTagName("thead");
for(var j =0; j<headers.length; j++){
headers[j].style.display="none";
}
}
}
}
hideAllHeader();
</script>
<script>
window.onload = function(){
hideAllHeader();
};
function componentColorMouseOver(component){
//component.style.color="rgb(1,91,167)";
component.style.color="red";
}
function componentColorMouseOut(component){
//component.style.color="black";
component.style.color="rgb(1,91,167)";
}
function expandProudct1(t, div){
var headerId=div.id.replace("pageBlockTable","page:form:main1:repeat:"); //page:form:main1:repeat:0:subTable1
var headerId1=headerId+":subTable1";
var headerId2=headerId+":subTable2";
var headerId3=headerId+":subTable3";
var tableElem1=document.getElementById(headerId1);
var headersElem1=tableElem1.getElementsByTagName("thead");
var tableElem2=document.getElementById(headerId2);
var headersElem2=tableElem2.getElementsByTagName("thead");
var tableElem3=document.getElementById(headerId3);
var headersElem3=tableElem3.getElementsByTagName("thead");
var curDisplay=String(div.style.display);
if(curDisplay==='none'){
//expand/fold table
div.style.display="inline";
t.style.display="none"; //hide/display plus and minus sine
document.getElementById(t.id.replace("plus","minus")).style.display="inline"; //hide/display plus and minus sine
//expand/fold table header
if(headerId1.indexOf("page:form:main1:repeat:0:subTable1")===-1){
for(var x1 =0; x1<headersElem1.length; x1++){
headersElem1[x1].style.display="table-row-group";
}
}
for(var x2 =0; x2<headersElem1.length; x2++){
headersElem2[x2].style.display="table-row-group";
}
for(var x3 =0; x3<headersElem1.length; x3++){
headersElem3[x3].style.display="table-row-group";
}
}
}
function expandProudct2(t, div){
var headerId=div.id.replace("pageBlockTable","page:form:main1:repeat:"); //page:form:main1:repeat:0:subTable1
var headerId1=headerId+":subTable1";
var headerId2=headerId+":subTable2";
var headerId3=headerId+":subTable3";
var tableElem1=document.getElementById(headerId1);
var headersElem1=tableElem1.getElementsByTagName("thead");
var tableElem2=document.getElementById(headerId2);
var headersElem2=tableElem2.getElementsByTagName("thead");
var tableElem3=document.getElementById(headerId3);
var headersElem3=tableElem3.getElementsByTagName("thead");
var curDisplay=String(div.style.display);
if(curDisplay=='inline'){
div.style.display="none";
t.style.display="none";
document.getElementById(t.id.replace("minus","plus")).style.display="inline";
//expand/fold table header
if(headerId1.indexOf("page:form:main1:repeat:0:subTable1")===-1){
for(var x1 =0; x1<headersElem1.length; x1++){
headersElem1[x1].style.display="none";
}
}
for(var x2 =0; x2<headersElem1.length; x2++){
headersElem2[x2].style.display="none";
}
for(var x3 =0; x3<headersElem1.length; x3++){
headersElem3[x3].style.display="none";
}
}
}
function displayAllColumns(){
document.getElementById("pageBlock1").style.display="none";
document.getElementById("pageBlock2").style.display="inline";
}
function displayMainColumns(){
document.getElementById("pageBlock2").style.display="none";
document.getElementById("pageBlock1").style.display="inline";
}
</script>
</apex:page>