微软的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啦。