Donnerstag, 5. März 2009

Pimp your Duplicate Detection with Phonetic Matching (Soundex)




Ever wanted to get some more "fuzziness" in your detection rules? Then Soundex as a phonetic algorithm will be your friend. There are some caveats but for some applications it might be useful. The nice thing is, that it's super-easy to implement.

Let's consider two options (in your project you might want to go for a "best of both worlds" approach by using both):

Method1 Clientside: Generating the Soundex-Code at the onSave event
Pro: Quick and easy implementation
Con: Will not work on imports or Bulk Operations

Step by step:

1) add a custom field "new_soundex_lastname" to the desired entity (lead, account, contact or any custom entity)



2) add the field to the form

3) add this onSave event:
function soundex(str) {
// original from http://phpjs.org/functions/soundex:520

var i, j, l, r, p = isNaN(p) ? 4 : p > 10 ? 10 : p < 4 ? 4 : p;
var m = {BFPV: 1, CGJKQSXZ: 2, DT: 3, L: 4, MN: 5, R: 6};
var r = (s = (str+'').toUpperCase().replace(/[^A-Z]/g, "").split("")).splice(0, 1);
var sl = 0;

sl
= s.length;
for (i = -1, l = sl; ++i < l;) {
for (j in m) {
if (j.indexOf(s[i]) + 1 && r[r.length-1] != m[j] && r.push(m[j])) {
break;
}
}
}

return r.length > p && (r.length = p), r.join("") + (new Array(p - r.length + 1)).join("0");
}

crmForm.all.new_soundex_lastname.DataValue
=soundex(crmForm.all.lastname.DataValue);

4) add a duplicate rule & publish


5) enjoy life without unneccessary duplicates ;-)

Method 2 Plugin: Firing at Pre-Create event
Pro: Works on Imports
Con: A bit more work

You can also create a plugin that generates the soundex-code, just use an example on how to do that.