Buscar..


Introducción

Slaesforce StandardSetController solo mantiene la lista de sObject, no contiene la lista de objetos de la clase contenedora. A continuación, el código fuente muestra el uso de Paginating utilizando Wrapper Class en sales-force.

Controlador de paginación

Ejemplo de código: ahora comience con la creación del controlador de paginación

public with sharing class Pagination {

}

Voy a mostrar todos los contactos en forma de paginación y debería haber una casilla de verificación para cada contacto a seleccionar o deseleccionar contacto para realizar una operación de eliminación en los contactos. Así que necesito crear una clase de contenedor para mantener el contacto y la variable booleana para la selección. Primero cree la clase Wrapper para el controlador Paginación Inserte debajo del código en el controlador de paginación.

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

Ahora recuperando datos en Apex to Paginate con la ayuda de StandardSetController. El StandardSetController es una herramienta extremadamente poderosa con una funcionalidad incorporada que puede utilizar para simplificar enormemente el código personalizado en sus páginas de Visualforce. Debido a que el servidor solo devuelve los datos para la página solicitada, el StandardSetController puede reducir significativamente el estado de vista, especialmente en comparación con el estado de vista que obtendría al usar 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;
    }

Ahora tiene los contactos en la variable setCon, siempre que solicite setCon.getRecords (), recuperará los primeros 10 registros de contacto de la setCon. Aquí tengo crear una clase envoltura simple para mostrarle la demostración. Puede crear su propia clase de envoltura según el requisito. Pero siempre debe tener en cuenta que ApexPages.StandardSetController contiene solo la Lista de sObject, no contendrá la lista de objetos de la clase de contenedor. Esa es la razón por la que he escrito un código adicional a continuación para lograr este futuro de manera diferente. A continuación, el código convierte la lista de contactos en una lista de objetos de la clase envoltura, de modo que, cuando llame a los contactos en la página de fuerza visual, recibirá la lista de objetos de la clase envoltura.

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

Ahora ha escrito un código para generar resultados. ¿Pero cómo navegar por la página? Esto se puede hacer con un paso sencillo con ApexPages.StandardSetController. Mire la siguiente belleza del código del StandardSetController, No es necesario mantener el número de página, el desplazamiento y el límite, etc. Solo use los métodos del StandardSetController. Copie el siguiente código en el controlador de paginación.

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 
    }

Ya casi terminas con Paginar los contactos. Últimos pocos métodos que he agregado para cumplir con toda la funcionalidad de mi página. Como mencioné anteriormente, tenemos una casilla de verificación adicional para seleccionar un contacto y realizar una operación de eliminación en los contactos seleccionados.

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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow