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
Warren Wade, AEWarren Wade, AE 

roll up for after delete

When a Preservation Activity (child) gets deleted, I need the Preservation Object (parent) to recalculate the Max Date.
(also, I'm not a coder so I tried to annotate what I thought was happening in the code that's why those notes are there.)
trigger RollUpRecentActivity on Preservation_Activities__c (after insert, after update, after delete) {
    set<Id>setPreserveId = new set<Id>(); //set new variable "setPreserveID"
    list<Preservation_Object__c>lstPreserve = new list<Preservation_Object__c>(); //set a new Preservation Object list called "lstPreserve"
    if(trigger.isAfter){ //if it's afterUpdate
        system.debug('@Developer --> isAfter:'); //debug statement
        if(trigger.isInsert || trigger.isUpdate){ //if it's on insert OR update
            for(Preservation_Activities__c oActivities:trigger.new){ //set oActivities which equals the activity/ies that are trigger.new
                setPreserveId.add(oActivities.Preservation_Object__c);//to the setPreserveId variable, add the PReservation objects of the activities in the trigger
            }
        }
        system.debug('@developer-->setPreserveId: '+setPreserveId);  //debug statement
        if(setPreserveId.size()>0){ //if there's actually an id
        for(Preservation_Activities__c oActivities:[
            	Select Preservation_Object__c,id,Name,Activity_Type__c,Activity_Date__c  
            	from Preservation_Activities__c 
            	where Preservation_Object__c In:setPreserveId and Activity_Date__c != null and isDeleted = FALSE
            	order by Activity_Date__c desc limit 1]){
            Preservation_Object__c oPreserve = new Preservation_Object__c();
            oPreserve.Id = oActivities.Preservation_Object__c;
            oPreserve.Last_Activity_Type__c = oActivities.Activity_Type__c;
            lstPreserve.add(oPreserve);
        }
        system.debug('@developer-->lstPreserve: '+lstPreserve);
        if(lstPreserve.size()>0){
            update lstPreserve;
        }
        }
    }
 }

 
Best Answer chosen by Warren Wade, AE
Deepak Pandey 13Deepak Pandey 13
Hello
Actually you are not adding context veriable trigger.IsDelete so when it will be delete not filled trigger query.So add this.---
trigger RollUpRecentActivity on Preservation_Activities__c (after insert, after update, after delete) {
    set<Id>setPreserveId = new set<Id>(); //set new variable "setPreserveID"
    list<Preservation_Object__c>lstPreserve = new list<Preservation_Object__c>(); //set a new Preservation Object list called "lstPreserve"
    if(trigger.isAfter){ //if it's afterUpdate
        system.debug('@Developer --> isAfter:'); //debug statement
        if(trigger.isInsert || trigger.isUpdate || trigger.isdelete){ //if it's on insert OR update
            for(Preservation_Activities__c oActivities:trigger.new){ //set oActivities which equals the activity/ies that are trigger.new
                setPreserveId.add(oActivities.Preservation_Object__c);//to the setPreserveId variable, add the PReservation objects of the activities in the trigger
            }
        }
        system.debug('@developer-->setPreserveId: '+setPreserveId);  //debug statement
        if(setPreserveId.size()>0){ //if there's actually an id
        for(Preservation_Activities__c oActivities:[
                Select Preservation_Object__c,id,Name,Activity_Type__c,Activity_Date__c  
                from Preservation_Activities__c 
                where Preservation_Object__c In:setPreserveId and Activity_Date__c != null and isDeleted = FALSE
                order by Activity_Date__c desc limit 1]){
            Preservation_Object__c oPreserve = new Preservation_Object__c();
            oPreserve.Id = oActivities.Preservation_Object__c;
            oPreserve.Last_Activity_Type__c = oActivities.Activity_Type__c;
            lstPreserve.add(oPreserve);
        }
        system.debug('@developer-->lstPreserve: '+lstPreserve);
        if(lstPreserve.size()>0){
            update lstPreserve;
        }
        }
    }
 }

All Answers

Deepak Pandey 13Deepak Pandey 13
Hello
Actually you are not adding context veriable trigger.IsDelete so when it will be delete not filled trigger query.So add this.---
trigger RollUpRecentActivity on Preservation_Activities__c (after insert, after update, after delete) {
    set<Id>setPreserveId = new set<Id>(); //set new variable "setPreserveID"
    list<Preservation_Object__c>lstPreserve = new list<Preservation_Object__c>(); //set a new Preservation Object list called "lstPreserve"
    if(trigger.isAfter){ //if it's afterUpdate
        system.debug('@Developer --> isAfter:'); //debug statement
        if(trigger.isInsert || trigger.isUpdate || trigger.isdelete){ //if it's on insert OR update
            for(Preservation_Activities__c oActivities:trigger.new){ //set oActivities which equals the activity/ies that are trigger.new
                setPreserveId.add(oActivities.Preservation_Object__c);//to the setPreserveId variable, add the PReservation objects of the activities in the trigger
            }
        }
        system.debug('@developer-->setPreserveId: '+setPreserveId);  //debug statement
        if(setPreserveId.size()>0){ //if there's actually an id
        for(Preservation_Activities__c oActivities:[
                Select Preservation_Object__c,id,Name,Activity_Type__c,Activity_Date__c  
                from Preservation_Activities__c 
                where Preservation_Object__c In:setPreserveId and Activity_Date__c != null and isDeleted = FALSE
                order by Activity_Date__c desc limit 1]){
            Preservation_Object__c oPreserve = new Preservation_Object__c();
            oPreserve.Id = oActivities.Preservation_Object__c;
            oPreserve.Last_Activity_Type__c = oActivities.Activity_Type__c;
            lstPreserve.add(oPreserve);
        }
        system.debug('@developer-->lstPreserve: '+lstPreserve);
        if(lstPreserve.size()>0){
            update lstPreserve;
        }
        }
    }
 }
This was selected as the best answer
Warren Wade, AEWarren Wade, AE
Hi, Deepak -

Thanks for catching that.  That makes sense as to why it wasn't firing; however, now I'm getting an "Attempt to de-reference a null object" error at line 5.  Again, thanks for your help on this.  I'm an admin trying to resolve some code.
1	trigger RollUpRecentActivity on Preservation_Activities__c (after insert, after update, before delete) {
2	    set<Id>setPreserveId = new set<Id>(); 
3	    list<Preservation_Object__c>listPreserve = new list<Preservation_Object__c>(); 
4	        if(trigger.isInsert || trigger.isUpdate || trigger.isdelete){
5	            for(Preservation_Activities__c oActivities:trigger.new){ 
6	                setPreserveId.add(oActivities.Preservation_Object__c); 
7	            }
8	        }
9	        system.debug('@developer-->setPreserveId: '+setPreserveId);
10	        if(setPreserveId.size()>0){ 
11	        for(Preservation_Activities__c oActivities:[
12	                Select Preservation_Object__c,id,Name,Activity_Type__c,Activity_Date__c  
13	                from Preservation_Activities__c 
14	                where Preservation_Object__c In:setPreserveId and Activity_Date__c != null and isDeleted = FALSE
15	                order by Activity_Date__c desc limit 1]){
16	            Preservation_Object__c oPreserve = new Preservation_Object__c();
17	            oPreserve.Id = oActivities.Preservation_Object__c;
18	            oPreserve.Last_Activity_Type__c = oActivities.Activity_Type__c;
19	            listPreserve.add(oPreserve);
20	        }
21	        system.debug('@developer-->listPreserve: '+listPreserve); 
22	        if(listPreserve.size()>0){ 
23	            update listPreserve;
24	        }
25	        }
26	    }