Adding Custom List Buttons using Standard List Controllers

In addition to overriding standard buttons and links, you can also create custom list buttons that link to pages that use a standard list controller. These list buttons can be used on a list page, search results, and any related list for the object and allow you to take actions on a group of selected records. To indicate the set of records that have been selected, use the {!selected} expression.

For example, to add a custom button to a related list for opportunities that allows you to edit and save the opportunity stage and close date on selected records:
  1. Create the following Apex class:
    public class tenPageSizeExt {
    
        public tenPageSizeExt(ApexPages.StandardSetController controller) {
            controller.setPageSize(10);
        }
    }
  2. Create the following page and call it oppEditStageAndCloseDate:
    <apex:page standardController="Opportunity" recordSetVar="opportunities" tabStyle="Opportunity" extensions="tenPageSizeExt">
        <apex:form >
            <apex:pageBlock  title="Edit Stage and Close Date" mode="edit">
                <apex:pageMessages />
                <apex:pageBlockButtons location="top">
                    <apex:commandButton value="Save" action="{!save}"/>
                    <apex:commandButton value="Cancel" action="{!cancel}"/>
                </apex:pageBlockButtons>
                <apex:pageBlockTable value="{!selected}" var="opp">
                    <apex:column value="{!opp.name}"/>
                    <apex:column headerValue="Stage">
                        <apex:inputField value="{!opp.stageName}"/>
                    </apex:column>
                    <apex:column headerValue="Close Date">
                        <apex:inputField value="{!opp.closeDate}"/>
                    </apex:column>
                </apex:pageBlockTable>      
            </apex:pageBlock>
        </apex:form>
        </apex:page>
  3. Make the page available to all users.
    1. Click Setup | Customize | Develop | Pages.
    2. Click Security for the oppEditStageAndCloseDate page.
    3. Add the appropriate profiles to the Enabled Profiles list.
    4. Click Save.
  4. Create a custom button on opportunities.
    1. Click Setup | Customize | Opportunities | Buttons and Links.
    2. Click New in the Custom Buttons and Links section.
    3. Set the Label to Edit Stage & Date.
    4. Set the Display Type to List Button.
    5. Set the Content Sourct to Visualforce Page.
    6. From the Content drop-down list, select oppEditStageAndCloseDate.
    7. Click Save.
    8. A warning will display notifying you that the button will not be displayed until you have updated page layouts. Click OK.
  5. Add the custom button to an account page layout.
    1. Click Setup | Customize | Accounts | Page Layouts.
    2. Click Edit for the appropriate page layout.
    3. In the Related List Section, click on Opportunities, then click Edit Properties.
    4. In the Custom Buttons section, select Edit Stage & Date in the Available Buttons list and add it to the Selected Buttons list.
    5. Click OK.
    6. A dialog will open warning you that you must save the page layout to confirm your changes. Click OK.
    7. Click Save.
Now, when you visit the account page, there is a new button in the opportunities related list.
Example of New Button

When you select an opportunity and click Edit Stage & Date, you are taken to your custom edit page.
Example of Custom Edit Page

© Copyright 2000-2009 salesforce.com, inc. All rights reserved.
Various trademarks held by their respective owners.