Saturday, 8 April 2017

Custom Pagination Example on Visualforce Page in Salesforce:

Here are the sample codes with the help of that you can build custom pagination functionality in Salesforce using Apex. For this you need to create some Visualforce and one Apex Class.

So let’s enjoy the coding!!!!

Custom Controller Apex Code to get the data from Salesforce

public class clsCustomPagination
{
    //Variable Declation for Pagination
    public static Integer ROWS_PER_PAGE = 5;
    public integer pageNum {get; set;}
    public boolean pageHasMore {get; set;}
    public boolean pageHasNext {get; set;}
    public boolean pageHasPrev {get; set;}
    public boolean pageHasFirst {get; set;}
    public boolean pageHasLast {get; set;}
    public list<Opportunity> lstAllOpportunity;
    public list<Opportunity> lstPageOpportunity{get;set;}
    public integer tableRowsPerPage{get;set;}
    public string strCurPosition{get;set;}
    public integer intTotalOpp{get;set;}
    public integer firstIndex {get;set;}
   
    //Class Constructor
    public clsCustomPagination()
    {
        strCurPosition = '';
        pageHasNext = false;
        pageHasPrev = false;
        pageHasFirst = false;
        pageHasLast = false;
        pageNum = 1;
        intTotalOpp = 0;
        tableRowsPerPage = 15;
        lstAllOpportunity = new list<Opportunity>();
        lstPageOpportunity = new list<Opportunity>();
       
        lstAllOpportunity = [SELECT Account.Name,AccountId,Amount,CampaignId,CloseDate,Description,ExpectedRevenue,
                                LeadSource,Name,TotalOpportunityQuantity,Type FROM Opportunity where AccountId != null];
                               
        setPaginationNumber();
        DoPaginationOnList();
    }
   
    public void DoPaginationOnList()
    {
        lstPageOpportunity = new list<Opportunity>();
        firstIndex = ((ROWS_PER_PAGE * pageNum) - ROWS_PER_PAGE) ;
        pageHasMore = pageNum < getTotalPages();
        intTotalOpp = lstAllOpportunity.size();
        System.debug('Opportunity 0 is ' +lstAllOpportunity[0]);
        if(intTotalOpp > 0)
        {
            for(Integer i=firstIndex; i<firstIndex+ROWS_PER_PAGE && intTotalOpp > i; i++)
            {
               lstPageOpportunity.add(lstAllOpportunity.get(i));
            }
           
            if(pageNum >= 1 && pageNum != getTotalPages())
            {
                pageHasNext = true;
                pageHasLast = true;
            }
            else if(pageNum == getTotalPages())
            {
                pageHasNext = false;
                pageHasLast = false;
            }
        }
        else
        {
            pageHasNext = false;
            pageHasPrev = false;
            pageHasLast = false;
            pageHasFirst = false;
        }
        if(lstPageOpportunity.size() == 0)
        {
            ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'No record found'));
        }
    }
   
    public void firstPage()
    {
        pageNum = 1;
        pageHasPrev = false;
        pageHasNext = true;
        pageHasFirst = false;
        pageHasLast = true;
        setPaginationNumber();
        DoPaginationOnList();
    }
   
    public void previousPage()
    {
        pageNum--;
        if(pageNum <= 0)
        {
            pageHasPrev = false;
            pageHasNext = true;
        }
        else if (pageNum == 1)
        {
            pageHasPrev = false;
            pageHasNext = true;
        }
        else
        {
            pageHasPrev = true;
            pageHasNext = true;
        }
        setPaginationNumber();
        DoPaginationOnList();
    }
   
    public void nextPage()
    {
        pageNum++;
        pageHasPrev = true;
        pageHasFirst = true;
        setPaginationNumber();
        DoPaginationOnList();
    }
   
    public void lastPage()
    {
        pageNum = getTotalPages();
        pageHasPrev = true;
        pageHasNext = false;
        pageHasFirst = true;
        pageHasLast = false;
        setPaginationNumber();
        DoPaginationOnList();
    }
   
    public Integer getTotalPages()
    {
        if(System.Math.mod(lstAllOpportunity.size(), ROWS_PER_PAGE ) == 0)
            return lstAllOpportunity.size() / ROWS_PER_PAGE ;
        else
            return (lstAllOpportunity.size() / ROWS_PER_PAGE ) + 1;
    }
   
    public void setPaginationNumber()
    {
       strCurPosition = 'Page '+ string.valueof(pageNum)+' of ' + string.valueof(getTotalPages());
    }
}

Visualforce Page Code

<apex:page controller="clsCustomPagination" id="idPage">
    <apex:sectionHeader title="Custom Pagination Example" id="idSecHeader"/>
    <style>
        .Processing{
         position: fixed;
         background: url('/img/loading32.gif');
         background-repeat: no-repeat;
         background-position: center;
         width: 100%;
         height: 100%;
         z-index: 10004;
         left: 0%;
         top: 0%;
        }
    </style>
    <apex:form >
        <apex:actionStatus id="idStatus" startStyleClass="Processing" ></apex:actionStatus>
        <apex:pageBlock id="idPB">
            <apex:outputPanel id="pnlOpp">
                <apex:pageBlockTable value="{!lstPageOpportunity}" var="objOpp" id="idPBT">
                    <apex:column value="{!objOpp.Name}"/>
                    <apex:column value="{!objOpp.Account.Name}"/>
                    <apex:column value="{!objOpp.Amount}"/>
                    <apex:column value="{!objOpp.CloseDate}"/>
                </apex:pageBlockTable>
            </apex:outputPanel>
               
            <!-- Start  Pagination Functionality -->
            <apex:outputPanel id="PanelPagination" rendered="{!IF(lstPageOpportunity.size > 0,true,false)}">
                <div style="margin-left:40%;margin-top: 1%;">
                    <table>
                        <tr>
                            <td>
                                <apex:commandButton action="{!firstPage}" disabled="{!NOT(pageHasFirst)}" status="idStatus" id="idBtnFirst" rerender="pnlOpp,PanelPagination" value="|< First"/>
                                <apex:commandButton action="{!previousPage}" disabled="{!NOT(pageHasPrev)}" status="idStatus" id="idBtnPrev" rerender="pnlOpp,PanelPagination" value="Previous"/>
                            </td>
                            <td>
                                <span style="float:left;font-size: 12px !important;font-weight: bold;margin-top: 1.75%;">
                                    <apex:outputLabel id="pageposition" value="{!strCurPosition}"></apex:outputLabel>
                                </span>
                            </td>
                            <td>
                                <apex:commandButton action="{!nextPage}" disabled="{!NOT(pageHasNext)}" status="idStatus" id="idBtnNext" rerender="pnlOpp,PanelPagination" value="Next"/>
                                <apex:commandButton action="{!lastPage}" disabled="{!NOT(pageHasLast)}" status="idStatus" id="idBtnLast" rerender="pnlOpp,PanelPagination" value="Last >|"/>
                            </td>
                        </tr>
                    </table>
                </div>
            </apex:outputPanel>
            <!-- End  Pagination Functionality -->
        </apex:pageBlock>
    </apex:form>
</apex:page>

....and here we are with finale output.

No comments:

Post a Comment