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
PRIYAN NEERUDUPRIYAN NEERUDU 

i want fetch one record from object basd on input label.....but using this code i'm fecthnig all d records of that parcticular object ...how can i improve search functionality to fetch record from singal object based on input string given at label field

public class objectController1
{

public  string searchTxt {get; set;}

 String queryString;
 
    public void searchrecords() {
      
    
    
   
      
        system.debug('selectedObject ---selectedField--------'+selectedObject+'---'+selectedField ); 
        
        
        queryString = 'SELECT Id, name';
        
        
        if (selectedObject!= null && selectedObject!= '')
         {
            queryString += ' from  '+ selectedObject+'';
        }
        
        
        if ( searchTxt != null && searchTxt!= '')
        
         {
            if (selectedField != null && selectedField != '') {
            
            queryString += ' where ' + selectedField +' = '+searchTxt;
            
            system.debug('queryString -----'+queryString );
            
            }
            
        }
        

       
        system.debug('queryString -----------'+queryString );    
            
        lstQuery= database.query(queryString);
       
        
    }

    public Map <String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
    

    public String selectedObject {get; set;}
    
    
      public list<sobject >lstQuery{get; set;}
      

    public String selectedField {get; set;}

    Public objectController1()
    {   
        selectedObject = 'account';
    }
    
    

    public List<SelectOption> getObjectNames()
        
    {
        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;
     }
     
     

     public List<SelectOption> getObjectFields() 
     {
            Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
            
            Schema.SObjectType ObjectSchema = schemaMap.get(selectedObject);
            
            Map<String, Schema.SObjectField> fieldMap = ObjectSchema.getDescribe().fields.getMap();
            
            List<SelectOption> fieldNames = new List<SelectOption>();
            
            for (String fieldName: fieldMap.keySet()) 
            {  
                fieldNames.add(new SelectOption(fieldName,fieldName));
                
            
            }
            return fieldNames;
      }       
}
-------------------------------------------------------------------------------------------------------------------------------------------


<apex:page controller="objectController1" setup="false" showHeader="false" sidebar="false">

 <apex:form >
  <apex:pageBlock > 

<apex:pageBlockSection columns="4"> 
 <apex:pageBlockSectionItem >
 <apex:outputlabel value="Object Names :"/> 
 <apex:actionRegion >
  <apex:selectList value="{!selectedObject}" size="1">
  <apex:selectOptions value="{!ObjectNames}"/> 
  <apex:actionSupport event="onchange" rerender="myFields"/>
   </apex:selectList>
    </apex:actionRegion> 
    </apex:pageBlockSectionItem>
  
   
    <apex:pageBlockSectionItem >
     <apex:outputlabel value="Field Names :"/>
     <apex:outputPanel id="myFields">
     <apex:actionRegion > 
     <apex:selectList value="{!selectedField}" size="1">
      <apex:selectOptions value="{!ObjectFields}"/> 
      </apex:selectList> 
      </apex:actionRegion> 
      </apex:outputPanel>
       </apex:pageBlockSectionItem> 
       
       <apex:pageBlockSectionItem >
          <input id="a" placeholder="label" style="margin-left:10px;" />
      </apex:pageBlockSectionItem>
      
      <apex:pageBlockSectionItem >
        <apex:commandButton onclick="callSearch();" value="Search" reRender="x" style="margin-left:10px;" />
      </apex:pageBlockSectionItem> 
     
</apex:pageBlockSection> 

 <apex:pageblockTable value="{!lstQuery}" var="eachRecord" id="list">
            <apex:column value="{!eachRecord.id}"/>
            <apex:column value="{!eachRecord['Name']}"/>
            
        
 </apex:pageblockTable>

</apex:pageBlock>

 <apex:actionFunction name="callSearch" action="{!searchRecords}" reRender="list">
        <apex:param name="a" value="" assignTo="{!searchTxt}"/>
       
    </apex:actionFunction>
 </apex:form>
  </apex:page>
Best Answer chosen by PRIYAN NEERUDU
Sudhir ChowdarySudhir Chowdary
Hi,

Try Following Code:

Class:
public class objectController1
{

public  string searchTxt {get; set;}

 String queryString;
 
    public void searchrecords() {
        system.debug('selectedObject ---selectedField--------'+selectedObject+'---'+selectedField );
        queryString = 'SELECT Id, name';
        if (selectedObject!= null && selectedObject!= '')
         {
            queryString += ' from  '+ selectedObject+'';
        }
        
        if ( searchTxt != null && searchTxt!= '')
        
         {
            if (selectedField != null && selectedField != '') {
            
            queryString += ' where ' + selectedField +' = \''+searchTxt+'\'';
            
            system.debug('queryString -----'+queryString );
            
            }
            
        }
        system.debug('queryString -----------'+queryString );    
            
        lstQuery= database.query(queryString);
    }

    public Map <String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();    

    public String selectedObject {get; set;}    
    
    public list<sobject >lstQuery{get; set;}      

    public String selectedField {get; set;}

    Public objectController1()
    {   
        selectedObject = 'account';
    }  
    
    public List<SelectOption> getObjectNames()
        
    {
        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;
     }         

     public List<SelectOption> getObjectFields() 
     {
            Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
            
            Schema.SObjectType ObjectSchema = schemaMap.get(selectedObject);
            
            Map<String, Schema.SObjectField> fieldMap = ObjectSchema.getDescribe().fields.getMap();
            
            List<SelectOption> fieldNames = new List<SelectOption>();
            
            for (String fieldName: fieldMap.keySet()) 
            {  
                fieldNames.add(new SelectOption(fieldName,fieldName));
                
            
            }
            return fieldNames;
      }       
}

Page:
<apex:page controller="objectController1" setup="false"
    showHeader="false" sidebar="false">
    <apex:form id="frm">
        <apex:pageBlock >
            <apex:pageBlockSection columns="4">
                <apex:pageBlockSectionItem >
                    <apex:outputlabel value="Object Names :" />
                    <apex:actionRegion >
                        <apex:selectList value="{!selectedObject}" size="1">
                            <apex:selectOptions value="{!ObjectNames}" />
                            <apex:actionSupport event="onchange" rerender="myFields" />
                        </apex:selectList>
                    </apex:actionRegion>
                </apex:pageBlockSectionItem>


                <apex:pageBlockSectionItem >
                    <apex:outputlabel value="Field Names :" />
                    <apex:outputPanel id="myFields">
                        <apex:actionRegion >
                            <apex:selectList value="{!selectedField}" size="1">
                                <apex:selectOptions value="{!ObjectFields}" />
                            </apex:selectList>
                        </apex:actionRegion>
                    </apex:outputPanel>
                </apex:pageBlockSectionItem>

                <apex:pageBlockSectionItem >
                    <apex:inputText value="{!searchTxt}" />
                </apex:pageBlockSectionItem>

                <apex:pageBlockSectionItem >
                    <apex:commandButton value="Search" action="{!searchRecords}"
                        reRender="x,list,frm" style="margin-left:10px;" />
                </apex:pageBlockSectionItem>
            </apex:pageBlockSection>

            <apex:pageblockTable value="{!lstQuery}" var="eachRecord" id="list">
                <apex:column value="{!eachRecord.id}" />
                <apex:column value="{!eachRecord['Name']}" />
            </apex:pageblockTable>
        </apex:pageBlock>
    </apex:form>
</apex:page>

Hope this helps you. Mark as best answer if it helps.

All Answers

Sudhir ChowdarySudhir Chowdary
Hi,

In your code try replacing with following:
<apex:page controller="objectController1" setup="false"
	showHeader="false" sidebar="false">
	<apex:form>
		<apex:pageBlock>
			<apex:pageBlockSection columns="4">
				<apex:pageBlockSectionItem>
					<apex:outputlabel value="Object Names :" />
					<apex:actionRegion>
						<apex:selectList value="{!selectedObject}" size="1">
							<apex:selectOptions value="{!ObjectNames}" />
							<apex:actionSupport event="onchange" rerender="myFields" />
						</apex:selectList>
					</apex:actionRegion>
				</apex:pageBlockSectionItem>


				<apex:pageBlockSectionItem>
					<apex:outputlabel value="Field Names :" />
					<apex:outputPanel id="myFields">
						<apex:actionRegion>
							<apex:selectList value="{!selectedField}" size="1">
								<apex:selectOptions value="{!ObjectFields}" />
							</apex:selectList>
						</apex:actionRegion>
					</apex:outputPanel>
				</apex:pageBlockSectionItem>

				<apex:pageBlockSectionItem>
					<apex:inputField value="{!searchTxt}" />
				</apex:pageBlockSectionItem>

				<apex:pageBlockSectionItem>
					<apex:commandButton value="Search" action="{!searchRecords}"
						reRender="x,list" style="margin-left:10px;" />
				</apex:pageBlockSectionItem>
			</apex:pageBlockSection>

			<apex:pageblockTable value="{!lstQuery}" var="eachRecord" id="list">
				<apex:column value="{!eachRecord.id}" />
				<apex:column value="{!eachRecord['Name']}" />
			</apex:pageblockTable>
		</apex:pageBlock>
	</apex:form>
</apex:page>

Next time post your code using code snippet so it will be easier for us.
PRIYAN NEERUDUPRIYAN NEERUDU
i facing following Error: Could not resolve the entity from <apex:inputField> value binding '{!searchTxt}'. <apex:inputField> can only be used with SObjects, or objects that are Visualforce field component resolvable.
Sudhir ChowdarySudhir Chowdary
Sorry, use inputText insted of Field
PRIYAN NEERUDUPRIYAN NEERUDU
when m entering input label as id its showing following error:


User-added imageUser-added image
Sudhir ChowdarySudhir Chowdary
Hi,

Try Following Code:

Class:
public class objectController1
{

public  string searchTxt {get; set;}

 String queryString;
 
    public void searchrecords() {
        system.debug('selectedObject ---selectedField--------'+selectedObject+'---'+selectedField );
        queryString = 'SELECT Id, name';
        if (selectedObject!= null && selectedObject!= '')
         {
            queryString += ' from  '+ selectedObject+'';
        }
        
        if ( searchTxt != null && searchTxt!= '')
        
         {
            if (selectedField != null && selectedField != '') {
            
            queryString += ' where ' + selectedField +' = \''+searchTxt+'\'';
            
            system.debug('queryString -----'+queryString );
            
            }
            
        }
        system.debug('queryString -----------'+queryString );    
            
        lstQuery= database.query(queryString);
    }

    public Map <String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();    

    public String selectedObject {get; set;}    
    
    public list<sobject >lstQuery{get; set;}      

    public String selectedField {get; set;}

    Public objectController1()
    {   
        selectedObject = 'account';
    }  
    
    public List<SelectOption> getObjectNames()
        
    {
        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;
     }         

     public List<SelectOption> getObjectFields() 
     {
            Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
            
            Schema.SObjectType ObjectSchema = schemaMap.get(selectedObject);
            
            Map<String, Schema.SObjectField> fieldMap = ObjectSchema.getDescribe().fields.getMap();
            
            List<SelectOption> fieldNames = new List<SelectOption>();
            
            for (String fieldName: fieldMap.keySet()) 
            {  
                fieldNames.add(new SelectOption(fieldName,fieldName));
                
            
            }
            return fieldNames;
      }       
}

Page:
<apex:page controller="objectController1" setup="false"
    showHeader="false" sidebar="false">
    <apex:form id="frm">
        <apex:pageBlock >
            <apex:pageBlockSection columns="4">
                <apex:pageBlockSectionItem >
                    <apex:outputlabel value="Object Names :" />
                    <apex:actionRegion >
                        <apex:selectList value="{!selectedObject}" size="1">
                            <apex:selectOptions value="{!ObjectNames}" />
                            <apex:actionSupport event="onchange" rerender="myFields" />
                        </apex:selectList>
                    </apex:actionRegion>
                </apex:pageBlockSectionItem>


                <apex:pageBlockSectionItem >
                    <apex:outputlabel value="Field Names :" />
                    <apex:outputPanel id="myFields">
                        <apex:actionRegion >
                            <apex:selectList value="{!selectedField}" size="1">
                                <apex:selectOptions value="{!ObjectFields}" />
                            </apex:selectList>
                        </apex:actionRegion>
                    </apex:outputPanel>
                </apex:pageBlockSectionItem>

                <apex:pageBlockSectionItem >
                    <apex:inputText value="{!searchTxt}" />
                </apex:pageBlockSectionItem>

                <apex:pageBlockSectionItem >
                    <apex:commandButton value="Search" action="{!searchRecords}"
                        reRender="x,list,frm" style="margin-left:10px;" />
                </apex:pageBlockSectionItem>
            </apex:pageBlockSection>

            <apex:pageblockTable value="{!lstQuery}" var="eachRecord" id="list">
                <apex:column value="{!eachRecord.id}" />
                <apex:column value="{!eachRecord['Name']}" />
            </apex:pageblockTable>
        </apex:pageBlock>
    </apex:form>
</apex:page>

Hope this helps you. Mark as best answer if it helps.
This was selected as the best answer