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
Shyam NairShyam Nair 

Advanced Apex Specialist Challenge 2

Hi,

I am trying to update orderTrigger on challenge 2, and  I am getting below error:
User-added image

Please find my trigger and helper class below. Any help would be highly appreciated.

orderTrigger:

/**
 * @name orderTrigger
 * @description
**/
trigger orderTrigger on Order (after update) {
    public Set<Id> orderIds = new Set<Id>();
    if(Trigger.new != null){
    	orderIds = OrderHelper.AfterUpdate(Trigger.new, Trigger.old);    
    }
    
    OrderHelper.RollUpOrderItems(orderIds);
    
}

OrderHelper:
public with sharing class OrderHelper {

    /**
     * @name AfterUpdate
     * @description 
     * @param List<Order> newList
     * @param List<Order> oldList
     * @return void
    **/
    public static Set<Id> AfterUpdate(List<Order> newList, List<Order> oldList){
        Set<Id> orderIds = new Set<Id>();
        for ( Integer i=0; i<newList.size(); i++ ){
            if ( newList[i].Status == 'Activate' && oldList[i].Status == 'Draft' ){
                orderIds.add(newList[i].Id);
            }
        }
        return orderIds;
    }

    /**
     * @name RollUpOrderItems
     * @description Given a set of Activated Order ids, query the child Order Items and related Products to calculate Inventory levels
     * @param Set<Id> activatedOrderIds
     * @return void
    **/
    public static void RollUpOrderItems(Set<Id> activatedOrderIds){
        Map<Id, Product2> productMap;
        Set<Id> product2Ids = new Set<Id>();
        List<OrderItem> orderItems = [SELECT Id, Quantity, Product2Id FROM OrderItem WHERE OrderId IN:activatedOrderIds];
        for(OrderItem item :orderItems){
            product2Ids.add(item.Product2Id);
        }
        productMap = new Map<Id, Product2>([SELECT Id, Quantity_Ordered__c FROM Product2 WHERE Id IN :product2Ids]);
        for(OrderItem item :orderItems) {
            if(productMap.containsKey(item.Product2Id)) {
                productMap.get(item.product2Id).Quantity_Ordered__c -= item.Quantity;
            }
        }
        update productMap.values();
    }

}
Best Answer chosen by Shyam Nair
Shyam NairShyam Nair
I think I figured it out. I was not getting the business logic correct. Its resolved now. Thanks.

All Answers

Shyam NairShyam Nair
I think I figured it out. I was not getting the business logic correct. Its resolved now. Thanks.
This was selected as the best answer
veeranjaneyulu kunchala 9veeranjaneyulu kunchala 9
hi , 
I am facing issue with this 
User-added image

This is my code for "OrderHelper"
 
public with sharing class OrderHelper {

    /**
     * @name AfterUpdate
     * @description 
     * @param List<Order> newList
     * @param List<Order> oldList
     * @return void
    **/
    public static void AfterUpdate(List<Order> newList, List<Order> oldList){                  

        Set<Id> orderIds = new Set<Id>();
        for ( Integer i=0; i<newList.size(); i++ ){
            if ( newList[i].Status == Constants.ACTIVATED_ORDER_STATUS && oldList[i].Status == Constants.DRAFT_ORDER_STATUS ){
                orderIds.add(newList[i].Id);
            }
        } 

        if(orderIds.size()>0)
            RollUpOrderItems(orderIds);
        
    }

    /**
     * @name RollUpOrderItems
     * @description Given a set of Activated Order ids, query the child Order Items and related Products to calculate Inventory levels
     * @param Set<Id> activatedOrderIds
     * @return void
    **/
    public static void RollUpOrderItems(Set<Id> activatedOrderIds){    
        
       Map<Id, Product2> productMap=new Map<Id, Product2>();
        Set<Id> product2Ids = new Set<Id>();
        List<Product2> produtoUpdate= new List<Product2>();
        List<OrderItem> orderItems = [SELECT Id, Quantity,OrderId ,Product2Id FROM OrderItem WHERE OrderId IN:activatedOrderIds];
        
        for(OrderItem item :orderItems){
            product2Ids.add(item.Product2Id);
        }
        
        productMap = [SELECT Id, Quantity_Ordered__c FROM Product2 WHERE Id IN :product2Ids];
        system.debug('##########'+productMap );
        
        for(OrderItem singleOrder : orderItems ) {
            if(productMap.containsKey(singleOrder.Product2Id)) {
                productMap.get(singleOrder.product2Id).Quantity_Ordered__c += singleOrder.Quantity;
                produtoUpdate.add(productMap.get(singleOrder.product2Id));
            }
        }
        update produtoUpdate;
      
    }

}


Could you help me out? what was the wrong with it?  Thanks 

 
Shreyas Dhond 16Shreyas Dhond 16
I am getting the same error. But not getting any logs on the developer console to debug by. Any hints will be appreciated! Thanks
Shreyas Dhond 16Shreyas Dhond 16
@veeranjaneyulu kunchala 9 were you able to resolve this issue?
Paras PrajapatiParas Prajapati
Please refere here

https://developer.salesforce.com/forums?error=sorry_post_not_found&url=sforce%2Fboard%3Fboard.id%3Dcustom_formula#!/feedtype=SINGLE_QUESTION_DETAIL&dc=Developer_Forums&criteria=ALLQUESTIONS&id=9060G0000005OViQAM
veeranjaneyulu kunchala 9veeranjaneyulu kunchala 9
Thanks Paras Prajapati ... :)