You need to sign in to do that
Don't have an account?
Fetching Lead fields to update Contact fields in a trigger fired by 'Convert Lead'?
All,
I have had a request from a user, and I am struggling with how to accomodate it.
My user works with Leads, and is frustrated that the address information input for the Leads is not transferred to the new Contact created when the Lead is converted. I have looked into the standard functionality, and have found that this information is instead transferred to the Account which is created. I can create a new set of custom fields for both the Lead and Contact records to transfer this information, but I don't feel this adequately meets my users' needs.
Instead, I am trying to determine if I can update the Contact information as it is being created by the 'Convert Lead' process, using an APEX trigger. Unfortunately, I can find little information about how triggers relate to the 'Convert Lead' process. I have looked at the discussion boards, blogs, and developer's guide, but cannot seem to find the information I need.
I am aware that I may need to request that the 'Enforce Validation and Triggers from Lead Convert' functionality be enabled in my org, and that this will allow me to use the 'before create' trigger setting to create a trigger on the Contact object which will allow me to update the fields in the Contact record before it is saved. However, how do I access the original Lead in the trigger to allow me to grab the address information stored in the Lead?
Any help would be greatly appreciated.
hmm.. I didn't know that. Thanks for the info.
well if that's the case then I would write a trigger like so
trigger UpdateContactAddressUponLeadConversion on Lead( after update ) { // Instantiate a list of Contacts to update List< Contact > cList = new List< Contact >(); for ( Lead l : Trigger.new ) { // Check to see if the lead was converted into a Contact if ( l.ConvertedContactId != null ) { // Get the Contact to update Contact c = [select id, MaillingCity, MailingCountry, MailingPostalCode, MailingState, MailingStreet from Contact where id = :l.ConvertedContactId]; // Update the Address fields c.MaillingCity = l.City; c.MailingCountry = l.Country; c.MailingPostalCode = l.PostalCode; c.MailingState = l.State; c.MailingStreet = l.Street; cList.add( c ); } } // Update the Contacts update cList; }
All Answers
Instead of solving this via APEX, why don't you create formula fields that are the same value as the Lead's address fields.
Then map those formula fields to the Contact Address fields upon lead conversion. Then you won't have to deal with all those silly APEX rules.
Whyser,
That is a great question. The problem is that I cannot map custom Lead fields to standard Contact fields. The ability to perform this mapping has been requested on the AppExchange, but does not appear to be currently under consideration for inclusion in SalesForce.
hmm.. I didn't know that. Thanks for the info.
well if that's the case then I would write a trigger like so
trigger UpdateContactAddressUponLeadConversion on Lead( after update ) { // Instantiate a list of Contacts to update List< Contact > cList = new List< Contact >(); for ( Lead l : Trigger.new ) { // Check to see if the lead was converted into a Contact if ( l.ConvertedContactId != null ) { // Get the Contact to update Contact c = [select id, MaillingCity, MailingCountry, MailingPostalCode, MailingState, MailingStreet from Contact where id = :l.ConvertedContactId]; // Update the Address fields c.MaillingCity = l.City; c.MailingCountry = l.Country; c.MailingPostalCode = l.PostalCode; c.MailingState = l.State; c.MailingStreet = l.Street; cList.add( c ); } } // Update the Contacts update cList; }
Whyser,
Thank you so much for your time and feedback. The suggested solution worked beautifully.
I guess I just needed some more information about how Leads stored their connection to the Contacts records converted from them.