You need to sign in to do that
Don't have an account?
Eric Blaxton.ax1862
Trigger help with Opportunity and Opportunity team members
Hi and thanks for reading this and for any help...
The requirement is to stop users from saving duplicate Team Member roles when they add or edit their Default Opportunity or Account Team.
So, if Tom wants to add users to his default opp team, he can only add 1 "Sales Manager", 1 "Sales Lead", etc.
Eric
Hi,
You can do this for OpportunityTeamMember via a trigger but not for AccountTeamMember object as its not supported for trigger.
Here is trigger code that does pretty much what you need...!
I made some tweaks....had to deal with nullpointer exception by using try/catch, among other little things.
trigger OppTeamMemberTrigger on OpportunityTeamMember (before insert) {
//This is for stopping a duplicate Opportunity Team Member from being inserted.
Set<id> oppIds = new Set<id>();
for(OpportunityTeamMember member : trigger.new)
{
oppIds.add(member.OpportunityId);
}// end for
List<OpportunityTeamMember> teamMembers = [Select id, TeamMemberRole, OpportunityId from OpportunityTeamMember where OpportunityId IN : oppIds];
Map<id, Set<String>> teamMembersMap = new Map<id, Set<String>>();
Try
{
//Organizing Opportunities and team member roles in map to check for duplicates.
for(OpportunityTeamMember member : teamMembers)
{
if(teamMembersMap.containsKey(member.OpportunityId))
teamMembersMap.get(member.OpportunityId).add(member.TeamMemberRole);
else
teamMembersMap.put(member.OpportunityId, new Set<String> {member.TeamMemberRole} );
}// end for
for(OpportunityTeamMember member : trigger.new){
//Checking for duplicate teamMemberRole
if(teamMembersMap.get(member.OpportunityId).contains(member.TeamMemberRole))
member.addError(''A ' + member.TeamMemberRole + ' already exists on this Opportunity Team, please remove or edit existing persons role.');
}// end for
}// end try
catch (System.NullPointerException e)
{
// just temporary until i figure this out
System.debug('There was an error!');
}
}// end trigger
Yes, this worked fine on the Opportunity Team. As far as I know, a trigger on the Account Team is not supported. I dealt with the null pointer by adding the try/catch error handler. Everything works fine.
Let me know if you need any clarification.
Thanks
Put this piece of code between line 2 and line 3 (for initial creation duplicate check) . It worked for me. Hope it helps you!!!
for(Integer i=0;i<NewOpportunityTeamMembers.size();i++)
{
for (Integer j=i+1;j<NewOpportunityTeamMembers.size();j++)
{
// Check for dupliacte contract negotiators being added at the same time.
if((NewOpportunityTeamMembers[i].OpportunityId==NewOpportunityTeamMembers[j].OpportunityId)&&
(NewOpportunityTeamMembers[i].TeamMemberRole==NewOpportunityTeamMembers[j].TeamMemberRole)&&
(NewOpportunityTeamMembers[i].TeamMemberRole=='Contract Negotiator'))
{NewOpportunityTeamMembers[i].addError('Multiple people of Contract Negotiator role cannot be added to the same team. Please keep only one Contract Negotiator');}
// Check for dupliacte Budget Finance Specialist's being added at the same time.
if((NewOpportunityTeamMembers[i].OpportunityId==NewOpportunityTeamMembers[j].OpportunityId)&&
(NewOpportunityTeamMembers[i].TeamMemberRole==NewOpportunityTeamMembers[j].TeamMemberRole)&&
(NewOpportunityTeamMembers[i].TeamMemberRole=='Budget Finance Specialist'))
{NewOpportunityTeamMembers[i].addError('Multiple people of Budget Finance Specialist role cannot be added to the same team. Please keep only one Budget Finance Specialist');}
}
}
Regards
Shrey Tyagi