Salesforce
Navigation de page avec l'aide de la classe wrapper de liste dans force de vente.
Recherche…
Introduction
Slaesforce StandardSetController ne contient que la liste de sObject, il ne contiendra pas la liste des objets de classe wrapper. Le code source ci-dessous illustre l'utilisation de la fonction Pagination en utilisant Wrapper Class dans force de vente.
Contrôleur de pagination
Exemple de code: maintenant, commencez par créer le contrôleur de pagination
public with sharing class Pagination {
}
Je vais montrer tous les contacts sous la forme de pagination et il devrait y avoir une case à cocher pour chaque contact à sélectionner ou désélectionner le contact pour effectuer une opération de suppression sur les contacts. Donc, je dois créer une classe wrapper pour conserver les variables booléennes et de contact pour la sélection. Créez d'abord la classe Wrapper pour la pagination du contrôleur. Insérez le code ci-dessous dans le contrôleur de pagination.
public class contactWrapper{
public Contact cont {get;set;}
public Boolean isSelected{get;set;}
public contactWrapper(contact c,Boolean s)
{
cont=c;
isSelected=s;
}
}
Récupération des données dans Apex à paginer à l'aide de StandardSetController. Le StandardSetController est un outil extrêmement puissant avec une fonctionnalité intégrée que vous pouvez utiliser pour simplifier considérablement le code personnalisé dans vos pages Visualforce. Étant donné que le serveur ne renvoie que les données de la page demandée, StandardSetController peut réduire considérablement l'état d'affichage, notamment par rapport à l'état d'affichage que vous obtiendriez lors de l'utilisation de SOQL.
Public Integer noOfRecords{get; set;} // Future reference in Visual force Page
Public Integer size{get;set;} // Future reference in Visual force Page
public final Integer Page_Size=10; // Number records in a Page should be displayed
public ApexPages.StandardSetController setCon {
get{
if(setCon == null){
size=Page_Size;
string queryString = 'Select Id,Name, Email, Birthdate, Phone, MobilePhone from Contact order by Name';
setCon = new ApexPages.StandardSetController(Database.getQueryLocator(queryString));
setCon.setPageSize(size);
noOfRecords = setCon.getResultSize();
}
return setCon;
}set;
}
Maintenant, vous avez les contacts dans la variable setCon, à chaque fois que vous êtes invité à définir setCon.getRecords (), il récupérera les 10 premiers enregistrements de contact de setCon. Ici, j'ai créer une classe de wrapper simple pour vous montrer la démo. Vous pouvez créer votre propre classe wrapper en fonction des besoins. Mais vous devez toujours être conscient que ApexPages.StandardSetController ne contient que List of sObject, il ne contiendra pas la liste des objets de classe wrapper. C'est la raison pour laquelle j'ai écrit un code supplémentaire ci-dessous pour accomplir ce futur différemment. Le code ci-dessous convertit la liste de contacts en liste d'objets de classe wrapper. Ainsi, chaque fois que vous appelez des contacts dans la page de force visuelle, elle recevra la liste des objets de classe wrapper.
public list<contactWrapper> contWpr{get;set;}
public set<id> selectedContactIds{ get;private set;} // to maintain state of the selected contact
// through out paginating
public Pagination() {
selectedContactIds=new set<id>();
}
Public list<contactWrapper> getContacts(){
contWpr =new list<contactWrapper>();
for(Contact c: (List<Contact>)setCon.getRecords())
if(selectedContactIds.contains(c.id))
contWpr.add(new contactWrapper(c,true));
else
contWpr.add(new contactWrapper(c,false));
return contWpr;
}
Vous avez maintenant un code écrit pour générer le résultat Mais comment naviguer sur la page? Cela peut être fait avec une étape facile avec ApexPages.StandardSetController.Regardez la beauté du code ci-dessous de StandardSetController, Pas besoin de maintenir le numéro de page, l'offset et la limite, etc. Il suffit d'utiliser les méthodes StandardSetController. Copiez le code ci-dessous dans le contrôleur Pagination.
public Boolean hasNext {
get {
return setCon.getHasNext();
}
set;
}
public Boolean hasPrevious {
get {
return setCon.getHasPrevious();
}
set;
}
public Integer pageNumber {
get {
return setCon.getPageNumber();
}
set;
}
public void first() {
setCon.first();
// do you operation here
}
public void last() {
setCon.last();
// do you operation here
}
public void previous() {
setCon.previous();
// do you operation here
}
public void next() {
setCon.next();
// do you operation here
}
Votre presque fini avec paginer les contacts. Les dernières méthodes que j'ai ajoutées pour remplir l'ensemble de mes fonctionnalités. Comme je l'ai mentionné précédemment, nous avons une case à cocher supplémentaire pour sélectionner un contact et effectuer une opération de suppression sur les contacts sélectionnés.
public void contactSelection()
{
Id id=(Id)ApexPages.currentPage().getParameters().get('cId');
if(selectedContactIds.contains(id))
selectedContactIds.remove(id);
else
selectedContactIds.add(id);
}
public void deleteContacts()
{
List<contact> contactToDelete=[select id from contact where id in :selectedContactIds];
if(contactToDelete.size()!=0) // if(!contactToDelete.isEmpty()) // Best Practice
{
try { delete contactToDelete; } // You may get Exception if you try to delete the
// related contact ,include try block to avoid error.
catch(exception ex){ System.debug(ex); }
refresh();
}
}
public pageReference refresh() {
setCon = null;
selectedContactIds=new set<id>();
getContacts();
setCon.setPageNumber(1);
return null;
}