You need to sign in to do that
Don't have an account?
Jerry Clifft
Help with trigger on lead that adds data from custom object
So, here is my situation.
Standard object = Lead
Standard object = PostalCode
Standard Object Custom field = Sales Territory
Custom Object = Zipcode
Custom Object Field = ZipCode
Custom Object Field = Sales Territory
I am trying to write a trigger on the lead (before insert, before update) that takes the PostalCode on the lead, lookups the same Postalcode in my ZipCode custom object and inserts the value of Sales Territory into the lead.
How can I do this?
Hi,
If I follow your path :
- Start from a Lead where to get the ZipCode
- Query the ZipCode into the PostalCode object
- And there, what is link with the Sales Territory object ?
Sounds good. I attempted to do this:
trigger LeadfindTLR on Lead (After Insert, After Update) {
Set<Id> ZipCodeIds = new Set<Id>();
Set<Id> LeadIds = new Set<Id>();
// On Lead take the zipcode and find that zipcode in the custom object Zipcodes then update the lead field "Territory" with data from the field Queue_ID custom object Zipcode.
for (Lead L: Trigger.New){
if (L.Name != null && L.PostalCode != null )
LeadIds.add(L.Id);
ZipCodeIds.add(L.PostalCode);
}
Lead L2 = [select id, Status from Lead where ID in :LeadIds];
if(L2.Status != 'Closed'){
Zipcodes__c z = [select Territory__c from Zipcodes__c where Name in :ZipCodeIds];
L2.Territoy__c = z.Territory__c;
}
Update L2;
}
Now, SF let's me save the trigger, but when I create a new lead (postalcode = 78664), I receive the following error:
Error: Invalid Data.
Review all error messages below to correct your data.
Apex trigger LeadfindTLR caused an unexpected exception, contact your administrator: LeadfindTLR: execution of AfterInsert caused by: System.StringException: Invalid id: 78664: External entry point
I seem to have something out of whack....
run into governor limits (BULK).
Do this outside of the loop.
Regarding your error, seems like you're mistaking lead id and lead zip code.
I am not sure how to do that. Also I think I am doing something wrong with part of that trigger, as I get the error below:
Apex trigger LeadfindTLR caused an unexpected exception, contact your administrator: LeadfindTLR: execution of AfterInsert caused by: System.StringException: Invalid id: 78664: External entry point.
Not sure where to go from, any/all help is appreciated.
map<string,string>maps=new map<string,string>();
list<lead>leadlist=newlist<lead>();
replace this line by
Lead L2 = [select id, Status from Lead where ID in :LeadIds];
if(L2.Status != 'Closed'){
Zipcodes__c z = [select Territory__c from Zipcodes__c where Name in :ZipCodeIds];
L2.Territoy__c = z.Territory__c;
}
Update L2;
}
by
Zipcodes__c z = [select Territory__c from Zipcodes__c where Name in :ZipCodeIds];
maps.put(postalcode,territory);
for(lead l11:trigger.new)
{
l11.territoy__c=maps.get(l11.postalcode)
leadlist.add(l11);
}
update leadlist;
Thanks for teh reply, I put this together best I could: here is what I got...
trigger LeadfindTLR2 on Lead (After Insert, After Update) {
map<string,string>maps=new map<string,string>();
list<lead>leadlist=new list<lead>();
Set<Id> ZipCodeIds = new Set<Id>();
Set<Id> LeadIds = new Set<Id>();
// On Lead take the zipcode and find that zipcode in the custom object Zipcodes then update the lead field "Territory" with data from the field Queue_ID custom object Zipcode.
for (Lead L: Trigger.New){
if (L.Name != null && L.PostalCode != null )
LeadIds.add(L.Id);
ZipCodeIds.add(L.PostalCode);
}
Zipcodes__c z = [select Name from Zipcodes__c where Name in :ZipCodeIds];
maps.put(postalcode,Name);
for(lead l11:trigger.new)
{
l11.territoy__c=maps.get(l11.postalcode);
leadlist.add(l11);
}
update leadlist;
}
I now receive the following error when I try to save:
Error: Compile Error: Variable does not exist: postalcode at line 17 column 18