You need to sign in to do that
Don't have an account?

Dynamic Search Visualforce page
Hi,
I have custom object called patient and fields name, email__c, gender__c, Doctor__c(lookup field).
I have to develop a dynamic search page to fetch the related data and display in a table based on values given in input fields called name, email__c, Doctor__c. but iam facing problem with fetching data based on search.
please help me to solve this issue.
<apex:page controller="DynamicSearchPatientClass" sidebar="false">
<script type="text/javascript">
function doSearch() {
searchServer(
document.getElementById("Name").value,
document.getElementById("Gender").value,
document.getElementById("Email").value,
document.getElementById("Doctor").value);
}
</script>
<apex:form >
<apex:actionFunction name="searchServer" action="{!runSearch}" rerender="results,result2,errors">
<apex:param name="Name" value="" />
<apex:param name="Gender" value="" />
<apex:param name="Email" value="" />
<apex:param name="Doctor" value="" />
</apex:actionFunction>
<apex:pageBlock >
<apex:pageBlockSection title="Patient Search" collapsible="false" columns="2" >
Patient Name<apex:inputText value="{!patients.Name}" id="Name" onkeyup="doSearch();"/>
Gender<apex:inputText value="{!patients.Gender__c}" id="Gender" onchange="doSearch();"/>
Email<apex:inputText value="{!patients.Email__c}" id="Email" onkeyup="doSearch();"/>
Doctor Name<apex:inputText value="{!patients.Doctor__c }" id="Doctor" onchange="doSearch();"/>
</apex:pageBlockSection>
<apex:pageBlockSection title="Patient Details" id="result" >
<apex:pageBlockTable value="{!patients}" var="p" id="result2">
<apex:column value="{!p.Name}"/>
<apex:column value="{!p.Gender__c}"/>
<apex:column value="{!p.Email__c}"/>
<apex:column value="{!p.Doctor__c }"/>
</apex:pageBlockTable>
</apex:pageBlockSection>
</apex:pageBlock>
</apex:form>
</apex:page>
Class:
public with sharing class DynamicSearchPatientClass {
Private string soql {get;set;}
public Patient__c patients {get;set;}
public String sortDir{
get { if (sortDir == null) { sortDir = 'asc'; }
return sortDir;}
set;}
public String sortField {
get {if ( sortField == null) {
sortField = 'Name'; } return sortField; }
set;}
public void runQuery() {
try {
patients= Database.query(soql + ' order by ' + sortField + ' ' + sortDir + ' limit 20 ');
system.debug('>>>>>>4' +patients);
}
catch (Exception e) {
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, ' OOOps! ') );
}
}
public DynamicSearchPatientClass(){
soql='select name,Email__c,Gender__c,Doctor__c from patient__c where patient__c.Name != null';
system.debug('>>>>>>' +soql);
runQuery();
}
public PageReference runSearch(){
String Name = Apexpages.currentPage().getParameters().get('Name');
String Gender = Apexpages.currentPage().getParameters().get('Gender');
String Email = Apexpages.currentPage().getParameters().get('Email');
String Doctor= Apexpages.currentPage().getParameters().get('Doctor');
soql='select name,Email__c,Gender__c,Doctor__c from patient__c where patient__c.Name != null';
system.debug('>>>>>>3' +soql);
if (!Name.equals(''))
soql += ' and Name LIKE \' '+String.escapeSingleQuotes(Name)+'%\'';
system.debug('>>>>>>1' +soql);
if (!Email.equals(''))
soql += ' and Email__c LIKE \''+String.escapeSingleQuotes(Email)+'%\'';
if (!Gender.equals(''))
system.debug('>>>>>>2' +soql);
soql += ' and Gender__c LIKE \''+String.escapeSingleQuotes(Gender)+'%\'';
if (!Doctor.equals(''))
soql += ' and Doctor__c LIKE \''+String.escapeSingleQuotes(Doctor)+'%\'';
runQuery();
return null;
}
}
Regards,
Sain
I have custom object called patient and fields name, email__c, gender__c, Doctor__c(lookup field).
I have to develop a dynamic search page to fetch the related data and display in a table based on values given in input fields called name, email__c, Doctor__c. but iam facing problem with fetching data based on search.
please help me to solve this issue.
<apex:page controller="DynamicSearchPatientClass" sidebar="false">
<script type="text/javascript">
function doSearch() {
searchServer(
document.getElementById("Name").value,
document.getElementById("Gender").value,
document.getElementById("Email").value,
document.getElementById("Doctor").value);
}
</script>
<apex:form >
<apex:actionFunction name="searchServer" action="{!runSearch}" rerender="results,result2,errors">
<apex:param name="Name" value="" />
<apex:param name="Gender" value="" />
<apex:param name="Email" value="" />
<apex:param name="Doctor" value="" />
</apex:actionFunction>
<apex:pageBlock >
<apex:pageBlockSection title="Patient Search" collapsible="false" columns="2" >
Patient Name<apex:inputText value="{!patients.Name}" id="Name" onkeyup="doSearch();"/>
Gender<apex:inputText value="{!patients.Gender__c}" id="Gender" onchange="doSearch();"/>
Email<apex:inputText value="{!patients.Email__c}" id="Email" onkeyup="doSearch();"/>
Doctor Name<apex:inputText value="{!patients.Doctor__c }" id="Doctor" onchange="doSearch();"/>
</apex:pageBlockSection>
<apex:pageBlockSection title="Patient Details" id="result" >
<apex:pageBlockTable value="{!patients}" var="p" id="result2">
<apex:column value="{!p.Name}"/>
<apex:column value="{!p.Gender__c}"/>
<apex:column value="{!p.Email__c}"/>
<apex:column value="{!p.Doctor__c }"/>
</apex:pageBlockTable>
</apex:pageBlockSection>
</apex:pageBlock>
</apex:form>
</apex:page>
Class:
public with sharing class DynamicSearchPatientClass {
Private string soql {get;set;}
public Patient__c patients {get;set;}
public String sortDir{
get { if (sortDir == null) { sortDir = 'asc'; }
return sortDir;}
set;}
public String sortField {
get {if ( sortField == null) {
sortField = 'Name'; } return sortField; }
set;}
public void runQuery() {
try {
patients= Database.query(soql + ' order by ' + sortField + ' ' + sortDir + ' limit 20 ');
system.debug('>>>>>>4' +patients);
}
catch (Exception e) {
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, ' OOOps! ') );
}
}
public DynamicSearchPatientClass(){
soql='select name,Email__c,Gender__c,Doctor__c from patient__c where patient__c.Name != null';
system.debug('>>>>>>' +soql);
runQuery();
}
public PageReference runSearch(){
String Name = Apexpages.currentPage().getParameters().get('Name');
String Gender = Apexpages.currentPage().getParameters().get('Gender');
String Email = Apexpages.currentPage().getParameters().get('Email');
String Doctor= Apexpages.currentPage().getParameters().get('Doctor');
soql='select name,Email__c,Gender__c,Doctor__c from patient__c where patient__c.Name != null';
system.debug('>>>>>>3' +soql);
if (!Name.equals(''))
soql += ' and Name LIKE \' '+String.escapeSingleQuotes(Name)+'%\'';
system.debug('>>>>>>1' +soql);
if (!Email.equals(''))
soql += ' and Email__c LIKE \''+String.escapeSingleQuotes(Email)+'%\'';
if (!Gender.equals(''))
system.debug('>>>>>>2' +soql);
soql += ' and Gender__c LIKE \''+String.escapeSingleQuotes(Gender)+'%\'';
if (!Doctor.equals(''))
soql += ' and Doctor__c LIKE \''+String.escapeSingleQuotes(Doctor)+'%\'';
runQuery();
return null;
}
}
Regards,
Sain
Try to use follwing code.
Visualforce Page:
Apex Class:
Thank You,
Hitesh Patel
Email :- hiteshpatel.aspl@gmail.com
http://mrjavascript.blogspot.in/
Please check the below link for a nice example on the dynamic search VF page
http://blog.jeffdouglas.com/2010/07/13/building-a-dynamic-search-page-in-visualforce/
Best Regards
Naga kiran