Set Defaults for Opportunity Contact Roles (when converting)
It’s always bugged me that the Primary flag and a Role are not set on Opportunity Contact Roles when converting a Lead. After every convert, I manually set these. Typically, I set the Role to “Decision Maker”and the Primary Flag to True. I got sick of doing this manually, so I wrote a trigger for it and I am sharing it with you all.
Trigger
trigger Opportunities on Opportunity (after insert) {
Opportunities o = new Opportunities();
o.SetContactRoleDefaults(Trigger.new);
}
Class
public class Opportunities {
// Default Constructor
public Opportunities()
{
}
// Sets default values on the Contact Role record created during Conversion. Called on AFTER INSERT
public void SetContactRoleDefaults(Opportunity[] opptys)
{
/***************
* Variables
***************/
set<ID> set_opptyIDs = new set<ID>();
/***************
* Initial Loop
***************/
// Get a set of the Opportunity IDs being affected.
for(Opportunity o:opptys) {
set_opptyIDs.add(o.id);
}
/***************
* Process Records
***************/
// Update the Contact Role record to be Primary and the Decision Maker
list<OpportunityContactRole> list_opptyContactRolesToUpdate = new list<OpportunityContactRole>();
for(OpportunityContactRole ocr:[select Id,IsPrimary,Role from OpportunityContactRole where OpportunityId in :set_opptyIDs]) {
ocr.IsPrimary = true;
ocr.Role = 'Decision Maker';
list_opptyContactRolesToUpdate.add(ocr);
}
if (list_opptyContactRolesToUpdate.size() > 0) {
update list_opptyContactRolesToUpdate;
}
}
}
Test Class
@isTest
private class Opportunities_Test {
static testMethod void SetContactRoleDefaults_Test() {
// Create a Lead
Lead l = new Lead();
l.lastname = 'Lastname';
l.firstname = 'FirstName';
l.company = 'Company';
insert l;
// Convert the Lead
Database.LeadConvert lc = new database.LeadConvert();
lc.setLeadId(l.id);
LeadStatus convertStatus = [Select Id, MasterLabel from LeadStatus where IsConverted=true limit 1];
lc.setConvertedStatus(convertStatus.MasterLabel);
Database.LeadConvertResult lcr = Database.convertLead(lc);
System.assert(lcr.isSuccess());
// Query Contact Role Records and Asserts all was set correctly.
for (OpportunityContactRole ocr:[select Id,IsPrimary,Role from OpportunityContactRole where OpportunityId = :lcr.getOpportunityId()]) {
system.AssertEquals('Decision Maker', ocr.Role);
system.AssertEquals(true, ocr.IsPrimary);
}
}
}
