Development questions
Update the child Contacts count if Number_of_Locations__c on Account increases or decreases on update.
On after update, compare new and old Number_of_Locations__c. If it increased, insert the difference; if it decreased, delete that many Contacts.
apex
trigger AccountTrigger on Account (after update) {
List<Contact> toInsert = new List<Contact>(), toDelete = new List<Contact>();
Map<Id, Integer> removeCount = new Map<Id, Integer>();
for (Account a : Trigger.new) {
Integer n = a.Number_of_Locations__c == null ? 0 : (Integer) a.Number_of_Locations__c;
Integer o = Trigger.oldMap.get(a.Id).Number_of_Locations__c == null ? 0 : (Integer) Trigger.oldMap.get(a.Id).Number_of_Locations__c;
if (n > o) for (Integer i = o + 1; i <= n; i++) toInsert.add(new Contact(LastName = a.Name + ' Location ' + i, AccountId = a.Id));
else if (n < o) removeCount.put(a.Id, o - n);
}
for (Account a : [SELECT Id, (SELECT Id FROM Contacts ORDER BY CreatedDate DESC) FROM Account WHERE Id IN :removeCount.keySet()]) {
Integer k = removeCount.get(a.Id);
for (Integer i = 0; i < k && i < a.Contacts.size(); i++) toDelete.add(a.Contacts[i]);
}
insert toInsert; delete toDelete;
}
apex-triggertriggercodingscenario
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?