function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
ExleazExleaz 

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>

Jeff MayJeff May

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&colon;

 

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.

 

 

logontokartiklogontokartik

 

 

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)}">