Development questions

When a User is deactivated (IsActive changed from true to false), transfer all their open Opportunities and Accounts to their Manager (ManagerId).

DevelopmentHardAccentureEYKPMG

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