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
Akshay ReddyAkshay Reddy 

how to retrieve and display the list of objects as a dropdown list in visualforce and then use the selected value in my controller to return the field of that object.

Best Answer chosen by Akshay Reddy
shakti singh 23shakti singh 23
Hi Akshay Reddy,
Visualforce page:

<apex:page controller="ControllerGetAllObject" >
    <apex:form >
        <apex:actionFunction name="CallFieldMethod" action="{!fetchFields}" reRender="fields" />
        <apex:actionFunction name="CallField" action="{!selectedField}"  />
        <apex:pageMessages id="msg"></apex:pageMessages>
        <apex:outputPanel id="objectlist" >
            Select Object: 
            <apex:selectList value="{!selectedObject}" size="1"  onchange="CallFieldMethod()" >
            <apex:selectOptions value="{!listOfObjects}"></apex:selectOptions>
            </apex:selectList>
            </apex:outputPanel><br/>
           <apex:outputPanel id="fields" >
               Select Field : 
            <apex:selectList value="{!selectedField}" size="1" id="FieldList" rendered="{!selectedObject != null}" onchange="CallField()" >
            <apex:selectOptions value="{!listOfFields}"></apex:selectOptions>
            </apex:selectList>
        </apex:outputPanel>
        
    </apex:form>
</apex:page>

Controller:

public class ControllerGetAllObject {
    public List<SelectOption> listOfObjects{get;set;}
    public List<SelectOption> listOfFields{get;set;}
    public String selectedObject{get;set;}
    public String selectedField{get;set;}
    public Map<String, Schema.SobjectType> gd = schema.getGlobalDescribe();
    public Map<String, schema.SObjectField> MapOfFields;
    public ControllerGetAllObject(){
        listOfObjects = new List<SelectOption>();
        
        for(Schema.SObjectType obj : gd.values()){
            Schema.DescribeSObjectResult dr = obj.getDescribe();
            listOfObjects.add(new SelectOption(String.valueOf(dr.getName()), String.valueOf(dr.getLabel())));
        } 
        listOfObjects.sort();
    }
    
    public void fetchFields(){
        listOfFields = new List<SelectOption>();
        MapOfFields = gd.get(selectedObject).getDescribe().fields.getMap();
        for(Schema.SObjectField field : MapOfFields.values()){
            Schema.DescribeFieldResult fr = field.getDescribe();
            listOfFields.add( new SelectOption(String.valueof(fr.getName()), String.valueof(fr.getLabel())));
        } 
    }
    
    public void selectedField(){
        system.debug(selectedField);
    }
}

I hope this will help you.
Please mark as best answer if this solves your problem.

Thank you!
 

All Answers

Dev_AryaDev_Arya
2 things you could so.
1. get the sObject info via Apex: 
Map<String, Schema.SObjectType> gd = Schema.getGlobalDescribe();
and then further in the apex using the selected value as a paramter, u can retrive the list of the respective sObject fields.

2. Custom metadata type is another solution where you can get the schema info. 

I cannot explain in detail at the moment, but if you have further questions, feel free to ask. I will try to reply tomorrow. :-)

Cheers,
Dev
Shubham saini 14Shubham saini 14

Hello,


/** add this in vf page **/
 

<apex:selectList value="{!selectedDepart}" size="1" multiselect="false" styleClass="slds-select ">
    <apex:selectOptions value="{!Department}" />
</apex:selectList>


/** add this in controller **/

 

public String selectedDepart{get;set;}
public List<SelectOption> DepartList;

public List<SelectOption> getDepartment(){
        DepartList = new List<SelectOption>();
        DepartList.add(new SelectOption('','--None--'));
        DepartList.add(new SelectOption(test1,test1));
        DepartList.add(new SelectOption(test2,test2));
        DepartList.add(new SelectOption(test3,test3));   
        return DepartList;
    }
 

I hope, this will help you,

Thank you

shakti singh 23shakti singh 23
Hi Akshay Reddy,
Visualforce page:

<apex:page controller="ControllerGetAllObject" >
    <apex:form >
        <apex:actionFunction name="CallFieldMethod" action="{!fetchFields}" reRender="fields" />
        <apex:actionFunction name="CallField" action="{!selectedField}"  />
        <apex:pageMessages id="msg"></apex:pageMessages>
        <apex:outputPanel id="objectlist" >
            Select Object: 
            <apex:selectList value="{!selectedObject}" size="1"  onchange="CallFieldMethod()" >
            <apex:selectOptions value="{!listOfObjects}"></apex:selectOptions>
            </apex:selectList>
            </apex:outputPanel><br/>
           <apex:outputPanel id="fields" >
               Select Field : 
            <apex:selectList value="{!selectedField}" size="1" id="FieldList" rendered="{!selectedObject != null}" onchange="CallField()" >
            <apex:selectOptions value="{!listOfFields}"></apex:selectOptions>
            </apex:selectList>
        </apex:outputPanel>
        
    </apex:form>
</apex:page>

Controller:

public class ControllerGetAllObject {
    public List<SelectOption> listOfObjects{get;set;}
    public List<SelectOption> listOfFields{get;set;}
    public String selectedObject{get;set;}
    public String selectedField{get;set;}
    public Map<String, Schema.SobjectType> gd = schema.getGlobalDescribe();
    public Map<String, schema.SObjectField> MapOfFields;
    public ControllerGetAllObject(){
        listOfObjects = new List<SelectOption>();
        
        for(Schema.SObjectType obj : gd.values()){
            Schema.DescribeSObjectResult dr = obj.getDescribe();
            listOfObjects.add(new SelectOption(String.valueOf(dr.getName()), String.valueOf(dr.getLabel())));
        } 
        listOfObjects.sort();
    }
    
    public void fetchFields(){
        listOfFields = new List<SelectOption>();
        MapOfFields = gd.get(selectedObject).getDescribe().fields.getMap();
        for(Schema.SObjectField field : MapOfFields.values()){
            Schema.DescribeFieldResult fr = field.getDescribe();
            listOfFields.add( new SelectOption(String.valueof(fr.getName()), String.valueof(fr.getLabel())));
        } 
    }
    
    public void selectedField(){
        system.debug(selectedField);
    }
}

I hope this will help you.
Please mark as best answer if this solves your problem.

Thank you!
 
This was selected as the best answer
YashhYashh
LWC :how can i display the list of Objects in a drop down list and when we select an objects it should display it fields. i want in lwc could you please help me