Szukaj…


Wprowadzenie

Slaesforce StandardSetController zawiera tylko listę obiektów sObject, nie będzie zawierała listy obiektów klasy opakowania. Poniższy kod źródłowy pokazuje użycie Paginacji przy użyciu klasy opakowania w sprzedaży.

Kontroler paginacji

Przykład kodu: Zacznij teraz od utworzenia kontrolera paginacji

public with sharing class Pagination {

}

Pokażę wszystkie kontakty w formie paginacji i powinno być jedno pole wyboru dla każdego kontaktu do wybranego lub anuluj zaznaczenie kontaktu, aby wykonać operację usuwania kontaktów. Muszę więc utworzyć klasę opakowania, aby utrzymać kontakt i zmienną logiczną do wyboru. Najpierw utwórz klasę opakowania dla kontrolera paginacji Wstaw poniższy kod do kontrolera paginacji.

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

Teraz pobieranie danych w wierzchołku do paginacji za pomocą StandardSetController. StandardSetController to niezwykle potężne narzędzie z wbudowanymi funkcjami, których można użyć do znacznego uproszczenia niestandardowego kodu na stronach Visualforce. Ponieważ serwer zwraca tylko dane dla żądanej strony, StandardSetController może znacznie zmniejszyć stan widoku, szczególnie w porównaniu do stanu widoku, który można uzyskać podczas korzystania z 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;
    }

Teraz masz kontakty w zmiennej setCon, za każdym razem, gdy poprosisz o setCon.getRecords (), pobierze pierwsze 10 rekordów kontaktów z setCon. Tutaj utworzyłem prostą klasę opakowania, aby pokazać wersję demonstracyjną. Możesz utworzyć własną klasę opakowania na podstawie wymagań. Ale zawsze musisz pamiętać, że ApexPages.StandardSetController przechowuje tylko listę obiektów sObject, nie będzie przechowywać listy obiektów klasy opakowania. Dlatego napisałem dodatkowy kod poniżej, aby osiągnąć tę przyszłość w inny sposób. Poniżej kodu konwertuj listę kontaktów na listę obiektów klasy opakowania, aby za każdym razem, gdy wywołasz kontakty w wizualnej stronie siły, otrzyma listę obiektu klasy opakowania.

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

Teraz napisałeś kod do generowania wyników Ale jak poruszać się po stronie? Można to zrobić w prosty sposób za pomocą ApexPages.StandardSetController.Spójrz na piękno kodu StandardSetController, nie musisz utrzymywać numeru strony, przesunięcia i limitu itp. Wystarczy użyć metod StandardSetController. Skopiuj poniższy kod do kontrolera paginacji.

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 
    }

Prawie skończyłeś z Paginacją kontaktów. Kilka ostatnich metod, które dodałem, aby wypełnić całą funkcjonalność strony. Jak wspomniałem wcześniej, mamy dodatkowe pole wyboru do wyboru kontaktu i wykonania operacji usuwania wybranych kontaktów.

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow