You need to sign in to do that
Don't have an account?
mw6
Auto create a contact from Case created by web-to-case, if the contact is not existing
Hi I have created below trigger to create the contact when a case is inserted via web-to-case. There is no error, and I am not sure why the contact is not getting created. I have only one custom field on contact to mark as auto created, rest all are standard fields. Can anybody help to figure out the issue..
trigger AutocreateContactfromCase on Case (before insert) {
List<String> emailAddresses = new List<String>();
for (Case caseObj:Trigger.new) {
if (caseObj.ContactId==null && caseObj.SuppliedEmail!='')
{
emailAddresses.add(caseObj.SuppliedEmail);
}
}
List<Contact> listContacts = [Select Id, Email From Contact Where Email in :emailAddresses];
Set<String> takenEmails = new Set<String>();
for (Contact c:listContacts) {
takenEmails.add(c.Email);
}
Map<String,Contact> emailToContactMap = new Map<String,Contact>();
List<Case> casesToUpdate = new List<Case>();
for (Case caseObj:Trigger.new) {
if (caseObj.ContactId==null &&
caseObj.SuppliedName!=null &&
caseObj.SuppliedName!='' &&
caseObj.SuppliedEmail!=null &&
caseObj.SuppliedEmail!='' &&
caseObj.SuppliedPhone!=null &&
caseObj.SuppliedPhone!='' &&
!takenEmails.contains(caseObj.SuppliedEmail))
{
String[] nameParts = caseObj.SuppliedName.split(' ',2);
if (nameParts.size() == 2)
{
Contact cont = new Contact(FirstName=nameParts[0],
LastName=nameParts[1],
Email=caseObj.SuppliedEmail,
Phone=caseObj.SuppliedPhone,
Autocreated__c=true);
emailToContactMap.put(caseObj.SuppliedEmail,cont);
casesToUpdate.add(caseObj);
}
}
}
List<Contact> newContacts = emailToContactMap.values();
insert newContacts;
for (Case caseObj:casesToUpdate) {
Contact newContact = emailToContactMap.get(caseObj.SuppliedEmail);
caseObj.ContactId = newContact.Id;
}
}
trigger AutocreateContactfromCase on Case (before insert) {
List<String> emailAddresses = new List<String>();
for (Case caseObj:Trigger.new) {
if (caseObj.ContactId==null && caseObj.SuppliedEmail!='')
{
emailAddresses.add(caseObj.SuppliedEmail);
}
}
List<Contact> listContacts = [Select Id, Email From Contact Where Email in :emailAddresses];
Set<String> takenEmails = new Set<String>();
for (Contact c:listContacts) {
takenEmails.add(c.Email);
}
Map<String,Contact> emailToContactMap = new Map<String,Contact>();
List<Case> casesToUpdate = new List<Case>();
for (Case caseObj:Trigger.new) {
if (caseObj.ContactId==null &&
caseObj.SuppliedName!=null &&
caseObj.SuppliedName!='' &&
caseObj.SuppliedEmail!=null &&
caseObj.SuppliedEmail!='' &&
caseObj.SuppliedPhone!=null &&
caseObj.SuppliedPhone!='' &&
!takenEmails.contains(caseObj.SuppliedEmail))
{
String[] nameParts = caseObj.SuppliedName.split(' ',2);
if (nameParts.size() == 2)
{
Contact cont = new Contact(FirstName=nameParts[0],
LastName=nameParts[1],
Email=caseObj.SuppliedEmail,
Phone=caseObj.SuppliedPhone,
Autocreated__c=true);
emailToContactMap.put(caseObj.SuppliedEmail,cont);
casesToUpdate.add(caseObj);
}
}
}
List<Contact> newContacts = emailToContactMap.values();
insert newContacts;
for (Case caseObj:casesToUpdate) {
Contact newContact = emailToContactMap.get(caseObj.SuppliedEmail);
caseObj.ContactId = newContact.Id;
}
}
Execute the above snippet in after trigger context as you are performing DML on related list.
Regards,
Surojit