LET'S LEARN TOGETHER. THE BEAUTIFUL THING ABOUT LEARNING IS NOBODY CAN TAKE IT AWAY FROM YOU.

Important points to remember regarding actionRegion, actionFunction, actionSupport, actionPoller


Last night(July 17th, 2019) while preparing for Platform Developer II certification, I was going through my notes to revise the different ways to call Apex Controller functions from Visualforce page, I thought of making a post regarding actionRegion, actionFunction, actionSupport, actionPoller & actionStatus. Just setting the expectation beforehand - It is not a post which will explain you all, but I will share the developer guide link for each of them so that you can go and read them (highly recommended).

actionRegion

The specifies the components to be processed on Force.com server. Without this tag, the whole page will be processed. With actionRegion also the whole form is submitted, but only the part within the tag will be processed.

It needs a reRender attribute to be effective. It will only refresh the part of the page using the data contained within the tag. This can be very effectively used to avoid validation errors that may occur due to present of standard validation rule in VF page like required attribute.

Here is the example without ActionRegion:
Controller:
public with sharing class WithoutActionRegionController {
    public String valueEntered{get;set;}
    public String country{get;set;}
    public String state{get;set;}

    public WithoutActionRegionController() {
        country = '';
        state = '';
        valueEntered = '';
    }

    public PageReference countrySubmitted(){
        valueEntered = 'Country: ' + country;
        return null;
    }
}

Visualforce Page:
<apex:page controller="WithoutActionRegionController">
    <apex:form id="myForm">
        <apex:pageMessages id="messages1"/>
        <apex:pageBlock id="topPageBlock">
            <apex:pageBlockSection columns="2" title="Country & State">
                <apex:outputText value="Enter Country" />
                <apex:inputText value="{!country}" >
                    <apex:actionSupport action="{!countrySubmitted}" reRender="messages1,outputId" event="onchange"/>
                </apex:inputText>
                <apex:outputText value="Enter State" />
                <apex:inputText value="{!state}" required="true"/>
            </apex:pageBlockSection>
            <apex:pageBlockSection title="Output" id="outputId">
                    <apex:outputText value="{!valueEntered}" />
            </apex:pageBlockSection>
        </apex:pageBlock>
    </apex:form>
</apex:page>

Output:

As you can see it throws the validation message due to state field is marked as required=true to moment I finish entering the country. This is because the whole page is submitted to render.

Now the same example with ActionRegion:
<apex:page controller="WithoutActionRegionController">
    <apex:form id="myForm">
        <apex:pageMessages id="messages1"/>
        <apex:pageBlock id="topPageBlock">
            <apex:pageBlockSection columns="2" title="Country & State">
                <apex:outputText value="Enter Country" />
                <apex:actionRegion>
                    <apex:inputText label="Enter Country" value="{!country}" >
                        <apex:actionSupport action="{!countrySubmitted}" reRender="messages1,outputId" event="onchange"/>
                    </apex:inputText>
                </apex:actionRegion>
                <apex:outputText value="Enter State" />
                <apex:inputText value="{!state}" required="true"/>
            </apex:pageBlockSection>
            <apex:pageBlockSection title="Output" id="outputId">
                    <apex:outputText value="{!valueEntered}" />
            </apex:pageBlockSection>
        </apex:pageBlock>
    </apex:form>
</apex:page>

Output:
This time no error message because actionRegion will render the Output and message1 part of the page with the content present inside tag. 

Reference: https://developer.salesforce.com/docs/atlas.en-us.pages.meta/pages/pages_compref_actionRegion.htm?search_text=actionregion

actionFunction

This allows calling controller functions directly from the JavaScript code using AJAX request. It is not the same as actionSupport which only allows calling controller functions from other Visualforce components. Few things to remember -
  • actionFunction is not allowed to be placed inside iteration component. It should be placed after the iteration component.
  • order is matched by the caller's argument list. reRender attribute is needed to define
  • It doesn't have event attribute. It doesn't add Ajax request before calling the Controller method.
Example:
Controller:
public with sharing class ActionFunctionController {
    public Boolean showHelloWorld{get;set;}
    public String message {get;set;}
    public ActionFunctionController(){
        showHelloWorld = false;
        message = '';
    }

    public PageReference shouldDisplayHelloWorld(){
        showHelloWorld = true;
        message = 'Now we can say Hello World';
        
        return null;
    }
}

Visualforce Page:
<apex:page controller="ActionFunctionController">
    <apex:form>
        <apex:actionFunction name="checkHelloWorldDisplay" action="{!shouldDisplayHelloWorld}" reRender="HelloWorldSection"/>
        <apex:pageBlock>
            <apex:pageBlockSection id="HelloWorldSection" columns="1">
                <apex:inputCheckbox value="{!showHelloWorld}" onChange="checkHelloWorldDisplay()"/>
                <apex:outputText value="{!message}" />
            </apex:pageBlockSection>
        </apex:pageBlock>
    </apex:form>

</apex:page>

actionSupport

This can be used when we need the Visualforce component to be refreshed asynchronously by the server when a particular event occurs like button click or mouseover.
  • It adds the AJAX request to the Visualforce Page and then calls the controller function. This is how it different from actionFunction.
  • It also has event attribute. Another difference between actionFunction and actionSupport.
  • It can be placed inside an iteration component.

actionPoller

  • A timer that sends an AJAX request to server according to a time interval specified. Each request can result full or partial refresh of the page.
  • Enabled attribute is used to make poller as active or inactive. Default is active.
  • It won't time out due to inactivity.

Share:

2 comments:

Never miss a post. Subscribe to get latest blog posts, right into your email box.

* indicates required

Labels

Salesforce (105) Apex (51) admin (28) visualforce (21) ADM (20) dev 501 (19) lightning (19) integration (18) learn salesforce (18) 501 (16) javascript (14) SOAP (13) tutorial (11) Certification. (10) Advanced Apex (9) Kitchener Developer Group (8) test class (8) Certification (7) Trigger (7) flow (7) security (7) unit testing (7) Advanced Admin (6) Lightning Experience (6) Sharing and Visibility (6) design pattern (6) developer (6) report (6) salesforce release (6) service cloud (6) trailhead (6) use case (6) Lightning Feature (5) New Features (5) SOQL (5) css (5) dashboard (5) debug (5) formula (5) mobile (5) solution management (5) JSON (4) Kitchener User Group (4) Lightning Web Component (4) New Feature (4) Sales Cloud (4) Salesforce DX (4) Tips (4) WebSphere (4) best practice (4) cast iron (4) component (4) deployment (4) event (4) github (4) html (4) map (4) polymer (4) profiles (4) release (4) responsive (4) tdd (4) ui (4) visual studio code (4) Architect (3) Live Chat (3) Online Event (3) Opportunity (3) Performance (3) Products (3) REST (3) Role (3) Salesforce Certification (3) Scratch Org (3) Spring 20 (3) Study Notes. (3) Summer15 (3) VS Code (3) Web Technology (3) Winter21 (3) automation tool (3) configuration (3) dynamic apex (3) license (3) mapbox (3) singleton (3) version controlling (3) AppExchange (2) Article (2) Asynchronous Apex (2) Asynchronous callout (2) Aura Framework (2) Bulkify (2) Community (2) Data Architecture and Management Certification (2) Devops (2) Distributed Version Controlling (2) ES6 (2) Eclipse (2) Einstein (2) Enhancement (2) Enterprise Territory Management (2) Financial Services Cloud (2) Force.com IDE (2) Governor Limit (2) Groups (2) IBM (2) Implicit Sharing (2) JourneyToCTA (2) Knowledge Management (2) LWC (2) Lightning Design System (2) Live Agent (2) Metadata (2) PD II (2) Price Book (2) Queueable (2) SFDX (2) SOSL (2) Sharing (2) Spring 15 (2) Summer17 (2) Territory (2) Virtual Event (2) ant (2) basic (2) chatter (2) code coverage (2) coding (2) communication (2) console (2) controller (2) documentation (2) dreamforce (2) git (2) jquery (2) logging (2) object (2) permission (2) process builder (2) salesforce1 (2) strategy (2) visual workflow (2) xml (2) Action Plan (1) Action Plan Template (1) Activity Timeline (1) Advanced Currency (1) Agent Productivity (1) Analytics (1) Apex Sharing (1) Arrow (1) Batch (1) Bots (1) Browser (1) Bulk data load (1) CTA (1) Calendar (1) Canon (1) Case Management (1) Celebration (1) Cheat Sheet (1) Classic (1) Compare (1) Confetti (1) Constructor (1) Contact Center (1) Continuation (1) Continuous Integration (1) Convert (1) Cookie (1) CumulusCI (1) Custom Metadata (1) Custom Object (1) Custom Permission (1) Customer (1) Data Model (1) DataGrid (1) DataTable (1) Dated Exchange Rate (1) Decorator Design Pattern (1) Dev Hub (1) Development (1) Diwali (1) EDA (1) ESLint (1) Education Cloud (1) Email (1) FSC (1) Function (1) Future (1) Global Gathering (1) Goals (1) Guest Access (1) Guest Profile (1) Guest User Sharing Rule (1) Guide (1) HEDA (1) Higher Education (1) Household (1) Husky (1) IDE (1) Ideas (1) Improvement (1) Invocable (1) KPIs (1) Large Data Volume (1) LastModifiedDate (1) Manage Currencies (1) Manual Sharing (1) Metrics (1) Multi Currency (1) New (1) OOPS (1) OWD (1) Omni-Channel (1) Optimize (1) Partner (1) Permission Set (1) Person Account (1) Photo (1) Pipeline (1) Platform Developer I (1) Platform Developer II (1) Presentation (1) Prettier (1) Product Schedule (1) Profile (1) Promise (1) Prototype (1) Public Site (1) Query Plan (1) QuickReference (1) Related records (1) Reports (1) Retrieve (1) Role Hierarchy (1) SAL (1) Salesfor (1) Salesforce Advisor Link (1) Salesforce Labs (1) Salesforce Optimizer (1) SalesforceDx (1) Schedule (1) Session (1) Sharing Rule (1) Sharing Sets (1) Site (1) Skills (1) Snap-ins (1) Spring 17 (1) Summer14 (1) Summer16 (1) Summer19 (1) Switch (1) SystemModStamp (1) Tile (1) Timeline (1) Unauthorized Access (1) User License (1) Users (1) Validation Rule (1) Web (1) Webservice (1) Winter'15 (1) Winter'17 (1) access (1) actionFunction (1) actionPoller (1) actionRegion (1) actionSupport (1) agile (1) app (1) approval process (1) aura (1) awesome (1) backup (1) bitbucket (1) book (1) campaign (1) change set (1) cli (1) code (1) csv (1) custom button (1) custom settings (1) customization (1) data loader (1) database (1) delegate Admin (1) describe (1) dom (1) duplicate (1) dynamic (1) dynamic form (1) email template (1) email-to-case (1) equals (1) error (1) field-level security (1) folder (1) ftp (1) generic (1) gift (1) global describe (1) hashcode (1) import wizard (1) jenkins (1) keynote (1) long running requests (1) monitoring (1) mysql (1) page layout (1) personal (1) power of one (1) record type (1) relationship (1) request (1) review (1) solution (1) sub-tab (1) survey (1) tab (1) username (1) workflow (1)

Popular Posts

Total Pageviews

Contact Me

Name

Email *

Message *