function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Andrew Likens 6Andrew Likens 6 

create opportunity team member with user id as trigger.new opportunity team member managerId

I have started to try to build this out using process builder and using an invocable method. My work saves, but it is not executing the way I want. Any ideas are greatly appreciated! Code below.
 
public class OBLOppTeamMembers {
@InvocableMethod
    public static void createOBLOppTeamMemberManager(List<OpportunityTeamMember> otmToUpdate) {
        
        List<OpportunityTeamMember> otm = [SELECT Id, UserId, OpportunityId, TeamMemberRole,OpportunityAccessLevel
            							   FROM OpportunityTeamMember 
            							   WHERE Id IN :new Map<Id, OpportunityTeamMember>(otmToUpdate).keySet()];
        
        Set<Id> userIds = new Set<Id>();
        
        for(OpportunityTeamMember oppTM : otm) {
            userIds.add(oppTM.UserId);
        }
        
        List<User> userList = [SELECT Id, ManagerId FROM User WHERE Id IN :userIds];
        
        Map<Id, User> userById = new Map<Id, User>();
                
        for(User u : userList) {
        	userById.put(u.ManagerId, u);
        }
        
        for(Id managerId : userById.keySet()) {
        	for(OpportunityTeamMember oppTM : otm) {
        		OpportunityTeamMember newOppTM = new OpportunityTeamMember();
                newOppTM.UserId = managerId;
                newOppTM.OpportunityAccessLevel = 'Edit';
                newOppTM.OpportunityId = oppTM.OpportunityId;
                newOppTM.TeamMemberRole = 'Regional Manager';
        	} 
        }
        update otm;
    }
}

 
Pradeep SinghPradeep Singh
Hi,
At line 25, you are creating records for OpportunityTeamMember but you are not making INSERT DML on these newly created ones.
Narender Singh(Nads)Narender Singh(Nads)
Hi,
Try this code:
 
public class OBLOppTeamMembers {
@InvocableMethod
    public static void createOBLOppTeamMemberManager(List<OpportunityTeamMember> otmToUpdate) {
        
        List<OpportunityTeamMember> otm = [SELECT Id, UserId, OpportunityId, TeamMemberRole,OpportunityAccessLevel
            							   FROM OpportunityTeamMember 
            							   WHERE Id IN :new Map<Id, OpportunityTeamMember>(otmToUpdate).keySet()];
        
        Set<Id> userIds = new Set<Id>();
        
        for(OpportunityTeamMember oppTM : otm) {
            userIds.add(oppTM.UserId);
        }
        
        List<User> userList = [SELECT Id, ManagerId FROM User WHERE Id IN :userIds];
        
        Map<Id, User> userById = new Map<Id, User>();
                
        for(User u : userList) {
        	userById.put(u.ManagerId, u);
        }
        
        OpportunityTeamMember[] ListToUpdate=new OpportunityTeamMember[]{};
       
        for(Id managerId : userById.keySet()) {
        	for(OpportunityTeamMember oppTM : otm) {
        		OpportunityTeamMember newOppTM = new OpportunityTeamMember();
                newOppTM.id=otm.id;
                newOppTM.UserId = managerId;
                newOppTM.OpportunityAccessLevel = 'Edit';
                newOppTM.OpportunityId = oppTM.OpportunityId;
                newOppTM.TeamMemberRole = 'Regional Manager';
                 ListToUpdate.add(newOppTM );
        	} 
        }
        update ListToUpdate;
    }
}

In your code, what you were doing wrong was:
You are updating the old list 'otm'.
You need to add the new records which you are creating with updated field values in a list and then update that list.

Let me know if it helps.
thanks
Andrew Likens 6Andrew Likens 6
Thank you both for the reply. Here is the code that actually ended up working.
 
public class OBLOppTeamMembers {
    
	public static boolean isExecuted = true;
    
	@InvocableMethod
    public static void createOBLOppTeamMemberManager(List<OpportunityTeamMember> otmToUpdate) {
        
        if(isExecuted) {
        
            isExecuted = false;
            
            Set<Id> userIds = new Set<Id>();
            
            Set<Id> oppIds = new Set<Id>();
            
            for(OpportunityTeamMember otm1 : otmToUpdate) {
                userIds.add(otm1.UserId);
                oppIds.add(otm1.OpportunityId);
            }
    
            Map<Id,Opportunity> oppMap = new Map<Id,Opportunity>([SELECT Id, RecordType.DeveloperName
                                                                  FROM Opportunity WHERE Id IN :oppIds]);
            
            Map<Id,Id> userManagerMap = new Map<Id,Id>();
            
            for(User u : [SELECT Id, ManagerId FROM User WHERE Id IN :userIds]) {
                userManagerMap.put(u.Id, u.ManagerId);
            }
           
            List<OpportunityTeamMember> insertOTM = new List<OpportunityTeamMember>();
    
            for(OpportunityTeamMember oppTM : otmToUpdate) {
                if(oppMap.containsKey(oppTM.OpportunityId)) {
                    Opportunity opp = oppMap.get(oppTM.OpportunityId); // get value
                    if(opp.RecordType.DeveloperName == 'PI_US_OBL_Opportunity') {
                        if(userManagerMap.containsKey(oppTM.UserId)) {
                            Id managerId = userManagerMap.get(oppTM.UserId); //get value
                            OpportunityTeamMember newOppTM = new OpportunityTeamMember();
                            newOppTM.UserId = managerId;
                            newOppTM.OpportunityAccessLevel = 'Edit';
                            newOppTM.OpportunityId = oppTM.OpportunityId;
                            newOppTM.TeamMemberRole = 'Regional Manager';
                            insertOTM.add(newOppTM);
                        }
                    }
                }
            }
            if(!insertOTM.isEmpty()) {
                insert insertOTM;
            }
      }
   }
}