Development questions
Write a trigger to find the Maximum and Minimum Salary among all Employee__c child records and populate Max_Salary__c and Min_Salary__c on Department__c.
Use triggers on Employee__c (after insert, update, delete, undelete) and aggregate with MAX/MIN.
apex
trigger EmployeeTrigger on Employee__c (after insert, after update, after delete, after undelete) {
Set<Id> deptIds = new Set<Id>();
for (Employee__c e : (Trigger.isDelete ? Trigger.old : Trigger.new)) if (e.Department__c != null) deptIds.add(e.Department__c);
if (Trigger.isUpdate) for (Employee__c e : Trigger.old) if (e.Department__c != null) deptIds.add(e.Department__c);
Map<Id, Department__c> depts = new Map<Id, Department__c>();
for (Id id : deptIds) depts.put(id, new Department__c(Id = id, Max_Salary__c = null, Min_Salary__c = null));
for (AggregateResult ar : [SELECT Department__c d, MAX(Salary__c) mx, MIN(Salary__c) mn FROM Employee__c
WHERE Department__c IN :deptIds GROUP BY Department__c]) {
Department__c d = depts.get((Id) ar.get('d'));
d.Max_Salary__c = (Decimal) ar.get('mx'); d.Min_Salary__c = (Decimal) ar.get('mn');
}
update depts.values();
}
If the relationship is master-detail, a native Roll-Up Summary field (MAX/MIN) is the better choice.
apex-triggertriggercodingscenariorollup
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?