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
vineetha pattuvineetha pattu 

soql to get all sobjects and its fields .

Hi,
Iam beginner in salesforce,can anyone help me with soql. I need to get all sobjects and its feilds and store them in picklist.

Thanks
vineetha
sandhya reddy 10sandhya reddy 10
Hi vineetha,

For this u have schema class u can use the methods available .

please refer below link for schema.

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_methods_system_schema.htm

Below is similar code for your reference
 
<apex:page controller="Task22customnew1Controller">
  <apex:form >
   <apex:PageBlock > 
   <apex:PageBlockSection >
    <apex:selectList label="select sObject" value="{!selectedobj}" size="1">
     <apex:selectOptions value="{!options}">   
     </apex:selectOptions>
     <apex:actionsupport event="onchange" action="{!getSelObjFields}"/> 
    </apex:selectList>
    </apex:PageBlockSection><apex:PageBlockSection >
   <apex:selectList label="Fields" size="1">
     <apex:selectOptions value="{!objfieldoptions}"> 
     </apex:selectoptions>
     </apex:selectList>
     </apex:PageBlockSection>
   </apex:PageBlock>
  </apex:form>
</apex:page>


controller
-------------

public with sharing class Task22customnew1Controller {
public Map<String,schema.SObjectType> allobj{get;set;}
Public Map<String,schema.SObjectField> selobjmap{get;set;}
public List<String> objnames{get;set;}
public List<string> fieldnames{get;set;}
Public List<selectoption> options{get;set;}
Public List<selectoption> objfieldoptions{get;set;}
Public String selectedobj{get;set;}
public Task22customnew1Controller()
{
  allobj=schema.getGlobalDescribe();
  objnames= new List<string>();
  options=new List<selectoption>();
  //selobjfields=new Map<String,schema.SObjectField>();
  objnames.addAll(allobj.keySet());
  objnames.sort();
  for(string s:objnames)
  {
   options.add(new selectoption(s,s));
  } 
  }
  public void getSelObjFields()
  {
     System.debug('obj' +allobj);
  // Schema.DescribeFieldResult dfr = Schema.SObjectType.Account.fields.Name;
    Schema.DescribeSObjectResult  dfr = allobj.get(selectedobj).getDescribe();
             selobjmap =dfr.fields.getMap();
             //System.debug('fields' +selobjfields);
             fieldnames= new List<string>();
             objfieldoptions=new List<selectoption>();
             fieldnames.addAll(selobjmap.keySet());
             fieldnames.sort();
             for(string s1:fieldnames)
             {
                objfieldoptions.add(new selectoption(s1,s1));
             }             
}
}
Please let us know if this helps you.

Thanks and Regards
sandhya
Amit Chaudhary 8Amit Chaudhary 8
Please check below post for same
Dynamic retrieval of object label & field label
1) http://amitsalesforce.blogspot.in/2015/11/apex-describe-dynamic-retrieval-of.html

Apex class
public with sharing class DescibeDemoController 
{
    public Map <String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
    public String selectedObject {get; set;}
    public List<FieldWrapper> listField{get;set;}

    public DescibeDemoController() 
    {
        listField = new List<FieldWrapper>();
    }

    // find all sObjects available in the organization
    public  List<SelectOption> getListObejectName() 
    {
        List<SelectOption> objNames = new List<SelectOption>();
        List<String> entities = new List<String>(schemaMap.keySet());
        entities.sort();
        for(String name : entities)
            objNames.add(new SelectOption(name,name));
        return objNames;
    }

    
    // Find the fields for the selected object
    public void showFields() 
    {
        listField.clear();
        Map <String, Schema.SObjectField> fieldMap = schemaMap.get(selectedObject).getDescribe().fields.getMap();
        for(Schema.SObjectField sfield : fieldMap.Values())
        {
            schema.describefieldresult dfield = sfield.getDescribe();
            FieldWrapper wObj = new FieldWrapper();
            wObj.fieldName = dfield.getLabel ();
            wObj.fieldAPIName = dfield.getname();
            listField.add(wObj);
        }
    }

    public class FieldWrapper
    {
        public String fieldName {get; set;}
        public String fieldAPIName {get; set;}
    }

}
Page
<apex:page controller="DescibeDemoController">
    <apex:form id="Describe">
        <apex:pageBlock id="block2" >
            <apex:pageblockbuttons location="top" >
                    <apex:commandButton value="Show Fields" action="{!showFields}" />
            </apex:pageblockbuttons>
            
            <apex:pageblocksection >
                <apex:pageBlockSectionItem >
                    <apex:outputLabel >Object Name</apex:outputLabel>
                    <apex:selectList value="{!selectedObject}" size="1">
                        <apex:selectOptions value="{!ListObejectName}"/>
                    </apex:selectList>
                </apex:pageBlockSectionItem>
            </apex:pageblocksection>
        </apex:pageBlock>
        
        <apex:pageBlock id="result" title="Field Detail for {!selectedObject}" rendered="{!if(listField.size > 0 ,true,false)}"   >
            <apex:pageBlockTable value="{!listField}" var="field" rendered="{!if(listField.size > 0 ,true,false)}"> 
                <apex:column value="{!field.fieldName }" headerValue="Name" />
                <apex:column value="{!field.fieldAPIName }"  headerValue="API Name"/>
            </apex:pageblockTable>
        </apex:pageblock>
    </apex:form>
</apex:page>
User-added image
Let us know if this will help you

Thanks
Amit Chaudhary