Development questions
When a User is deactivated (IsActive changed from true to false), transfer all their open Opportunities and Accounts to their Manager (ManagerId).
Use after update on User, detect IsActive true to false, and reassign open Opportunities and owned Accounts to ManagerId. Because User is a setup object, run the record updates in a @future or Queueable method to avoid Mixed DML.
apex
trigger UserTrigger on User (after update) {
Map<Id, Id> mgrByUser = new Map<Id, Id>();
for (User u : Trigger.new) {
if (!u.IsActive && Trigger.oldMap.get(u.Id).IsActive && u.ManagerId != null) mgrByUser.put(u.Id, u.ManagerId);
}
if (!mgrByUser.isEmpty()) UserHandler.transfer(mgrByUser);
}
public class UserHandler {
@future
public static void transfer(Map<Id, Id> mgrByUser) {
List<Opportunity> opps = [SELECT Id, OwnerId FROM Opportunity WHERE OwnerId IN :mgrByUser.keySet() AND IsClosed = false];
for (Opportunity o : opps) o.OwnerId = mgrByUser.get(o.OwnerId);
List<Account> accs = [SELECT Id, OwnerId FROM Account WHERE OwnerId IN :mgrByUser.keySet()];
for (Account a : accs) a.OwnerId = mgrByUser.get(a.OwnerId);
update opps; update accs;
}
}
apex-triggertriggercodingscenariomixed-dml
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?