数据重复检测(Duplication Detection)

FAQ 1: 我已经设置了数据重复检测功能,为什么数据录入有时候没法捕捉到重复数据呢?

原因: CRM 4.0中的Duplication Detection功能部分要依赖Async Service在后台异步执行, 本质上不完全是实时执行的。下面是个大致的原理:

步骤1. 当你从CRM界面的Rule Editor上(Settings –> Data Management –> Duplicate Detection Rules)编辑建立并发布一个rule以后,后台SQL数据库里发生如下动作:

1)    插入rule/conditions的定义到两张表DuplicateRuleBase, DuplicateRuleConditionBase;

2)    在AsyncOperationBase中插入一个循环的工作job (GenerateMatchCode Job),用来根据定义的Duplication Rule对相应的entity的每条记录定期扫描生成对应的matchcode (默认下扫描周期为每5分钟).

3)   生成用来存储matchcode的SQL表格供步骤2使用,名字类似MatchCodeXXX. 该SQL表格也会被DuplicateRuleBase表格引用。

image

步骤2:GenerateMatchCode Job开始在后台循环运行,默认下每5分钟运转一次.

image

该Job的主要目的是扫描对应的实体记录,生成MatchCode放到MatchCodeXXXXX表格中供后续的数据重复检测用:

image

 

步骤3: 用户在数据录入时候要求检测数据重复性。这个是通过DuplicatePlugin来做的,你可以通过下面的界面来决定是否在数据录入时候挂接该Plugin:

image 

DuplicatePlugin依赖查询比较MatchCode表来判断是否有数据重复,使用类似如下的查询语句:

SELECT M.ObjectId FROM dbo.MatchCode328d3b54e64541dbb2946f5895e3aa76 As M WHERE M.MatchCode = test@microsoft.com ' AND M.MatchCode IS NOT NULL.

所以虽然Plugin是同步实时运行的,但是MatchCode表格内容是由步骤2的GenerateMatchCode Job来生成的,所以数据重复检测结果并不完全是实时的。

当然你可以修改步骤2中的GenerateMatchCode Job的间隔(RecurrencePattern),但是由此会对后台SQL系统产生更大的压力,尤其是占用更多AsyncService的资源,所以并不建议缩短间隔周期。解决办法是可以通过建立Duplicate Detection Jobs来做二次数据重复检测,如下图所示:

image

FAQ2: 为什么我的DuplicateRecordBase库表越来越大?有什么办法清除吗?

原因: 你的系统里有很多用户建立的数据重复检测工作 (Duplicate Detection Jobs),这些工作把运行结果存储在DuplicateRecordBase中,当用户在前台点击View Duplicates的时候结果数据就能被返回。

解决办法是:不再需要使用的那些Duplicate Detection Jobs要定期从界面上手动删除,这样等待大概24个小时后CRMAsyncService.exe会做物理删除SQL表格DuplicateRecordBase中的相应records.