I am creating a VF page which contains a Picklist of all objects in my Salesforce org including Custom Objects. I am getting an error 'unexpected token: 'null' when I select custom object.
VF Page
apex:page sidebar="false" controller="AllObjectCtrl"
apex:form
apex:pageBlock title="All Objects in Org"
apex:pageBlockSection
apex:selectList value="{!objectName}" size="1"
apex:selectOptions value="{!Name}"
/apex:selectOptions
/apex:selectList
apex:commandButton value="Show table" action="{!getrecords}" reRender="tableShow"/
apex:pageBlockTable value="{!selectedObj}" var="a" id="tableShow"
apex:column value="{!a}"/
/apex:pageBlockTable
/apex:pageBlockSection
/apex:pageBlock
/apex:form
/apex:page
Controller
public with sharing class AllObjectCtrl {
public String val{get;set;}
public String objectName{get;set;}
Schema.DescribeSObjectResult objDescribe;
public List<Sobject> selectedObj{get;set;}
Map <String,Schema.SobjectType> schemaMap=Schema.getGlobalDescribe();
public List<SelectOption> getName()
{
List<Schema.SobjectType> gd=schemaMap.values();
List<SelectOption> options=new List<SelectOption>();
for(Schema.SobjectType s:gd)
{
options.add(new SelectOption(s.getDescribe().getLabel(),s.getDescribe().getLabel()));
}
return options;
}
public PageReference getrecords()
{
//objectName=objDescribe.getLocalName();
system.debug('----Descirber Name----'+objectName);
if(objectName!=null||objectName!='')
{
selectedObj=new List<Sobject>();
Schema.sobjectType sobj=schemaMap.get(objectName);
System.debug('----Object Name----'+objectName);
System.debug('----Sobj----'+sobj);
selectedObj=Database.query('Select id from '+sobj);
System.debug('-----Selected Object Size-----'+selectedObj.size());
}
return null;
}
}
Best Answer
The problem here is that objectName has the 'value' rather than a 'key'. So in the line below, you are trying to get from a map using the value instead of the key.
I've changed the method getName() below to fix this.