微软的CRM 4.0的关联视图(associated view)中,Inactive的记录默认是不显示的;在3.0中微软曾经提供了一个工具来解决这个问题,但4.0中微软官方已经不提供方法来修正这个问题。

不过在4.0中解决这个问题也很简单,只需要写一个Plugin就可以解决所有问题。

Plugin的基本思路是:将我们自己的代码嵌入到RetieveMultiple 消息中,修改其中的查询条件,将过滤Inactive记录的ConditionExpression去掉。

简单代码如下:

using Microsoft.Crm.Sdk;

using Microsoft.Crm.Sdk.Query;

namespace RekTec.Crm.Plugins

{

public class AssociatedViewPlugin : IPlugin

{

public void Execute(IPluginExecutionContext context)

{

if (context.InputParameters.Contains(ParameterName.Query))

{

QueryExpression qe = context.InputParameters[ParameterName.Query] as QueryExpression;

if (qe.EntityName == context.PrimaryEntityName

&& qe.Criteria != null

&& qe.Criteria.Conditions != null

&& qe.Criteria.Conditions.Count == 2)

{

//找到针对statecode的过滤条件

ConditionExpression ce = qe.Criteria.Conditions[0] as ConditionExpression;

if (ce != null

&& ce.AttributeName == "statecode"

&& ce.Operator == ConditionOperator.Equal

&& ((int)ce.Values[0]) == 0)

{

//去掉对statecode的过滤

qe.Criteria.Conditions.Remove(ce);

}

}

}

}

}

} 编译如上的代码生成DLL文件,然后通过CRM的Plugin注册工具将这个Plugin注册到需要显示Inactive记录的实体的RetrieveMultiple Message中就OK啦。

最后修改:2010 年 12 月 24 日
一分也是爱