I have two objects parent object Vehicles__c and a child object RegistrationNumbers__c. When ever a RegistrationNumbers__c is created or updated I have a trigger which will update RegNumbers__c field on Vehicles__c with Number__c field values of child record. as shown below
If I have 1 parent record with 3 child records (Number__c =123,Number__c =245, Number__c =444) then my trigger will update parent RegNumbers__c = 123/245/444
Everything is working fine for Create and update,but I have a requirement if the particular child record is deleted then I should delete only that Number__c value from RegNumbers__c on parent. I tried the below trigger but it is deleting all the values can anyone help me with this ?
Trigger :
trigger deletevals on RegistrationNumbers__c (before delete) {
List<Vehicles__c> vlist = new List<Vehicles__c>();
Set<Id> vids= new Set<Id>();
for (RegistrationNumbers__c r : Trigger.old){
vids.add(r.Vehicle__Lookup__c);
}
List<Vehicles__c> v=[Select Id,RegNumbers__c,(Select Id,Number__c from RegistrationNumbers__r) from Vehicles__c where ID IN: vids];
for(Vehicles__c vh : v)
{
for (RegistrationNumbers__c rn: vh.RegistrationNumbers__r) {
String number = rn.Number__c ;
String removeval = vh.RegNumbers__c;
if(removeval.Contains(number)){
removeval = removeval.remove(number);// It is removing all the values
vh.RegNumbers__c = removeval;
}
}
vlist.add(vh);
}
update vlist;
}
}
Best Answer
Make it easy on yourself if you are not going to use DLRS. Recalculate on insert, update, delete, and undelete.
You can make it more robust by adding recursion checks and if the Reg number actually changed or not to exclude those updates as well