Development questions
Write a trigger that calculates the average Rating_Score__c from Feedback__c child records and updates the parent Product2 record using AggregateResult.
Trigger on Feedback__c (after insert, update, delete, undelete), then recompute AVG(Rating_Score__c) per Product2 with AggregateResult.
apex
trigger FeedbackTrigger on Feedback__c (after insert, after update, after delete, after undelete) {
Set<Id> prodIds = new Set<Id>();
for (Feedback__c f : (Trigger.isDelete ? Trigger.old : Trigger.new)) if (f.Product__c != null) prodIds.add(f.Product__c);
if (Trigger.isUpdate) for (Feedback__c f : Trigger.old) if (f.Product__c != null) prodIds.add(f.Product__c);
Map<Id, Product2> prods = new Map<Id, Product2>();
for (Id id : prodIds) prods.put(id, new Product2(Id = id, Average_Rating__c = 0));
for (AggregateResult ar : [SELECT Product__c p, AVG(Rating_Score__c) a FROM Feedback__c
WHERE Product__c IN :prodIds GROUP BY Product__c]) {
prods.get((Id) ar.get('p')).Average_Rating__c = (Decimal) ar.get('a');
}
update prods.values();
}
apex-triggertriggercodingscenariorollupaggregate
More Development questions
- What is an Apex Trigger in Salesforce and when should you use it over Flows?
- What is the difference between before triggers and after triggers?
- Explain all Trigger context variables (isInsert, isUpdate, isDelete, isUndelete, isBefore, isAfter, isExecuting, size, operationType).
- What is the difference between Trigger.new and Trigger.old?
- In which trigger events are Trigger.new and Trigger.newMap available?
- In which trigger events are Trigger.old and Trigger.oldMap available?