Hello friends, In this tutorial, I'll let you know a working example of a dynamic search in a Visualforce page. The results are shown in a grid with pagination. In this example, there are two fields to filter the data also you can delete multiple records at a time by selecting them using checkbox. So let's start.
Warning: In this example, only those accounts are deleted that are not in a relationship(Lookup's or Master-details) with other salesforce sObject records.
After completing this tutorial you'll able to:
- How to create pagination in a Visualforce page?
- Select record during pagination to delete.
- How to apply search functionality in pagination?
Step 1: Login to your Salesforce Org. and open developer console.
Step 2: Navigate to File | New | Apex Class and create an Apex controller called PaginationCheckboxHandler and replace the following code.
PaginationCheckboxHandler.apxc
public with sharing class PaginationCheckboxHandler { public Account acc{get;set;} public List<Account> accountList {get;set;} public Integer icount{get;set;} List<string> conditions = new List<string>(); private integer totalRecs = 0; private integer OffsetSize = 0; private integer LimitSize= 5; //Constructor public PaginationCheckboxHandler(){ acc = new Account(); } public void searchAcc(){ totalRecs = 0; OffsetSize = 0; if(accountList !=null && accountList.size()>0){ accountList=null; } searchAccounts (); conditions.clear(); } public Void searchAccounts(){ if(accountList != null && !accountList.isEmpty()){ accountList.clear(); } String strQuery ='SELECT Id,Name,AccountNumber,CreatedDate,Phone,Website,Industry,AnnualRevenue From Account WHERE Id!=null '; if(acc.Name !=null && acc.Name !=''){ conditions.add('Name Like \'%' +acc.Name +'%\' '); } if(acc.AccountNumber !=null && acc.AccountNumber !=''){ conditions.add('AccountNumber Like\'%' +acc.AccountNumber +'%\' '); } if (conditions.size() > 0) { strQuery += ' AND ' + conditions[0]; for (Integer i = 1; i < conditions.size(); i++) strQuery += ' AND ' + conditions[i]; } if(totalRecs !=null && totalRecs ==0){ System.debug('strQuery>>'+strQuery); List<Account> accTemp = Database.query(strQuery); totalRecs = (accTemp !=null &&accTemp.size()>0)?accTemp.size():0; } strQuery += ' ORDER BY Name ASC, CreatedDate DESC LIMIT :LimitSize OFFSET :OffsetSize'; accountList =Database.query(strQuery); } @RemoteAction public static boolean delAccount(String jsonString){ boolean flag=false; try{ List<String> lstId=(List<String>)JSON.deserialize(jsonString, List<String>.class); System.debug('lstId>>'+lstId); List<Account> lstAccount=new List<Account>(); for(String s:lstId){ Account a=new Account(); a.Id=s; lstAccount.add(a); } if(lstAccount.size()>0){ delete lstAccount; } flag=true; } catch(Exception ex){ } return flag; } public void FirstPage(){ OffsetSize = 0; searchAccounts(); } public void previous(){ OffsetSize = (OffsetSize-LimitSize); searchAccounts(); } public void next(){ OffsetSize = OffsetSize + LimitSize; searchAccounts(); } public void LastPage(){ OffsetSize = totalrecs - math.mod(totalRecs,LimitSize); searchAccounts(); } public boolean getprev(){ if(OffsetSize == 0){ return true; } else { return false; } } public boolean getnxt(){ if((OffsetSize + LimitSize) > totalRecs){ return true; } else { return false; } } }
Step 3: Navigate to File | New | Visualforce Page and create a new Visualforce Page called PaginationWithoutCheckbox and replace the following markup.
PaginationWithoutCheckbox.vfp
<apex:page controller="PaginationCheckboxHandler" action="{!searchAcc}" sidebar="false" showHeader="false"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> <script type="text/javascript"> window.onload=function() { // document.getElementById("{!$Component.thePb.thepbs.accName}").focus(); } </script> <apex:form> <apex:pageBlock id="thePb" title="Account Details To Search"> <apex:pageblockSection id="thepbs"> <apex:inputField value="{!acc.Name}" required="false" id="accName"/> <apex:inputfield value="{!acc.accountNumber}"/> </apex:pageblockSection> <apex:pageblockButtons location="bottom" id="thepbb"> <apex:commandButton value="Search" action="{!searchAcc}" id="btnSearch" /> <apex:commandButton value="Deleted" onclick="getSelected()" rerender="thePb"/> </apex:pageblockButtons> </apex:pageBlock> <apex:pageBlock title="Account Details" id="noRec" rendered="{! IF( accountList != null && accountList.size ==0 , true, false)}" > <apex:outputPanel > <h1>No Records Found </h1> </apex:outputPanel> </apex:pageBlock> <apex:pageBlock title="Account Details" id="details" rendered="{! IF( accountList != null && accountList.size >0, true, false)}" > <table width="100%" id="tbl"> <tr> <td><input type="checkbox" id="selectAll" onclick="selectAllCheckboxes(this,'inputId')"/></td> <!--<td></td>--> <td>Name</td> <td>Account Number</td> <td>Industry</td> <td>Phone</td> </tr> <tbody id="tblbody"> <apex:repeat value="{!accountList}" var="a"> <tr> <td> <input type="checkbox" value="{!a.Id}" id="inputId"/></td> <!--<td><a href="#" onclick="return reject('{!a.Id}')">Reject</a></td>--> <td><apex:outputLink target="_blank" value="/{!a.id}">{!a.Name}</apex:outputLink></td> <td>{!a.accountNumber}</td> <td>{!a.Industry}</td> <td>{!a.Phone}</td> </tr> </apex:repeat> </tbody> </table> <apex:pageblockButtons > <apex:commandButton value="First Page" rerender="details" action="{!FirstPage}" disabled="{!prev}" oncomplete="uncheck()" /> <apex:commandButton value="Previous" rerender="details" action="{!previous}" disabled="{!prev}" oncomplete="uncheck()"/> <apex:commandButton value="Next" rerender="details" action="{!next}" disabled="{!nxt}" oncomplete="uncheck()"/> <apex:commandButton value="Last Page" rerender="details" action="{!LastPage}" disabled="{!nxt}" oncomplete="uncheck()"/> </apex:pageblockButtons> </apex:pageBlock> <script> function uncheck(){ document.getElementById('selectAll').checked=false; } function selectAllCheckboxes(obj,receivedInputID){ var inputCheckBox = document.getElementsByTagName("input"); for(var i=0; i<inputCheckBox.length; i++){ if(inputCheckBox[i].id.indexOf(receivedInputID)!=-1){ inputCheckBox[i].checked = obj.checked; } } } function getSelected(){ var ids=[]; $('#tblbody').find('input[type="checkbox"]:checked').each(function () { ids.push($(this).val()); }); if(ids.length>0){ var idsstring=JSON.stringify(ids); PaginationCheckboxHandler.delAccount(idsstring,function(result,event){ if(event.status){ if(result){ document.getElementById("{!$Component.thePb.thepbb.btnSearch}").click(); } else{ alert('Record is related with other records'); } } }); } } function reject(Id){ alert(Id); } </script> </apex:form> </apex:page>
Output:
See also:
- Pagination without Standard Controller in Visualforce page
- Remote Action in Visualforce Page
- Set PDF filename in Visualforce Page
Conclusion:
Hope you like this tutorial, for any query or suggestions
please feel free to comment.
Thank you.
0 Comments
Post a Comment