• Kaneze Meher
  • NEWBIE
  • 5 Points
  • Member since 2017

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 0
    Questions
  • 1
    Replies
Hi guys,

I wrote a trigger to count the number of child Accounts in the hierarchy and store it in a custom field in the Parent Account.
Trigger works fine, except when I remove the parent-child mapping from one of the child Accounts ("deparent"). The count does not go down.
I'm pretty sure I'm overlooking something here. Any help appreciated.
Thank you !!
 
trigger countChildAcc on Account (after Insert, after Update) {
    Set<Id> Ids= new Set<Id>();
    List<Account> acclist = new List<Account>();
    Integer count = 0;
    
    if(Trigger.isInsert || Trigger.isUpdate){
        for(Account acc: Trigger.new){
            if(acc.ParentId!=null)
                Ids.add(acc.ParentId);
            acclist.add(acc);
        }
    }
    
    if(Trigger.isDelete){
        for(Account acc: Trigger.old){
            if(acc.ParentId!=null)
                Ids.add(acc.ParentId);
            acclist.add(acc);
        }
    }
        
    if(Ids.size()>0){
        List<Account> accChild = new List<Account>([SELECT Id,ParentId FROM Account WHERE ParentId IN: Ids]);
        List<Account> accParent = new List<Account>([SELECT Id,No_of_Child_Accounts__c FROM Account WHERE Id IN: Ids]);
        for(Account ac: accParent){
            count =0;
            for(Account acChild: accChild){
                if(acChild.ParentId == ac.Id)
                    count++;
            }
            ac.No_of_Child_Accounts__c = count;            
        }
        try{
            upsert accParent;
        }catch(DMLException ex){
            System.debug('Exception is '+ex);
        }
    }
}