0

I am not able to perform insertion,updation,deletion on account

Apex class:

 public static void parentUpdate(list<Contact> records){   
 set<ID> ids = new set<ID>();
 for(Contact c: records){
    if(c.Amount__c  != Null){
        ids.add(c.AccountId);
    }
 }  
 list<Account> apayList=[select id,Total_Amount__c,(select Amount__c from Contacts) from Account where id IN:ids];
 for(Account ac:apayList){


     double amount=0;         
     for(Contact co:ac.Contacts){
         if(ac.Contacts.size()>0 && co.AccountId!=null){
             amount+=co.Amount__c;
           }            
       }          

      ac.Total_Amount__c =amount;


 }
  update apayList;

   system.debug('#####'+apayList);
  }

@future
   public static void countparentupdate(Id recordId){
    list<Contact> records= [select id,AccountId,Amount__c from Contact WHERE 
  AccountId = :recordId];
        parentUpdate(records); 
  }

Apex Trigger:

trigger updateAccount on Contact (after insert,after update,after delete) {

if(Trigger.isAfter && (Trigger.isInsert || Trigger.isUpdate)){
    for(Contact c :Trigger.new){
         AccountTotalAmount.countparentupdate(c.AccountId);
    }       
}

if(Trigger.isAfter && (Trigger.isUpdate || Trigger.isDelete)){
   for(Contact c :Trigger.old){
         AccountTotalAmount.countparentupdate(c.AccountId);
    }       
}
}

Stack Trace Error:

updateAccount: execution of AfterUpdate caused by: System.DmlException: Update failed. First exception on row 0 with id 0017F00001odBxkQAE; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, Contactupdate: maximum trigger depth exceeded Contact trigger event AfterUpdate Account trigger event AfterUpdate Contact trigger event AfterUpdate Account trigger event AfterUpdate Contact trigger event AfterUpdate Account trigger event AfterUpdate Contact trigger event AfterUpdate Account trigger event AfterUpdate Contact trigger event AfterUpdate Account trigger event AfterUpdate Contact trigger event AfterUpdate Account trigger event AfterUpdate Contact trigger event AfterUpdate Account trigger event AfterUpdate Contact trigger event AfterUpdate Account trigger event AfterUpdate: [] Class.AccountTotalAmount.parentUpdate: line 51, column 1 Class.AccountTotalAmount.countparentupdate: line 59, column 1 Trigger.updateAccount: line 5, column 1

  • Please edit your question to include the error that you are getting when performing DML operation. Also, it would be better if you could also provide the stack trace of the error along with it. – Vijay Ganji Jun 13 at 6:57
0

The repeated:

event AfterUpdate Contact trigger event AfterUpdate Account trigger

in the stack trace suggests you also have a trigger on Account that updates Contact as well as the trigger you have posted on Contact that updates Account. This causes a never-ending loop.

One way to break that is to be more selective e.g. only update the Account when the specific field you are rolling up changes:

Set<Id> accountIds = new Set<Id>();
for(Contact c :Trigger.new){
    Contact old = Trigger.oldMap.get(c.Id);
    if (c.Amount__c != old.Amount__c) {
        accountIds.add(c.AccountId);
    }
}
if (accountIds.size() > 0) {
    Account[] accounts = [
        select Id, (select Amount__c from Contacts)
        from Account
        where Id in :accountIds
    ];
    for (Account a : accounts) {
        a.Total_Amount__c = 0;
        for (Contact c : a.Contacts) {
            if (c.Amount__c != null) {
                a.Total_Amount__c += c.Amount__c;
            }
        }
    }
    update accounts;
}

Note that your code was not bulkified: the above logic addresses that too.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.