खोज…


परिचय

Slaesforce StandardSetController की पकड़ केवल sObject की सूची है, यह रैपर क्लास ऑब्जेक्ट की होल्डलिस्ट नहीं होगी। नीचे स्रोत कोड बिक्री-बल में रैपर क्लास का उपयोग करके पेजिंग के उपयोग को दर्शाता है।

पेजिनेशन कंट्रोलर

कोड उदाहरण: अब पेजिनेशन कंट्रोलर बनाना शुरू करें

public with sharing class Pagination {

}

मैं पेजिनेशन के रूप में सभी संपर्कों को दिखाने जा रहा हूं और संपर्कों पर डिलीट ऑपरेशन करने के लिए प्रत्येक संपर्क के लिए प्रत्येक संपर्क के लिए एक चेकबॉक्स होना चाहिए। इसलिए मुझे संपर्क रखने के लिए एक रैपर क्लास बनाने की जरूरत है और चयन के लिए बूलियन वेरिएबल। सबसे पहले कंट्रोलर पेजिनेशन के लिए रैपर क्लास बनाएं और कोड को पेजिनेशन कंट्रोलर में डालें।

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

अब StandardSetController की मदद से एपेक्स में डेटा पुनः प्राप्त करना। StandardSetController अंतर्निहित कार्यक्षमता के साथ एक अत्यंत शक्तिशाली उपकरण है जिसका उपयोग आप अपने विज़ुअल पेज में कस्टम कोड को बहुत सरल बनाने के लिए कर सकते हैं। क्योंकि सर्वर अनुरोध किए जा रहे पृष्ठ के लिए केवल डेटा लौटाता है, StandardSetController दृश्य स्थिति को काफी कम कर सकता है, विशेष रूप से एसओक्यूएल का उपयोग करते समय आपको मिलने वाले दृश्य की तुलना में।

 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.getRecords () के लिए अनुरोध किया जाता है, यह सेटकॉन से पहले 10 कॉन्टेक्ट रिकॉर्ड्स को पुनः प्राप्त करेगा। यहाँ मैंने आपको डेमो दिखाने के लिए सरल आवरण वर्ग बनाया है। आप आवश्यकता के आधार पर अपना स्वयं का रैपर वर्ग बना सकते हैं। लेकिन हमेशा आपको पता होना चाहिए कि 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 तरीकों का उपयोग करें। पेजिंग कंट्रोलर में नीचे दिए गए कोड को कॉपी करें।

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 
    }

आपका लगभग संपर्क Paginating के साथ किया गया है। पिछले कुछ तरीके मैंने अपने पूरे पेज की कार्यक्षमता को पूरा करने के लिए जोड़े हैं। जैसा कि मैंने पहले उल्लेख किया है कि हमारे पास संपर्क चुनने के लिए अतिरिक्त चेकबॉक्स है और चयनित संपर्कों पर डिलीट ऑपरेशन करें।

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