Размита логика / съвпадение по име на фирма (потенциални клиенти)

Разгледах конвенционалните методи за използване на инструменти за дедупиране, но тъй като работя за организация, която е мултиалианс, инструментът за дедупиране разглежда цялата база данни, когато всъщност трябва да разгледам сегменти от базата данни, така че реших да се опитам да създам свой собствен инструмент за дедупиране.

Досега създадох следния апекс. В момента 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.');
        }
    }
}

person Masond3    schedule 16.04.2013    source източник