Suche…


Einführung

Slaesforce StandardSetController enthält nur Liste von sObject. Es enthält keine Liste von Wrapper-Klassenobjekten. Der folgende Quellcode demonstriert die Verwendung von Paginating mit Wrapper Class im Außendienst.

Paginierungs-Controller

Codebeispiel: Beginnen Sie nun mit dem Erstellen des Paginierungscontrollers

public with sharing class Pagination {

}

Ich werde alle Kontakte in Form von Seitenumbruch anzeigen, und es sollte ein Kontrollkästchen für jeden Kontakt vorhanden sein, um den Kontakt auszuwählen oder die Auswahl aufzuheben, um einen Löschvorgang für Kontakte auszuführen. Ich muss also eine Wrapper-Klasse erstellen, um den Kontakt und die boolesche Variable zur Auswahl zu halten. Erstellen Sie zuerst die Wrapper-Klasse für den Controller Pagination Fügen Sie den folgenden Code in den Paginierungscontroller ein.

 public class contactWrapper{
        public Contact cont {get;set;}
        public Boolean isSelected{get;set;}
        public contactWrapper(contact c,Boolean s)
        {
            cont=c;
            isSelected=s;
        }
    }

Jetzt Daten in Apex abrufen, um mit Hilfe von StandardSetController zu Paginieren. Der StandardSetController ist ein äußerst leistungsfähiges Werkzeug mit integrierten Funktionen, mit dem Sie den benutzerdefinierten Code auf Ihren Visualforce-Seiten erheblich vereinfachen können. Da der Server nur die Daten für die angeforderte Seite zurückgibt, kann der StandardSetController den Ansichtsstatus erheblich reduzieren, insbesondere im Vergleich zum Ansichtsstatus, den Sie beim Verwenden von SOQL erhalten würden.

 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;
    }

Jetzt haben Sie die Kontakte in der Variable setCon. Immer wenn Sie für setCon.getRecords () angefordert haben, werden die ersten 10 Kontaktdatensätze von setCon abgerufen. Hier habe ich eine einfache Wrapper-Klasse erstellt, um Ihnen die Demo zu zeigen. Sie können je nach Anforderung Ihre eigene Wrapper-Klasse erstellen. Sie müssen jedoch immer wissen, dass ApexPages.StandardSetController nur Liste von sObject enthält. Die Liste der Wrapper-Klassenobjekte wird nicht gespeichert. Aus diesem Grund habe ich unten zusätzlichen Code geschrieben, um diese Zukunft auf andere Weise zu erreichen. Code unterhalb des Codes konvertieren Sie die Liste der Kontakte in die Liste der Wrapperklassenobjekte. Wenn Sie also Kontakte auf der Visual Force-Seite aufrufen, wird die Liste der Wrapperklassenobjekte angezeigt.

 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;
    }

Jetzt haben Sie Code zum Generieren von Ergebnissen geschrieben. Aber wie navigieren Sie über die Seite? Dies kann mit ApexPages.StandardSetController mit einem einfachen Schritt erledigt werden. Schauen Sie sich die Code-Schönheit des StandardSetControllers an. Keine Notwendigkeit, Seitennummer, Offset und Limit usw. einzuhalten. Verwenden Sie einfach die StandardSetController-Methoden. Kopieren Sie den folgenden Code in den Paginierungscontroller.

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 
    }

Sie haben es fast geschafft, die Kontakte zu paginieren. Letzte Methoden, die ich hinzugefügt habe, um meine gesamte Seitenfunktionalität zu erfüllen. Wie bereits erwähnt, haben wir ein zusätzliches Kontrollkästchen zur Auswahl des Kontakts und zum Löschen der ausgewählten Kontakte.

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;
    }


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow