Reader small image

You're reading from  Visualforce Development Cookbook

Product typeBook
Published inSep 2013
Reading LevelIntermediate
PublisherPackt
ISBN-139781782170808
Edition1st Edition
Languages
Right arrow
Author (1)
Keir Bowden
Keir Bowden
author image
Keir Bowden

Keir Bowden is a 30-year veteran of the IT industry from the United Kingdom. After spending the early part of his career in the defence industry, he moved into investment banking systems, implementing systems for Banque Nationale de Paris, CitiGroup, and Deutsche Bank. In the late 1990s, Keir moved into Internet technologies, leading to a development of the order management and payment handling systems of one of the first European Internet shopping sites. Keir started working with Force.com in late 2008 and has been recognized multiple times by Salesforce as an MVP for his contribution and leadership in the community. In 2012, he became the first certified technical architect outside of Salesforce in EMEA, and he has served as a judge on several EMEA Technical Architect Certification Review Boards. Keir is also a prominent blogger on Apex, Visualforce and Lightning Components solutions; and a regular speaker at events such as Dreamforce, Cloud World Forum, and Salesforce World Tour. Keir is a chief technical officer of BrightGena—a Salesforce.com Platinum Cloud Alliance Partner in the United Kingdom, where he is responsible for the present and future technical strategies. Keir acted as a technical reviewer for the CRM Admin Cookbook before accepting the challenge of authoring this book, which also happens to be his first.
Read more about Keir Bowden

Right arrow

Passing parameters between Visualforce pages


If a user is redirected from one Visualforce page to another and they both share the same controller and extensions, the controller instance will be retained and re-used, allowing the second page to access any information captured by the first.

If the pages do not share the same controller and extensions, the controller instance will be discarded and the second page will have no access to any information captured by the first. If the state needs to be maintained across the pages in this case, it must be encapsulated in the parameters on the URL of the second page.

In this recipe, we will build on the example from the previous recipe to create a Visualforce search page to retrieve all accounts where the name contains a string entered by the user, and provide a way for the user to edit selected fields on all the accounts returned by the search. The record IDs of the accounts to edit will be passed as parameters on the URL to the edit page.

How to do it…

As the search page makes reference to the edit page, the edit page and associated custom controller must be created first.

  1. Navigate to the Apex Classes setup page by clicking on Your Name | Setup | Develop | Apex Classes.

  2. Click on the New button.

  3. Paste the contents of the EditFromSearchController.cls Apex class from the code download into the Apex Class area.

  4. Click on the Save button.

  5. Next, create the edit Visualforce page by navigating to the Visualforce setup page by clicking on Your Name | Setup | Develop | Pages.

  6. Click on the New button.

  7. Enter EditFromSearch in the Label field.

  8. Accept the default EditFromSearch that is automatically generated for the Name field.

  9. Paste the contents of the EditFromSearch.page file from the code download into the Visualforce Markup area.

  10. Click on the Save button to save the page.

  11. Navigate to the Visualforce setup page by clicking on Your Name | Setup | Develop | Pages.

  12. Locate the entry for the EditFromSearch page and click on the Security link.

  13. On the resulting page, select which profiles should have access and click the Save button.

  14. Next, create the search page by navigating to the Apex Classes setup page by clicking on Your Name | Setup | Develop | Apex Classes.

  15. Click on the New button.

  16. Paste the contents of the SearchAndEditController.cls Apex class from the code download into the Apex Class area.

  17. Click on the Save button.

  18. Next, create the Visualforce page by navigating to the Visualforce setup page by clicking on Your Name | Setup | Develop | Pages.

  19. Click on the New button.

  20. Enter SearchAndEdit in the Label field.

  21. Accept the default SearchAndEdit that is automatically generated for the Name field.

  22. Paste the contents of the SearchAndEdit.page page from the code download into the Visualforce Markup area.

  23. Click on the Save button to save the page.

  24. Navigate to the Visualforce setup page by clicking on Your Name | Setup | Develop | Pages.

  25. Locate the entry for the SearchAndEdit page and click on the Security link.

  26. On the resulting page, select which profiles should have access and click on the Save button.

How it works…

Opening the following URL in your browser retrieves all accounts where the name field contains the string United: https://<instance>/apex/SearchAndEdit?name=United.

Here, <instance> is the Salesforce instance specific to your organization, for example, na6.salesforce.com.

Notice that the page contains an Edit button, and clicking on this executes the following action method:

public PageReference edit()
{
  PageReference pr=Page.EditFromSearch;
  Integer idx=1;
  for (Account acc : accounts)
  {
    pr.getParameters().put('account' + idx, acc.id);
    idx++;
  }
    
  return pr;
}

This method initially creates a page reference for the edit page—EditFromSearch. It then iterates the accounts in the search results and adds an entry to the page reference parameters for the account ID. Each parameter has the name account, concatenated with the index of the result, starting from 1. This will result in a URL of the form https://<instance>/apex/EditFromSearch?account1=001i0000006OVLIAA4&account2=001i0000006OVLJAA4.

The EditFromSearch page then renders a form with an editable row per account.

The constructor of EditFromSearchController that manages the data for the page extracts the IDs from the URL and adds them to a list, starting with account1, until it hits a parameter index that is not present in the URL.

Integer idx=1;
String accStr;
do 
{
  accStr=ApexPages.currentPage().getParameters().
get('account' + idx);
  if (accStr!=null)
  {
    ids.add(accStr);
  }
  idx++;
}
while (null!=accStr);

The action method that saves the user's edits redirects them to the standard account tab once the save is complete.

return new PageReference('/001/o');

Note

Note that accessing the standard tab via this URL is not supported by Salesforce, and if the URL scheme or three character prefix for account (001) were to change, this redirection would stop working.

See also

  • The Reacting to URL parameters recipe in this chapter shows how a controller can process URL parameters prior to rendering a Visualforce page.

Previous PageNext Page
You have been reading a chapter from
Visualforce Development Cookbook
Published in: Sep 2013Publisher: PacktISBN-13: 9781782170808
Register for a free Packt account to unlock a world of extra content!
A free Packt account unlocks extra newsletters, articles, discounted offers, and much more. Start advancing your knowledge today.
undefined
Unlock this book and the full library FREE for 7 days
Get unlimited access to 7000+ expert-authored eBooks and videos courses covering every tech area you can think of
Renews at €14.99/month. Cancel anytime

Author (1)

author image
Keir Bowden

Keir Bowden is a 30-year veteran of the IT industry from the United Kingdom. After spending the early part of his career in the defence industry, he moved into investment banking systems, implementing systems for Banque Nationale de Paris, CitiGroup, and Deutsche Bank. In the late 1990s, Keir moved into Internet technologies, leading to a development of the order management and payment handling systems of one of the first European Internet shopping sites. Keir started working with Force.com in late 2008 and has been recognized multiple times by Salesforce as an MVP for his contribution and leadership in the community. In 2012, he became the first certified technical architect outside of Salesforce in EMEA, and he has served as a judge on several EMEA Technical Architect Certification Review Boards. Keir is also a prominent blogger on Apex, Visualforce and Lightning Components solutions; and a regular speaker at events such as Dreamforce, Cloud World Forum, and Salesforce World Tour. Keir is a chief technical officer of BrightGena—a Salesforce.com Platinum Cloud Alliance Partner in the United Kingdom, where he is responsible for the present and future technical strategies. Keir acted as a technical reviewer for the CRM Admin Cookbook before accepting the challenge of authoring this book, which also happens to be his first.
Read more about Keir Bowden