Project: Lookup to Picklist
In the first installment of post-Dreamforce projects, I present a mechanism to present the user with all available Lookup options in a picklist. This should simplify some Visualforce pages. (Credit to the Developers Guide from the new post-Dreamforce Library.)
The key to the code is the ability to customize the SOQL statement to focus as much, or as little, as the developer would like. Though the code I provide makes no limit on the number of records returned, I encourage developers to limit the select statement as seen fit.
VF Page:
<br />
<apex:page standardcontroller="Child__c" Extensions="ChildExtension"><br />
<apex:messages ></apex:messages><br />
<apex:form ><br />
<apex:pageBlock mode="edit" id="thePageBlock"><br />
<apex:pageBlockButtons ><br />
<apex:commandButton value="Save" action="{!save}"/><br />
<apex:commandButton value="Cancel" action="{!cancel}"/><br />
</apex:pageBlockButtons><br />
<apex:pageblockSection id="ParentList" title="1"><br />
<apex:pageBlockSectionItem ><br />
<apex:outputLabel value="Parent" for="p"/><br />
<apex:selectList id="p" value="{!Child__c.Parent__c}" size="1" title="3"><br />
<apex:selectOptions value="{!ParentOptions}"/><br />
</apex:selectList><br />
</apex:pageBlockSectionItem><br />
</apex:pageblocksection><br />
</apex:pageBlock><br />
</apex:form><br />
</apex:page><br />
Extension:
Note the SOQL query in Line 12 (below) that defines which records are included in the picklist. You can include WHERE and LIMIT statements to get the picklist down to a manageable number of items.
<br />
public class ChildExtension {</p>
<p>private final Child__c child;</p>
<p> public ChildExtension(ApexPages.StandardController controller) {<br />
this.child = (Child__c)controller.getRecord();<br />
}</p>
<p> public List<br />
<selectOption> PositionOptions {get<br />
{<br />
List<br />
<selectOption> parents = new List<br />
<selectOption>();<br />
for (Parent__c prt : [select name from Parent__c pt])<br />
parents.add(new selectOption(prt.id, prt.name));<br />
return parents;<br />
}<br />
private set;<br />
}<br />
}<br />
Because the parents List in the extension sends an ID to the application, it can successfully create a record with the parent Name in the picklist, but the ID in the background. You can also substitute a different field for Name: If you prefer, put a contact’s email address or anything else. Try it out!
One more thing: This is an easy segue into another project, which will be a way to use the traditional lookup interface but to pre-filter the records available in the lookup.
And because I put this in every post: There’s a catch. (There always is.) I’m sure that somewhere in there, Salesforce would prefer that we not create a picklist of a few hundred items. So please feel free to test the limits of this visualforce method, but please be prepared to filter your SOQL query.
On a separate note, I just had lunch with John Rotenstein aka The Enforcer, who already put up a photo of our time in his office. (I think the pirate logo was an accident, but it does add to my sinister persona, no?)
Comments
Leave a Reply
Additional comments powered by BackType


