function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
pavithra v 5pavithra v 5 

Challenge Not yet complete... here's what's wrong: Ensure that you implement all the pagination methods using the corresponding StandardSetController methods.

7.Challenge Not yet complete... here's what's wrong: 
Ensure that you implement all the pagination methods using the corresponding StandardSetController methods.
/**
 * @name OrderExtension
 * @description This class is provided for you to facilitate the Super Badge
**/
public class OrderExtension {

    public Order orderRecord {get;set;}
    public List<OrderItem> orderItemList {get;set;}
    public String selectedFamily {get;set;}
    public List<chartHelper.chartData> pieData {get;set;}
    public Decimal total {get;set;}
  
    public Map<Id,OrderItem> orderItemMap;
    ApexPages.StandardSetController standardSetController;

    public OrderExtension(ApexPages.StandardController standardController){
        orderRecord = (Order)standardController.getRecord();
        orderItemMap = new Map<id,OrderItem>();
        if ( orderRecord.Id != null ){
            orderRecord = queryOrderRecord(orderRecord.Id);
        }
        orderItemList = new List<OrderItem>();
        OrderItemList.addAll(orderRecord.OrderItems);
        set<Id> p2ids = new set<Id>();
        for(OrderItem oitem : OrderItemList){
            p2ids.add(oitem.PriceBookEntryId);
        }
        List<PriceBookEntry> p2List = new List<PriceBookEntry>();
        if(p2Ids.size()>0){
            p2List = [select id from PriceBookEntry where id IN: p2Ids];
        }
        standardSetController= new ApexPages.StandardSetController(p2List);
        standardSetController.setPageSize(Constants.DEFAULT_ROWS);
     
    }
    

    public void resetstandardSetController() {
        String query = 'SELECT Name, Product2.Family, Product2.Name, Product2Id, UnitPrice, Product2.Quantity_Remaining__c'
                     + '  FROM PricebookEntry WHERE IsActive = TRUE';

        if (selectedFamily != null && selectedFamily != Constants.SELECT_ONE) {
            query += ' AND Product2.Family = \'' + selectedFamily + '\'';
        }
        query += ' ORDER BY Name';

        standardSetController= new ApexPages.StandardSetController(Database.getQueryLocator(query));
        if(StandardSetController== null){
            StandardSetController= new ApexPages.StandardSetController(Database.getQueryLocator([SELECT Product2Id, Product2.Family, Product2.Name, 
Product2.Quantity_Remaining__c, UnitPrice FROM PricebookEntry ]));
            StandardSetController.setPageSize(Constants.DEFAULT_ROWS);
        }
        
    }

    //ToDo: Implement your own method to populate orderItemList
    //  that you will call after pagination and/or family selection
   public void GetOrderItems() {
        orderItemList = new List<OrderItem>();
        for (SObject obj : standardSetController.getRecords()) {
            PricebookEntry pbe = (PricebookEntry)obj;

            if (orderItemMap.containsKey(pbe.Product2Id)) {
                orderItemList.add(orderItemMap.get(pbe.Product2Id));
            } else {
                orderItemList.add(new OrderItem(
                    PricebookEntryId=pbe.Id,
                    Product2Id=pbe.Product2Id,
                    UnitPrice=pbe.UnitPrice,
                    Quantity=0,
                    Product2=pbe.Product2
                ));
            }
        }
    }


    /**
     * @name OnFieldChange
     * @description
    **/
    public void onFieldChange(){
        //ToDo: Implement logic to store the values changed on the page
        for (OrderItem oi : orderItemList) {
            orderItemMap.put(oi.PricebookEntryId, oi);
        }

        //      and populate pieData
        pieData = null;
        total = 0;
        for (OrderItem oi : orderItemMap.values()) {
            if (oi.Quantity > 0) {
                if (null == pieData) {
                    pieData = new List<chartHelper.ChartData>();
                }
                pieData.add(new chartHelper.ChartData(oi.Product2.Name, oi.Quantity * oi.UnitPrice));
                //      and populate total
                total += oi.UnitPrice * oi.Quantity;
            }

        }

    }

    /**
     * @name SelectFamily
     * @description
    **/
    public void selectFamily(){
        //ToDo: Implement logic to filter based on the selected product family
        resetstandardSetController();
        GetOrderItems();
    }

    /**
     * @name Save
     * @description
    **/
    public void save(){
        //ToDo: Implement logic to save the Order and populated OrderItems
        System.Savepoint sp = Database.setSavepoint();
        try {
            if (null == orderRecord.Pricebook2Id) {
                orderRecord.Pricebook2Id = Constants.STANDARD_PRICEBOOK_ID;
            }
            upsert orderRecord;

            List<OrderItem> orderItemsToUpsert = new List<OrderItem>();
            List<OrderItem> orderItemsToDelete = new List<OrderItem>();
            system.debug('@@@@@@@@@@@@@@@#######'+orderItemMap.values());
            for (OrderItem oi : orderItemMap.values()) {
                if (oi.Quantity > 0) {
                    if (null == oi.OrderId) {
                        oi.OrderId = orderRecord.Id;
                    }
                    orderItemsToUpsert.add(oi);
                } else if (oi.Id != null) {
                    orderItemsToDelete.add(oi);
                }
            }
            if(orderItemsToUpsert.size()>0)
            upsert orderItemsToUpsert;
            if(orderItemsToDelete.size()>0)
            delete orderItemsToDelete;
        } catch (Exception e) {
            Database.rollback(sp);
            apexPages.addMessage(new ApexPages.message(ApexPages.Severity.INFO,Constants.ERROR_MESSAGE));
        }
    }


    /**
     * @name First
     * @description
    **/
    public void First(){      
       standardSetController.first();
       GetOrderItems();
    }

    /**
     * @name Next
     * @description
    **/
    public void Next(){   
       standardSetController.next();
        GetOrderItems();
    }

    /**
     * @name Previous
     * @description
    **/
    public void Previous(){      
        standardSetController.previous();
        GetOrderItems();
    }

    /**
     * @name Last
     * @description
    **/
    public void Last(){
        standardSetController.last();
        GetOrderItems();
    }
  /**
     * @name GetHasPrevious
     * @description
    **/
   public Boolean GetHasPrevious(){
        return standardSetController.gethasprevious();
    }

    /**
     * @name GetHasNext
     * @description
    **/
   public Boolean GetHasNext(){
        return standardSetController.gethasnext();
    }

    /**
     * @name GetTotalPages
     * @description
    **/
  public Integer GetTotalPages(){
        Integer totalPages = (Integer)Math.ceil(standardSetController.getResultSize() / (Decimal)Constants.DEFAULT_ROWS);
        System.debug('############ totalPages: ' + totalPages);
        return totalPages;
    }

    /**
    * @name GetPageNumber
     * @description
    **/
    public Integer GetPageNumber(){
        return standardSetController.getpagenumber();
    }

    /**
     * @name GetFamilyOptions
     * @description
    **/
    public List<SelectOption> GetFamilyOptions() {
        List<SelectOption> options = new List<SelectOption>{
            new SelectOption(Constants.SELECT_ONE, Constants.SELECT_ONE)
        };

        for (Schema.PicklistEntry ple : Constants.PRODUCT_FAMILY) {
            options.add(new SelectOption(ple.getValue(), ple.getLabel()));
        }
        return options;
    }
    

    /**
     * @name QueryOrderRecord
     * @description
    **/
    public static Order QueryOrderRecord(Id orderId){
     return [
        SELECT Id, AccountId, EffectiveDate, Name, Status, Pricebook2Id,
                (
                    SELECT Id, OrderId, Quantity, UnitPrice, PricebookEntryId, Product2Id,
                         Product2.Name, Product2.Family, Product2.Quantity_Remaining__c
                    FROM OrderItems where PricebookEntry.isActive = true
                )
            FROM Order WHERE Id = :orderId
            ];
    }

}
Raj VakatiRaj Vakati
Use this code
 
/**
 * @name OrderExtension
 * @description This class is provided for you to facilitate the Super Badge
**/
public class OrderExtension {

    public Order orderRecord {get;set;}
    public List<OrderItem> orderItemList {get;set;}
    public String selectedFamily {get;set;}
    public List<chartHelper.chartData> pieData {get;set;}
    public Decimal total {get;set;}

    public Map<Id,OrderItem> orderItemMap;
    ApexPages.StandardSetController standardSetController;

    public OrderExtension(ApexPages.StandardController standardController){
        orderRecord = (Order)standardController.getRecord();
        orderItemMap = new Map<id,OrderItem>();
        if ( orderRecord.Id != null ){
            orderRecord = queryOrderRecord(orderRecord.Id);
        }
        loadPaginationData();
        total = 0;
        pieData = new List<chartHelper.chartData>();
        //loop through the order Items for the orderRecord
        for(OrderItem item : orderRecord.OrderItems){
            orderItemMap.put(item.Product2Id,item);
            if(item.Quantity > 0){
                pieData.add(new ChartHelper.chartData(item.Product2.Name,item.Quantity * item.UnitPrice));
                total += item.Quantity * item.UnitPrice;
            }
        }
    }

    public void loadPaginationData(){
        String query = 'SELECT Name, Product2.Family, Product2.Name, Product2Id, UnitPrice, Product2.Quantity_Remaining__c FROM PricebookEntry';
        query += ' ';
        query += 'where IsActive = True';
        if(selectedFamily != null && selectedFamily != Constants.SELECT_ONE){
            query += ' AND Product2.Family=:selectedFamily';
        }
        standardSetController = new ApexPages.StandardSetController(Database.getQueryLocator(query));
        standardSetController.setPageSize(Constants.DEFAULT_ROWS);
        System.debug('standardSetController==='+standardSetController);
    }

    public void loadOrderItemdata(){
        System.debug('loadOrderData=====');
        orderItemList = new List<OrderItem>();
        for(SObject record : standardSetController.getRecords()){
            System.debug('for=====');
            PricebookEntry pbeRecord = (PricebookEntry)record;
            if(orderItemMap.containsKey(pbeRecord.Product2Id)) {
                System.debug('if=====');
                orderItemList.add(orderItemMap.get(pbeRecord.Product2Id));
            } else{
                System.debug('else======');
                OrderItem orderItem = new OrderItem(
                PricebookEntryId = pbeRecord.Id,
                Product2Id = pbeRecord.Product2Id,
                UnitPrice = pbeRecord.UnitPrice,
                Quantity = 0,
                Product2 = pbeRecord.Product2
                );
                orderItemList.add(orderItem);
                orderItemMap.put(pbeRecord.Product2Id,orderItem);
            }
        }
        System.debug('orderItemList===='+orderItemList);
        System.debug('orderItemMap==='+orderItemMap);
    }


    /**
     * @name OnFieldChange
     * @description
    **/
    public void OnFieldChange(){
        pieData = new List<chartHelper.chartData>();
        total = 0;
        for(OrderItem item : orderItemMap.values()){
            pieData.add(new ChartHelper.chartData(item.Product2.Name,item.Quantity * item.UnitPrice));
            total += item.Quantity * item.UnitPrice;
        }
    }

    /**
     * @name SelectFamily
     * @description
    **/
    public void SelectFamily(){
        loadPaginationData();
        loadOrderItemdata();
    }

    /**
     * @name Save
     * @description
    **/
    public void Save(){
        Savepoint sp = Database.setSavepoint();
        List<OrderItem> lOrderItemsToInsert = new List<OrderItem>();
        List<OrderItem> lOrderItemsToDelete = new List<OrderItem>();
        try{
            if(orderRecord.Pricebook2Id == null){
                orderRecord.Pricebook2Id = Constants.STANDARD_PRICEBOOK_ID;
            }
            upsert orderRecord;
            for(OrderItem oItem : orderItemMap.values()){
                System.debug('for=======');
                if(oItem.Quantity > 0 ){
                    oItem.OrderId = orderRecord.Id;
                    lOrderItemsToInsert.add(oItem);
                }else{
                    lOrderItemsToDelete.add(oItem);
                }
            }
            upsert lOrderItemsToInsert;
            delete lOrderItemsToDelete;
        }catch(Exception ex){
            Database.rollback(sp);
            apexPages.addMessage(new ApexPages.message(ApexPages.Severity.Error,Constants.ERROR_MESSAGE));
        }
    }


    /**
     * @name First
     * @description
    **/
    public void First(){
        System.debug('first====');
        standardSetController.first();
        loadOrderItemdata();
    }


    /**
     * @name Next
     * @description
    **/
    public void Next(){
        System.debug('next=====');
        standardSetController.next();
        loadOrderItemdata();
    }


    /**
     * @name Previous
     * @description
    **/
    public void Previous(){
        System.debug('prevopus=====');
        standardSetController.previous();
        loadOrderItemdata();
    }

    /**
     * @name Last
     * @description
    **/
    public void Last(){
        System.debug('last====');
        standardSetController.last();
        loadOrderItemdata();
    }

    /**
     * @name GetHasPrevious
     * @description
    **/
    public Boolean GetHasPrevious(){
        return standardSetController.getHasPrevious();
    }

    /**
     * @name GetHasNext
     * @description
    **/
    public Boolean GetHasNext(){
        return standardSetController.getHasNext();
    }

    /**
     * @name GetTotalPages
     * @description
    **/
    public Integer GetTotalPages(){
        System.debug('total pages==='+standardSetController.getResultSize());
        return (Integer)Math.ceil(standardSetController.getResultSize() / (Decimal)Constants.DEFAULT_ROWS);
    }

    /**
     * @name GetPageNumber
     * @description
    **/
    public Integer GetPageNumber(){
        return standardSetController.getPageNumber();
    }

    /**
     * @name GetFamilyOptions
     * @description
    **/
    public List<SelectOption> GetFamilyOptions(){
        List<SelectOption> productFamilyOptions = new List<SelectOption>();
        productFamilyOptions.add(new SelectOption(Constants.SELECT_ONE ,Constants.SELECT_ONE));
        for(Schema.PicklistEntry picklistEntry : Constants.PRODUCT_FAMILY){
            productFamilyOptions.add(new SelectOption(picklistEntry.getLabel(),picklistEntry.getValue()));
        }
        return productFamilyOptions;
    }

    /**
     * @name QueryOrderRecord
     * @description
    **/
    public static Order QueryOrderRecord(Id orderId){
        return [
            SELECT Id, AccountId, EffectiveDate, Name, Status, Pricebook2Id,
                (
                    SELECT Id, OrderId, Quantity, UnitPrice, PricebookEntryId, Product2Id,
                         Product2.Name, Product2.Family, Product2.Quantity_Remaining__c
                    FROM OrderItems
                )
            FROM Order
            WHERE Id = :orderId
        ];
    }

}

 
Yuvraj Pedde 6Yuvraj Pedde 6
Hi Raj,
i have used your code but still i am facing same issue, please help me some one
DM MDDM MD
SELECT Name, Product2.Family, Product2.Name, Product2Id, UnitPrice, Product2.Quantity_Remaining__c  FROM PricebookEntry WHERE IsActive = TRUE ORDER BY Name

This select have to return less then 14 raws. If it return more than 14 raws delete them. It must help.
SForceBeWithYouSForceBeWithYou
It expects you to have between 11 and 15 Pricebook Entries, because the getTotalPages assertions are ALWAYS checking to be 3. 
¯\_(ツ)_/¯
 
orderExtension ext = new orderExtension(new apexPages.standardController(new Order()));
system.assert( ext.gethasNext() == true , 'ext.getHasNext() did not return the expected result.' );
system.assert( ext.gethasPrevious() == false, 'ext.gethasPrevious() did not return the expected result.' );
system.assert( ext.getTotalPages() == 3, 'ext.getTotalPages() did not return the expected result.' );
system.assert( ext.getPageNumber() == 1, 'ext.getPageNumber() did not return the expected result.' );

ext.next();
system.assert( ext.gethasNext() == true, 'ext.getHasNext() did not return the expected result.' );
system.assert( ext.gethasPrevious() == true, 'ext.gethasPrevious() did not return the expected result.' );
system.assert( ext.gettotalPages() == 3, 'ext.getTotalPages() did not return the expected result.' );
system.assert( ext.getPageNumber() == 2, 'ext.getPageNumber() did not return the expected result.'  );

ext.last();
system.assert( ext.gethasNext() == false, 'ext.getHasNext() did not return the expected result.' );
system.assert( ext.gethasPrevious() == true, 'ext.gethasPrevious() did not return the expected result.' );
system.assert( ext.gettotalPages() == 3, 'ext.getTotalPages() did not return the expected result.' );
system.assert( ext.getPageNumber() == 3, 'ext.getPageNumber() did not return the expected result.'  );

ext.previous();
system.assert( ext.gethasNext() == true, 'ext.getHasNext() did not return the expected result.' );
system.assert( ext.gethasPrevious() == true, 'ext.gethasPrevious() did not return the expected result.' );
system.assert( ext.gettotalPages() == 3, 'ext.getTotalPages() did not return the expected result.' );
system.assert( ext.getPageNumber() == 2, 'ext.getPageNumber() did not return the expected result.'  );

ext.first();
system.assert( ext.gethasNext() == true, 'ext.getHasNext() did not return the expected result.' );
system.assert( ext.gethasPrevious() == false, 'ext.gethasPrevious() did not return the expected result.' );
system.assert( ext.gettotalPages() == 3, 'ext.getTotalPages() did not return the expected result.' );
system.assert( ext.getPageNumber() == 1, 'ext.getPageNumber() did not return the expected result.'  );

 
Ashok Sharma 9Ashok Sharma 9
Hi Raj I used yourncode and I am getting 13 records on this soql :-
 [SELECT Name, Product2.Family, Product2.Name, Product2Id, UnitPrice, Product2.Quantity_Remaining__c FROM PricebookEntry WHERE IsActive = TRUE ORDER BY Name]

but still I am getting "Challenge Not yet complete... here's what's wrong:
Ensure that values are preserved during pagination." this error.
 
Ashok Sharma 9Ashok Sharma 9
Same problem I am a;lso facing.
Dipak Jagtap 8Dipak Jagtap 8
@Ashok Sharma 9 - did you find a solution to resolve this issue? I am also getting the same error.
santhosh konathala 26santhosh konathala 26
Hi Ashok,
Can u share the code for the order extension class?
santhosh konathala 26santhosh konathala 26

Hi Dipak ,

Have solution for the error Ensure that values are preserved during pagination.Please help