[SalesForce] How to display a list of all object types in Salesforce instance

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.

Related Topic