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
Kashyap JoshiKashyap Joshi 

Trigger to count total no of orders in Particular customer case

CharuDuttCharuDutt
Hii Kashyap
Try Below Trigger
trigger NumberOfChild on Order(After Insert,After Update,After Delete) {
List<Case> CaseList=new List<Case>();

    Set<Id> setIds = new Set<Id>();
    if(Trigger.isInsert){
         if(trigger.isAfter){
        for(Order con : Trigger.new){
            if(con.CaseId != null){
            setIds.add(con.CaseId );
            	}
			}
		}
    } 
    system.debug('setAccIds ==> '+setAccIds);
    if(Trigger.isUpdate){
         if(trigger.isAfter){
        for(Order con : Trigger.new){ 
            if(con.CaseId !=Trigger.oldMap.get(con.Id).CaseId ){
               	setIds.add(con.CaseId );
                setIds.add(Trigger.oldMap.get(con.Id).CaseId );
            	}
          
			}        
        }
    }
    if(Trigger.isDelete){
        if(trigger.isAfter){
        for(Order con : Trigger.old) { 
            if(con.CaseId != null){
            setIds.add(con.CaseId );
            	}
        	}
        }
    }    
    for(Case acc :[Select id,Total_Orders__c ,(Select id,name from Orders) from Case where Id in : setAccIds]){
        acc.Total_Orders__c = acc.Orders.size();
        CaseList.add(acc);
    }
    if(acclist.size()>0){
        update CaseList;     
    }
}
Please Mark It As Best Answer If It Helps
Thank You!
Kashyap JoshiKashyap Joshi
Hi CharuDutt,
I got Error like 
Variable does not exist: CaseId
Variable does not exist: Orders


Total_Orders__c ,(Select id,name from Orders) from Case where Id in :
                                      ^
ERROR at Row:1:Column:49
Didn't understand relationship 'Orders' in FROM part of query call. If you are attempting to use a custom relationship, be sure to append the '__r' after the custom relationship name. Please reference your WSDL or the describe call for the appropriate names.

can you please guide me on this
Thanks
CharuDuttCharuDutt
Hii Kashyap
Change CaseId With Case lookup fieldName On Order Object If Case Lookup Is Not On Order Then Make one

Please Mark It As Best Answer If It Helps
Thank You!
Kashyap JoshiKashyap Joshi

Hi CharuDutt,

I have created a custom lookup field CaseId__c  on Order Object still I got this error

AnkaiahAnkaiah (Salesforce Developers) 
Hi Kashyap,

Please try with below code.
trigger OrderCount on Order (after insert, after update, after delete, after undelete) {
    Map<Id, List<Order>> mapCaseIdOrderList = new Map<Id, List<Order>>();
    Map<Id, List<Order>> mapCaseIdDelOrderList = new Map<Id, List<Order>>();
    Set<Id> CaseIds = new Set<Id>();    
    List<Case> Caselist = new List<Case>();
    
    if(trigger.isInsert) {
        for(Order cs : trigger.New) {
            if(String.isNotBlank(cs.CaseId__c)) {
                if(!mapCaseIdOrderList.containsKey(cs.CaseId__c)) {
                    mapCaseIdOrderList.put(cs.CaseId__c, new List<Order>());
                }
                mapCaseIdOrderList.get(cs.CaseId__c).add(cs); 
                CaseIds.add(cs.CaseId__c);
            }   
        }  
    }
    
    if(trigger.isUpdate) {
        for(Order cs : trigger.New) {
            if(String.isNotBlank(cs.CaseId__c) && cs.CaseId__c != trigger.oldMap.get(cs.Id).CaseId__c) {
                if(!mapCaseIdOrderList.containsKey(cs.CaseId__c)){
                    mapCaseIdOrderList.put(cs.CaseId__c, new List<Order>());
                }
                mapCaseIdOrderList.get(cs.CaseId__c).add(cs); 
                CaseIds.add(cs.CaseId__c);
            } else if(String.isBlank(cs.CaseId__c) && String.isNotBlank(trigger.oldMap.get(cs.Id).CaseId__c)) {
                if(!mapCaseIdDelOrderList.containsKey(cs.CaseId__c)){
                    mapCaseIdDelOrderList.put(cs.CaseId__c, new List<Order>());
                }
                mapCaseIdDelOrderList.get(cs.CaseId__c).add(cs);   
                CaseIds.add(trigger.oldMap.get(cs.Id).CaseId__c);
            }
        }  
    }
    
    if(trigger.isUndelete) {
        for(Order cs : trigger.new) {
            if(String.isNotBlank(cs.CaseId__c)){
                if(!mapCaseIdOrderList.containsKey(cs.CaseId__c)){
                    mapCaseIdOrderList.put(cs.CaseId__c, new List<Order>());
                }
                mapCaseIdOrderList.get(cs.CaseId__c).add(cs);     
                CaseIds.add(cs.CaseId__c);
            }
        }  
    }      

    if(trigger.isDelete) {
        for(Order cs : trigger.Old) {
            if(String.isNotBlank(cs.CaseId__c)){
                if(!mapCaseIdDelOrderList.containsKey(cs.CaseId__c)){
                    mapCaseIdDelOrderList.put(cs.CaseId__c, new List<Order>());
                }
                mapCaseIdDelOrderList.get(cs.CaseId__c).add(cs);    
                CaseIds.add(cs.CaseId__c); 
            }
        }  
    }   
    
    if(CaseIds.size() > 0) {
        Caselist = [SELECT Id, Number_of_Orders__c FROM Case WHERE Id IN : CaseIds];
        
        for(Case us : Caselist) {
            Integer noOfOrders = 0;
            if(mapCaseIdOrderList.containsKey(us.Id)) {
                noOfOrders += mapCaseIdOrderList.get(us.Id).size();
            }
            if(mapCaseIdDelOrderList.containsKey(us.Id)) {
                noOfOrders -= mapCaseIdDelOrderList.get(us.Id).size();
            }
            us.Number_of_Orders__c = us.Number_of_Orders__c == null ? noOfOrders : (us.Number_of_Orders__c + noOfOrders);
        }
        
        update Caselist;    
    }
}
If this helps, Please mark it as best answer.

Regards,
Ankaiah
 
Kashyap JoshiKashyap Joshi

Hi Ankaiah,

Thank You  so much for your efforts and Solutions

Kashyap JoshiKashyap Joshi

Hi Ankaiah,

I created trigger as per you suggested but still Order count on not updated in Number_of_Orders__c field

can you please guide me on this.

Thank You

Kashyap JoshiKashyap Joshi
Hi Ankaiah,
I created trigger as per you suggested but still Order count on not updated in Number_of_Orders__c field
can you please guide me on this.
Thank You