We can use Schema.getGlobalDescribe()
to get all properties of sObject
and its fields.
Apex Class:
public class SampleController { Public string selectedObj {get;set;} public String selectedField {get; set;} Public List<Selectoption> getObjList(){ List<Schema.SObjectType> objList = Schema.getGlobalDescribe().Values(); List<SelectOption> objNames = new List<SelectOption>(); objNames.add(new SelectOption('','-- Select --')); for(Schema.SObjectType obj : objList) { objNames.add(new SelectOption(obj.getDescribe().getName(),obj.getDescribe().getLabel())); } objNames.sort(); return objNames; } public List<SelectOption> getObjectFields() { List<SelectOption> fieldNames = new List<SelectOption>(); fieldNames.add(new SelectOption('','-- Select --')); if(!String.isBlank(selectedObj)){ Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe(); Schema.SObjectType ObjSchema = schemaMap.get(selectedObj); Map<String, Schema.SObjectField> fieldMap = ObjSchema.getDescribe().fields.getMap(); for (String fieldName: fieldMap.keySet()) { fieldNames.add(new SelectOption(fieldName, fieldMap.get(fieldName).getDescribe().getLabel())); } } return fieldNames; } }
Visualforce Page:
<apex:page controller="SampleController"> <apex:form> <apex:pageBlock> <apex:pageBlockSection columns="2"> <apex:pageBlockSectionItem > <apex:outputlabel value="Object Names :"/> <apex:actionRegion > <apex:selectList value="{!selectedObj}" size="1"> <apex:selectOptions value="{!ObjList}"/> <apex:actionSupport event="onchange" rerender="objFields"/> </apex:selectList> </apex:actionRegion> </apex:pageBlockSectionItem> <apex:pageBlockSectionItem > <apex:outputlabel value="Field Names :"/> <apex:outputPanel id="objFields"> <apex:actionRegion > <apex:selectList value="{!selectedField}" size="1"> <apex:selectOptions value="{!ObjectFields}"/> </apex:selectList> </apex:actionRegion> </apex:outputPanel> </apex:pageBlockSectionItem> </apex:pageBlockSection> </apex:pageBlock> </apex:form> </apex:page>