Loading... <p style="TEXT-INDENT: 2em">微软的CRM 4.0的关联视图(associated view)中,Inactive的记录默认是不显示的;在3.0中微软曾经提供了一个工具来解决这个问题,但4.0中微软官方已经不提供方法来修正这个问题。</p> <p style="TEXT-INDENT: 2em">不过在4.0中解决这个问题也很简单,只需要写一个Plugin就可以解决所有问题。</p> <p style="TEXT-INDENT: 2em">Plugin的基本思路是:将我们自己的代码嵌入到RetieveMultiple 消息中,修改其中的查询条件,将过滤Inactive记录的ConditionExpression去掉。</p> <p style="TEXT-INDENT: 2em"><!--more--></p> <p style="TEXT-INDENT: 2em">简单代码如下:</p> <p style="TEXT-INDENT: 2em">using Microsoft.Crm.Sdk;</p> <p style="TEXT-INDENT: 2em">using Microsoft.Crm.Sdk.Query;</p> <p style="TEXT-INDENT: 2em">namespace RekTec.Crm.Plugins</p> <p style="TEXT-INDENT: 2em">{</p> <p style="TEXT-INDENT: 2em">public class AssociatedViewPlugin : IPlugin</p> <p style="TEXT-INDENT: 2em">{</p> <p style="TEXT-INDENT: 2em">public void Execute(IPluginExecutionContext context)</p> <p style="TEXT-INDENT: 2em">{</p> <p style="TEXT-INDENT: 2em">if (context.InputParameters.Contains(ParameterName.Query))</p> <p style="TEXT-INDENT: 2em">{</p> <p style="TEXT-INDENT: 2em">QueryExpression qe = context.InputParameters[ParameterName.Query] as QueryExpression;</p> <p style="TEXT-INDENT: 2em">if (qe.EntityName == context.PrimaryEntityName</p> <p style="TEXT-INDENT: 2em">&& qe.Criteria != null</p> <p style="TEXT-INDENT: 2em">&& qe.Criteria.Conditions != null</p> <p style="TEXT-INDENT: 2em">&& qe.Criteria.Conditions.Count == 2)</p> <p style="TEXT-INDENT: 2em">{</p> <p style="TEXT-INDENT: 2em">//找到针对statecode的过滤条件</p> <p style="TEXT-INDENT: 2em">ConditionExpression ce = qe.Criteria.Conditions[0] as ConditionExpression;</p> <p style="TEXT-INDENT: 2em">if (ce != null</p> <p style="TEXT-INDENT: 2em">&& ce.AttributeName == "statecode"</p> <p style="TEXT-INDENT: 2em">&& ce.Operator == ConditionOperator.Equal</p> <p style="TEXT-INDENT: 2em">&& ((int)ce.Values[0]) == 0)</p> <p style="TEXT-INDENT: 2em">{</p> <p style="TEXT-INDENT: 2em">//去掉对statecode的过滤</p> <p style="TEXT-INDENT: 2em">qe.Criteria.Conditions.Remove(ce);</p> <p style="TEXT-INDENT: 2em">}</p> <p style="TEXT-INDENT: 2em">}</p> <p style="TEXT-INDENT: 2em">}</p> <p style="TEXT-INDENT: 2em">}</p> <p style="TEXT-INDENT: 2em">}</p> <p style="TEXT-INDENT: 2em">} 编译如上的代码生成DLL文件,然后通过CRM的Plugin注册工具将这个Plugin注册到需要显示Inactive记录的实体的RetrieveMultiple Message中就OK啦。</p> 相关文章 【Redis持久化】服务器突然挂了!Redis缓存都在内存中啊 MSCRM4 数据审核(系统日志) MSCRM4 在过滤后的Lookup框中实现查找 Last modification:December 24th, 2010 at 02:43 pm © 允许规范转载 Support 如果觉得我的文章对你有用,请随意赞赏 ×Close Appreciate the author Sweeping payments Pay by AliPay Pay by WeChat