Development questions
Write a trigger to prevent an Employee__c record from being inserted if the parent Department__c already has 10 active employees.
Use before insert (and optionally before update for reparenting). Count active employees per Department in the DB plus new ones in the batch.
apex
trigger EmployeeTrigger on Employee__c (before insert) {
Set<Id> deptIds = new Set<Id>();
for (Employee__c e : Trigger.new) if (e.Department__c != null) deptIds.add(e.Department__c);
Map<Id, Integer> counts = new Map<Id, Integer>();
for (AggregateResult ar : [SELECT Department__c d, COUNT(Id) c FROM Employee__c
WHERE Department__c IN :deptIds AND Active__c = true GROUP BY Department__c]) {
counts.put((Id) ar.get('d'), (Integer) ar.get('c'));
}
for (Employee__c e : Trigger.new) {
if (e.Department__c == null || !e.Active__c) continue;
Integer n = counts.containsKey(e.Department__c) ? counts.get(e.Department__c) : 0;
if (n >= 10) e.addError('Department already has 10 active employees.');
else counts.put(e.Department__c, n + 1);
}
}
apex-triggertriggercodingscenariovalidation
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?