Custom Visualforce Lookup
If you are creating a Visualforce page with a Standard controller, you can easily create Lookup field. But when using a custom controller and you have to create Lookup field, What you will do? In that type of cases, you'll have to create the functionality of lookup by yourself. In this arcticle we will see how to create Lookup field when using custom controller. For presentation, I have developed “Add New Contact” Page with Account Lookup (text field).
On Click Of magnifying glass image i am calling a function of Controller which is redirecting to a new ‘Account Lookup’ VF page.
And by clicking on any account name it will go back to the main page and Account Lookup text field is being populated.
Here is the Code:
Main VF page
<apex:page controller="myController" tabStyle="Contact">
<apex:form >
<apex:actionFunction name="callAction" action="{!callLookup}"/>
<apex:sectionHeader title="Add New Contact"/>
<apex:pageBlock >
<apex:pageBlockSection title="Contact Information" columns="1">
<apex:pageMessages/>
<apex:inputText label="First Name" value="{!fName}"/>
<apex:inputText label="Last Name" value="{!lName}"/>
<apex:inputText label="Account Lookup" style="float:left;" value="{!accName}">
<apex:image value="https://api.icons8.com/download/19343120d27c16dd3e9d21ad3aa637f94fd4d5fa/Android_L/PNG/256/Very_Basic/search-256.png" height="20" onclick="callAction()"/>
</apex:inputText>
</apex:pageBlockSection>
<center>
<apex:commandButton value="Save" action="{!save}"/>
</center>
</apex:pageBlock>
</apex:form>
</apex:page>
Lookup Visualforce page
<apex:page controller="myController" tabStyle="Contact">
<apex:form>
<apex:sectionHeader title="Account Lookup"/>
<apex:pageBlock>
<apex:pageBlockSection columns="1">
<apex:repeat value="{!accList}" var="acc">
<apex:commandLink value="{!acc.Name}" action="{!goBack}">
<apex:param value="{!acc.Name}" name="AccName"/>
<apex:param value="{!acc.Id}" name="AccId"/>
</apex:commandLink>
</apex:repeat>
</apex:pageBlockSection>
</apex:pageBlock>
</apex:form>
</apex:page>
Custom Controller
public class myController {
public String fName{get;set;}
public String lName{get;set;}
public String accName{get;set;}
public Id AccId{get;set;}
public List accList {get;set;}
public PageReference callLookup(){
accList = [Select id,Name from Account];
PageReference pr = new PageReference('/apex/AccLookup');
pr.setRedirect(false);
return pr;
}
public PageReference goBack(){
accName = ApexPages.currentPage().getParameters().get('AccName');
AccId = ApexPages.currentPage().getParameters().get('AccId');
PageReference pr = new PageReference('/apex/AddNewContact');
pr.setRedirect(false);
return pr;
}
public PageReference save(){
if(lName == null || lName == ''){
ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING,'Last Name is Required!'));
return null;
}
else{
Contact con = new Contact();
con.FirstName = fName;
con.LastName = lName;
con.AccountId = AccId;
insert con;
PageReference pr = new PageReference('/'+con.Id);
pr.setRedirect(false);
return pr;
}
}
}


