Home > CRM, Javista, Microsoft, Microsoft Dynamics, Microsoft Dynamics CRM Online, Plug-in > Synchronous Matchcode Generation – Forced Duplicate Detection in Dynamics CRM 4

Synchronous Matchcode Generation – Forced Duplicate Detection in Dynamics CRM 4

Microsoft Dynamics CRM 4.0 provides a Duplicate Detection feature to protect the quality of your data. Duplicate Detection rules can be defined for different record types, including custom entities, and can be defined across record types as well.

In background a matchcode service is running and creating/updating matchcode for new/existing records. This matchcode will be matched to detect duplicates. The Matchcode service runs asynchronously after 5 minutes and create/updates matchcode. So any record that is inserted within 5 minutes of time will not be detected. This happens only when you insert record within less than 5 minutes of time or before generation of matchcode. This results in no warning message for duplicate records even though duplicate record exists according to duplicate rules.

There is no way to persist matchcodes synchronously when records are created/updated through the UI, without writing extra code. So here are few recommendations to do so.

1. A workaround is to Import data (Tools->Import), and choose the option to prevent creation of duplicate records. This will create the matchcodes for all imported records synchronously.

2. You can force the creation of a matchcode at the time of record create/update by including the PersistInSyncOptionalParameter in the Create/Update request and setting its value to ‘True’. A code snippet that includes the optional parameter in a CreateRequest is as follows:

CreateRequest request = new CreateRequest();
request.OptionalParameters = new OptionalParameter[] { new PersistInSyncOptionalParameter (true) };

3. You can write a plugin for this at Create and Update message.

if (context.Depth <= 1)
                {
                    if ((message.ToLower() == “create”))
                    {
                        DynamicEntity entity = (DynamicEntity)context.InputParameters.Properties[ParameterName.Target];

                        TargetCreateDynamic createdynamic = new TargetCreateDynamic();
                        createdynamic.Entity = entity;                      

                        CreateRequest request = new CreateRequest();
                        request.Target = createdynamic;
                        request.OptionalParameters = new OptionalParameter[] { new PersistInSyncOptionalParameter(true) };

                        CreateResponse response = (CreateResponse)service.Execute(request);
                    }
                }
                context.InputParameters.Properties[ParameterName.Target] = null;

Cheers,

Ayaz Ahmad

Advertisements
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: