I am trying to get a VisualForce page to display a SelectList of every object type in a Salesforce instance. Account, Contact, etc. I am using Schema.getGlobalDescribe()
but am running into an issue where I am getting the error "System.SerializationException: Not Serializable: Schema.DescribeSObjectResult."
Here is my code. I am particularly puzzled because, without the commented out line, I am not actually using the Schema.DescribeSObjectResult object, only the SObjectType.
Controller:
public with sharing class searchController {
//Properties
public SelectOption[] objectSelect{
get; set;
}
public String objName{get; set;}
//Constructor
public searchController()
{
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
objectSelect = new SelectOption[]{};
for(String name : schemaMap.keySet())
{
//objectSelect.add(new SelectOption(name, schemaMap.get(name).getDescribe().getLabel()));
objectSelect.add(new SelectOption(name, name));
}
objName = objectSelect[0].getValue();
filter = new FilterRule(objName);
}
}
And my VisualForce page:
<apex:page controller="searchController">
<apex:form id="searchForm">
<apex:pageBlock >
<apex:pageBlockSection id="objSelectBlock" title="What are you Searching For?">
<apex:selectList value="{!objName}">
<apex:selectOptions value="{!objectSelect}"/>
</apex:selectList>
</apex:pageBlockSection>
</apex:pageBlock>
</apex:form>
Best Answer
You can't serialize describes. You will have to call describeGlobal at least once per transaction every time you need to use it.