Controller Extensions in Salesforce | The Developer Guide
Controller Extension is an Apex Code that extends the functionality of a Standard or Custom Controller.
When to Use Controller Extensions
- When we want to use the built-in functionality of a Standard Controller but override one or more actions, like edit, view, save, or delete.
- When we want to add new actions.
- When we want to build a Visualforce page that respects user permissions.
- If the Controller Extension extends a Standard Controller it will execute in user mode in which permissions, field-level security, and sharing rules of the current user apply, even though a controller extension class executes in system mode.
Don't forget to check out: Enhance Your Single View of The Customer Using Salesforce Marketing Cloud Connect
Types of Extensions
- Standard controllers: It is used for performing operations on a single record.
- Standardsetcontrollers: It is used for performing operations on a group of records.
Example: Methods of apexpages.standardcontroller
Apex Class:
public class allmethods { public apexpages.StandardController cont {set;get;} public account acc {set;get;} public account acc1 {set;get;} public allmethods(apexpages.StandardController controller){ cont=controller; string[] ss= new string[]{'name','email__c','industry','rating'}; acc=(account)cont.getrecord(); } public void savenew(){ insert acc; acc.clear(); } }
Visualforce Page:
<apex:page standardController="account" extensions="allmethods"> <apex:form> <apex:commandButton value="SAVE" action="{!save}"/> <!---- This is applicable only for Edit and detail page---> <apex:commandButton value="cancel" action="{!cancel}"/> <!---- This is applicable only for Edit and detail page---> <apex:commandButton value="delete1" action="{!delete}"/> <!---- This is applicable only for detail page---> <apex:commandButton value="edit1" action="{!edit}"/> <!---- This is applicable only for detail page---> <apex:commandButton value="SAVEnew" action="{!savenew}"/> <!---- This is a custom functionality so it is visible in the page---> <apex:pageblock> <apex:inputField value="{!account.name}"/> <apex:inputField value="{!account.Email__c}"/> <apex:inputField value="{!account.industry}"/> <apex:inputField value="{!account.rating}"/> </apex:pageblock> </apex:form> </apex:page>
Example1: Customizing “new” button with a custom Visualforce page in account object without extensions.
Visualforce Page:
<apex:page standardController="account"> <apex:form> <apex:pageBlock> <apex:commandButton value="save" action="{!save}"/> <apex:commandButton value="cancel" action="{!cancel}"/> <apex:pageBlockSection columns="2"> <apex:pageBlockSectionItem> <apex:outputLabel value="account name"/> <apex:inputField value="{!account.name}"/> </apex:pageBlockSectionItem> <apex:pageBlockSectionItem> <apex:outputLabel value="Email"/> <apex:inputField value="{!account.Email__c}"/> </apex:pageBlockSectionItem> <apex:pageBlockSectionItem> <apex:outputLabel value="industry"/> <apex:inputField value="{!account.industry}"/> </apex:pageBlockSectionItem> <apex:pageBlockSectionItem> <apex:outputLabel value="rating"/> <apex:inputField value="{!account.rating}"/> </apex:pageBlockSectionItem> </apex:pageBlockSection> </apex:pageBlock> </apex:form> </apex:page>
The above page is linked to new button using below steps Setup -> Customize -> Accounts -> Buttons, Links, and Actions -> Edit(New) -> Visualforce page -> save
Check out another amazing blog by Kirandeep here: What Are Events In Salesforce Lightning Component
Example2: Creating functionality of “save&New” Button using Extensions(We cannot retrieve existing save&new functionality).
Apex Class:
public class SaveNew { public account acc {set;get;} public saveNew(apexpages.StandardController controller){ acc=new account(); } public void savene(){ insert acc; acc=new account(); } }
Visualforce Page:
<apex:page standardController="account" extensions="SaveNew"> <apex:form> <apex:pageBlock> <apex:commandButton value="save" action="{!save}"/> <apex:commandButton value="save&New" action="{!saveNe}"/> <apex:commandButton value="cancel" action="{!cancel}"/> <apex:pageBlockSection columns="2"> <apex:pageBlockSectionItem> <apex:outputLabel value="account name"/> <apex:inputField value="{!acc.name}"/> </apex:pageBlockSectionItem> <apex:pageBlockSectionItem> <apex:outputLabel value="Email"/> <apex:inputField value="{!acc.Email__c}"/> </apex:pageBlockSectionItem> <apex:pageBlockSectionItem> <apex:outputLabel value="industry"/> <apex:inputField value="{!acc.industry}"/> </apex:pageBlockSectionItem> <apex:pageBlockSectionItem> <apex:outputLabel value="rating"/> <apex:inputField value="{!acc.rating}"/> </apex:pageBlockSectionItem> </apex:pageBlockSection> </apex:pageBlock> </apex:form> </apex:page>
Responses