Sök…


Introduktion

Slaesforce StandardSetController innehar endast Lista över sObject, Det kommer inte att innehålla listan över omslagsklassobjekt. Nedan visar källkoden användningen av Paginering med Wrapper Class i försäljningsstyrka.

Paginationskontroller

Kodexempel: Börja nu med att skapa Pagination Controller

public with sharing class Pagination {

}

Jag ska visa alla kontakter i form av pagination och det bör finnas en kryssruta för varje kontakt som ska väljas eller avmarkera kontakt för att utföra radering av kontakter. Så jag måste skapa en omslagsklass för att hålla kontakt och Boolean Variable för val. Skapa först Wrapper-klassen för Pagination av controller Kontrollera att du sätter in nedanstående kod i pagination-controller.

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

Hämta nu data i Apex för att paginera med hjälp av StandardSetController. StandardSetController är ett extremt kraftfullt verktyg med inbyggd funktionalitet som du kan använda för att förenkla den anpassade koden på dina Visualforce-sidor. Eftersom servern bara returnerar data för sidan som begärs kan StandardSetController reducera visningsläget avsevärt, särskilt jämfört med det visningsläge du skulle få när du använder 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;
    }

Nu har du kontakterna i Variable setCon, när du begär det för setCon.getRecords () kommer det att hämta de första 10 kontaktposterna från setCon. Här har jag skapat en enkel omslagsklass för att visa dig demot. Du kan skapa din egen omslagsklass baserad på krav. Men alltid måste du vara medveten om att ApexPages.StandardSetController bara innehar Lista över sObject, det kommer inte att innehålla listan med omslagsklassobjekt. Det är anledningen till att jag har skrivit extra kod nedan för att åstadkomma denna framtid på olika sätt. Nedan kodar konvertera lista över kontakter till lista över wrapper klassobjekt, så att när du någonsin kallar kontakter på en visuell kraft sida kommer den att få listan med wrapper klassobjekt.

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

Nu har du skrivit kod för att generera resultat Men hur navigerar du över sidan? Detta kan göras med enkla steg med ApexPages.StandardSetController.Look på koden nedan för StandardSetController, Inget behov av att behålla sidnummer, förskjutning och begränsning osv. Använd bara StandardSetController-metoderna. Kopiera nedanstående kod till Pagination controller.

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 
    }

Du är nästan klar med att paginera kontakterna. De sista metoderna har jag lagt till för att fullfölja hela sidans funktionalitet. Som jag nämnde tidigare har vi ytterligare kryssrutor för att välja kontakt och utföra radering av utvalda kontakter.

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow