Use VisualForce Page Action Create Custom Button

    Before creating a custom button or link, determine what action you want to occur when a user clicks it. Consider a Visualforce page if you want the button or link to launch a custom page or other code(salesforce help).

    We can execute Javascript or Apex Class within a visualforce page action.But we will not talk about the Onclick today,you can achieve your business by webservice or remote object.

    Today we will implement a custom button through a visualforce page, in the page ,init a Action and accomplish the logic in the apex controller

    The scenario is described below:

        1,When our business unit launched a campaign,the user will apply marketing budget.Certainly,we will manage the approve flow by salesforce standard approve process.

        2,We Create a custom object: event request,and it has a field named status and contains these picklist value (Submitted, Approved, Reject, Cancelled );

        3,The status field is read only to the user,and update by approve process

        4,But there is a question,when the user want to cancel the request,he can not change the status field directly

        5,So,we need a Cancel Button to do it.

    Here is the flows:

         1,Create a visualforce page,very simple :

 <apex:page standardController="Event_Request__c"
           extensions="ctrlExt_EventRequestCancel"
           action="{!customCancel}">
<apex:Pagemessages id="msgs"/> 
<apex:sectionHeader title="Auto-Running Apex Code"/>
  <apex:outputPanel >         
          If you see this page, it must be something wrong.Please contact the administraor.
  </apex:outputPanel>
</apex:page>

     2,Create a extension controller

public with sharing class ctrlExt_EventRequestCancel {
	private final ApexPages.StandardController stdController;
	public Event_Request__c eq{get;set;}
	public ctrlExt_EventRequestCancel(ApexPages.StandardController stdController)
	{
		this.stdController = stdController;
		list  fieldsList = new list ();
		fieldsList.add('Status__c');
		if(!Test.isRunningTest()) 
                {
                   stdcontroller.addFields(fieldsList);
                } 
		this.eq =  (Event_Request__c)stdcontroller.getRecord();
		system.debug('this.eq1: ' + this.eq );
	}
	public PageReference customCancel()
	{
		try
		{
			if(null != this.eq && 'Cancelled' != this.eq.Status__c)
			{
				this.eq.Status_MDT_AP__c='Cancelled';
				update this.eq;
				return this.stdController.view().setRedirect(true);
			}
			
		}catch(exception e)
		{
			ApexPages.Message Msg = new ApexPages.Message(ApexPages.Severity.Info,e.getMessage());
        	ApexPages.addMessage(Msg);
		}
		
		return null;
	}
}

        3,In the Object describe page,create a new button:

            QQ20150602-1@2x.png

    4,Congratulations,you have got a new Custom  Button.

zhubaotian

Share this article