You need to sign in to do that
Don't have an account?
Dynamic Apex for getting the fields of an selected sobject
Hi
i try to retrieve all sobjects in a picklist based on that picklist,we are getting all fields in another picklist.for this i wrote a logic. Actually am getting an error,can you please check it out:
System.NullPointerException: Attempt to de-reference a null object
Class.dynamicApex5.getselectfields: line 34, column 1
Here is my code:
Apex class:
public class dynamicApex5 {
public list<SelectOption> selectedobject { get; set; }
public String objectName { get; set; }
Map<string,schema.SobjectType> gd=schema.getGlobalDescribe();
public dynamicApex5(){
selectedobject = new list<SelectOption>();
selectedobject.add(new selectoption('','-None-'));
list<schema.SobjectType> lst=gd.values();
for(schema.SobjectType ss:lst){
selectedobject.add(new selectoption(ss.getDescribe().getLocalName(),ss.getDescribe().getLabel()));
selectedobject.sort();
stringfieldName=new List<String>();
offset=0;
pageNumber=0;
totalPage =0;
}
}
Map<String,Schema.SobjectField> fieldsMap;
Schema.SobjectType sobj;
public String fields { get; set; }
public list<Selectoption> getselectfields() {
list<selectoption> lsps=new list<selectoption>();
if(objectName!=''){
sobj=gd.get(objectName);
system.debug('Object Names is '+sobj);
schema.DescribeSobjectResult all=sobj.getDescribe();
system.debug('Error is'+all);
fieldsMap=new Map<String,Schema.SobjectField>();
fieldsMap=all.fields.getMap();
for(Schema.SobjectField flds:fieldsMap.Values()){
lsps.add(new selectoption(flds.getDescribe().getName(),flds.getDescribe().getLabel()));
lsps.sort();
}
}
return lsps;
}
V.F:
---
<apex:page controller="dynamicApex5">
<apex:form id="theForm">
<apex:pageBlock title="Select Object and Fields">
<apex:pageBlockSection title="Select an Object" collapsible="false" columns="2">
<apex:pageBlockSectionItem >
<apex:outputLabel value="Select an object::"></apex:outputLabel>
<apex:selectList value="{!objectName}" size="1" multiselect="false">
<apex:selectOptions value="{!selectedobject}">
<apex:actionSupport action="{!function}" event="onchange" reRender="theForm"/>
</apex:selectOptions>
</apex:selectList>
</apex:pageBlockSectionItem>
<apex:pageBlockSectionItem >
<apex:outputLabel value="Select Fields:"> </apex:outputLabel>
<apex:selectList value="{!fields}" multiselect="true" size="3" disabled="{!if(selectfields.size==1,true,false)}">
<apex:selectOptions value="{!selectfields}">
</apex:selectOptions>
</apex:selectList>
</apex:pageBlockSectionItem>
</apex:pageBlockSection>
</apex:pageBlock>
</apex:form>
</apex:page>
a common cause of this error is that your code is trying to call a method on a null object.
For example:
Date now;
now.day();
This can also happen for fields in objects that do not have data:
Lead l = new Lead();
String s = l.ResponseDate__c.day(); // since ResponseDate__c was never set, it is null
To be safe in your code, you can check for != null before calling any method on an object or field.
Try adding a rendered option to your Visualforce page tag
<apex:pageBlockSectionItem rendered="{!selectedobject != null}">
<apex:outputLabel value="Select Fields:"> </apex:outputLabel>
<apex:selectList value="{!fields}" multiselect="true" size="3" disabled="{!if(selectfields.size==1,true,false)}">