Search Contact Records Using Pagination in apex

Requirement : Create a visual force page create a TextBox for Last Name and another is Mobile Phone when User enter the value then corresponding data should be visible in a table

Solution:

VFPageCode

<apex:page controller="ContactMultipleSearchWithPagenationCLS" action="{!searchcon}">
     <script type="text/javascript">
        window.onload=function() {
        // document.getElementById("{!$Component.thePb.thepbs.conName}").focus();
        }   
    </script>
     <apex:form >
        <apex:pageBlock id="thePb" title="Contact Details To Search">
            <apex:pageblockSection id="thepbs">

                <apex:inputField value="{!con.LastName}" required="false" id="conName"/>
                <apex:inputfield value="{!con.MobilePhone}"/>
            </apex:pageblockSection>
            
            <apex:pageblockButtons location="bottom">
                <apex:commandButton value="Search" action="{!searchcon}" />
            </apex:pageblockButtons> 
        
        </apex:pageBlock>

        <apex:pageBlock title="Contact Details" id="noRec" rendered="{! IF( contactList != null && contactList.size ==0 , true, false)}" >
            <apex:outputPanel >
                <h1>No Records Found </h1>
            </apex:outputPanel>
        </apex:pageBlock>


        <apex:pageBlock title="Contact Details" id="details" rendered="{! IF( contactList != null && contactList.size >0, true, false)}" >

            <apex:pageBlockTable value="{!contactList}" var="c">
                <apex:column headerValue="conount Name">
                <apex:outputLink target="_blank" value="/{!c.id}">{!c.LastName}</apex:outputLink> 
                </apex:column>   
                <!--  If you want facet style you can add like this.
                <apex:column >
                <apex:facet name="header">Link Name</apex:facet>
                <apex:outputLink target="_blank" value="/{!c.id}">{!c.LastName}</apex:outputLink> 
                </apex:column>
                -->
                <apex:column value="{!c.MobilePhone}" headerValue="Mobile Phone"/>  
                <apex:column value="{!c.Email}" headerValue="Email"/>  

            </apex:pageBlockTable>

            <apex:pageblockButtons >
                <apex:commandButton value="First Page" rerender="details" action="{!FirstPage}" disabled="{!prev}"/>
                <apex:commandButton value="Previous" rerender="details" action="{!previous}" disabled="{!prev}"/>
                <apex:commandButton value="Next" rerender="details" action="{!next}" disabled="{!nxt}"/>
                <apex:commandButton value="Last Page" rerender="details" action="{!LastPage}" disabled="{!nxt}"/>
            </apex:pageblockButtons>

        </apex:pageBlock>

     </apex:form>
</apex:page>


ControllerCode

public with sharing class ContactMultipleSearchWithPagenationCLS {
    public Contact con{get;set;}
    public List<Contact> ContactList {get;set;}
    // create a list of strings to hold the conditions
    List<string> conditions = new List<string>();
    private integer totalRecs = 0;
    private integer OffsetSize = 0;
    private integer LimitSize= 10;

    public ContactMultipleSearchWithPagenationCLS(){
    system.debug('==>ContactMultipleSearchWithPagenationCLS  is calling==>');
     con = new Contact();
     //ContactList  = new List<Contact>();
    }

    public void searchcon(){
        totalRecs = 0;
        OffsetSize = 0;
        if(ContactList !=null && ContactList.size()>0){
            ContactList=null;
        }
        
        searchContacts ();
        conditions.clear();
    }


    public Void searchContacts(){

        System.debug('Total Records is ==>'+totalRecs);
        System.debug('OffsetSize is ==>'+OffsetSize);

        if(ContactList != null && !ContactList.isEmpty()){
          ContactList.clear();
        }
         String strQuery ='SELECT Id,Name,LastName,MobilePhone,Email From Contact';
         


        if(con.LastName !=null && con.LastName !=''){
            conditions.add('LastName Like \'%' +con.LastName +'%\' ');
        }
        
        if(con.MobilePhone !=null && con.MobilePhone !=''){
            conditions.add('MobilePhone Like\'%' +con.MobilePhone +'%\' ');
        }

        if (conditions.size() > 0) {
            strQuery += '  WHERE ' + conditions[0];
            for (Integer i = 1; i < conditions.size(); i++)
                    strQuery += '  AND ' + conditions[i];
        }
        
        if(totalRecs !=null && totalRecs ==0){
            List<Contact> conTemp = Database.query(strQuery);
            totalRecs = (conTemp !=null &&conTemp.size()>0)?conTemp.size():0;
        }

        system.debug('strQuery ==>'+strQuery );
        // add sort and limits at the end  
        strQuery += ' ORDER BY Name  ASC, CreatedDate DESC LIMIT :LimitSize OFFSET :OffsetSize';

        ContactList  =Database.query(strQuery);
          
           

          //conditions.clear();
          //return ContactList.size();
    }

    public void FirstPage()
    {
        OffsetSize = 0;
        searchContacts();
    }
    public void previous()
    {
        OffsetSize = (OffsetSize-LimitSize);
        searchContacts();
    }
    public void next()
    {
        OffsetSize = OffsetSize + LimitSize;
        searchContacts();
    }
    public void LastPage()
    {
        OffsetSize = totalrecs - math.mod(totalRecs,LimitSize);
        searchContacts();
    }
    public boolean getprev()
    {

        if(OffsetSize == 0){

            return true;
        }
        else {

            return false;
        }
    }
    public boolean getnxt()
    {
        if((OffsetSize + LimitSize) > totalRecs){

            return true;
        }
        else {

            return false;
        }
    }


}


OutPut:





Thanks,
Sumit Shukla
skypeId:shuklasumit1
email: sumitshukla.mca@gmail.com



Comments

Popular posts from this blog

Salesforce Spring 16 Release Exam (Maintenance Exam Q&A) for Developer 201 Admin

Show Hyper Link On Add Error in Salesforce Trigger

Show the Success Message before Redirecting the Detail page on Visualforce Page