Разгледах конвенционалните методи за използване на инструменти за дедупиране, но тъй като работя за организация, която е мултиалианс, инструментът за дедупиране разглежда цялата база данни, когато всъщност трябва да разгледам сегменти от базата данни, така че реших да се опитам да създам свой собствен инструмент за дедупиране.
Досега създадох следния апекс. В момента Apex преглежда името на компанията на потенциалния клиент и ако има точно съвпадение с името на друга компания в базата данни, той предоставя на потребителя съобщение за грешка „друг нов потенциален клиент има същото име на фирма“
Това е чудесно, ако името на компанията е точно, но имам нужда да бъде по-гъвкаво.
Например, ако „Burger King Limited“ е потенциален клиент, създаден през 2012 г., и продавачът е решил да създаде потенциален клиент, наречен „Burger King LTD“ през 2013 г., което е същата компания като потенциалния клиент, създаден през 2012 г.
Искам да изградя размита логика, която разглежда новия потенциален клиент и ако има лека прилика, пренебрегва новия потенциален клиент
Trigger DuplicateLeadPreventer on Lead
(before insert, before update) {
//Get map of record types we care about from Custom Setting
Map<String, Manage_Lead_Dupes_C__c> leadrtmap = Manage_Lead_Dupes_C__c.getAll();
//Since only certain leads will match, put them in a separate list
List<Lead> LeadstoProcess = new List<Lead> ();
//Company to Lead Map
Map<String, Lead> leadMap = new Map<String, Lead>();
for (Lead lead : Trigger.new) {
//Only process for Leads in our RecordTypeMap
if (leadrtmap.keyset().contains(lead.RecordTypeId) ) {
// Make sure we don't treat an Company name that
// isn't changing during an update as a duplicate.
if (
(lead.company != null) &&
(Trigger.isInsert ||
(lead.company != Trigger.oldMap.get(lead.Id).company))
)
{
// Make sure another new lead isn't also a duplicate
if (leadMap.containsKey(lead.company)) {
lead.company.addError('Another new lead has the '
+ 'same company name.');
} else {
leadMap.put(lead.company , lead);
LeadstoProcess.add(lead);
}
}
} //end RT If Check
} //End Loop
/*
Using a single database query, find all the leads in
the database that have the same company address as any
of the leads being inserted or updated.
*/
Set<String> ExistingCompanies = new Set<String> ();
for (Lead l: [Select Id, Company from Lead WHERE Company IN :leadMap.keyset()
AND RecordTypeId IN :leadrtmap.keyset()]) {
ExistingCompanies.add(l.Company);
}
//Now loop through leads to process, since we should only loop if matches
for (Lead l : LeadstoProcess) {
if (ExistingCompanies.contains(l.company) ) {
l.company.addError('A lead with this company '
+ 'name already exists.');
}
}
}