Поиск…


Вступление

Slaesforce StandardSetController содержит только список sObject, он не будет содержать список объектов класса-оболочки. Ниже исходного кода показано использование Paginating с использованием класса Wrapper в области продаж.

Контроллер разбиения на страницы

Пример кода: теперь начните с создания контроллера разбиения на страницы

public with sharing class Pagination {

}

я собираюсь показать все контакты в форме разбивки на страницы и должен быть один флажок для каждого контакта для выбранного или отмены выбора контакта для выполнения операции удаления контактов. Поэтому мне нужно создать класс-оболочку для сохранения контакта и Boolean Variable для выбора. Сначала создайте класс Wrapper для контроллера Pagination Вставьте под кодом в 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;
        }
    }

Теперь извлечение данных в Apex в Paginate с помощью StandardSetController. StandardSetController - чрезвычайно мощный инструмент со встроенными функциями, которые вы можете использовать, чтобы значительно упростить собственный код на ваших страницах Visualforce. Поскольку сервер возвращает только данные для запрашиваемой страницы, StandardSetController может значительно уменьшить состояние представления, особенно по сравнению с состоянием представления, которое вы получите при использовании 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;
    }

Теперь у вас есть контакты в переменной SetCon, всякий раз, когда вы запрашиваете для setCon.getRecords (), он будет извлекать первые 10 записей контактов из setCon. Здесь я создал простой класс-оболочку, чтобы показать вам демоверсию. Вы можете создать свой собственный класс-оболочку на основе требования. Но всегда вам нужно знать, что ApexPages.StandardSetController содержит только список sObject, он не будет содержать список объектов класса-оболочки. Вот почему я написал дополнительный код ниже для достижения этого будущего по-разному. Ниже код конвертирует список контактов в список объектов класса-обертки, поэтому, когда вы вызываете контакты на странице визуальной силы, он получает список объектов класса-оболочки.

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

Теперь вы написали код для генерации результата. Но как перемещаться по странице? Это можно сделать с помощью простого шага с помощью ApexPages.StandardSetController.Посмотрите на красоту кода StandardSetController, не нужно поддерживать номер страницы, смещение и ограничение и т. Д. Просто используйте методы StandardSetController. Скопируйте приведенный ниже код в 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 
    }

Твой почти закончил с разбивкой по страницам. Последние несколько методов, которые я добавил для выполнения всей моей функциональности страницы. Как я упоминал ранее, у нас есть дополнительный флажок для выбора контакта и выполнения операции удаления для выбранных контактов.

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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow