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