本篇中要讲的是对产品视图基于某个条件进行过滤显示,而手段就是通过插件中的retrievemultiple消息,可能很多人都写过对它都不陌生。

先来看张插件注册的截图,插件的message是retrievemultiple,对应的实体我这里用的是product(为什么用它是因为它特殊,因为它特殊才有了本篇博文),事件是pre-operation(这个很好理解,在展现数据之前就要过滤好,一定是pre中的操作了)

以前写的代码是这样的,判断InputParameters是不是query,然后再判断query的实体是不是产品,再进行逻辑处理

if (context.InputParameters.Contains("Query") && context.InputParameters["Query"] is QueryExpression)
                {
                    QueryExpression query = (QueryExpression)context.InputParameters["Query"];

                    if (query.EntityName == "product")
                    {
                        //逻辑处理
                    }
                }

但在365online(2016on-premises也是同样的问题)中死活不行,然后断点调了下发现query.EntityName中居然没有product了,调试下来发现取到的都是下面这些鬼

email

queue

solution

savedquery

systemuserroles

rb_userroleviewconfiguration

rb_roleviewconfiguration

userquery 

很奇怪,product去哪了,不用QueryExpression筛数据那用什么筛啊,咱们把问题往前推到第一个if,看下面这张截图,你会发现尼玛变FetchExpression了而不是QueryExpression,所以第一个if都没进怎么可能进第二个if呢

我尝试的实体不多,目前发现的产品、客户、联系人都是这种情况,自定义的实体用QueryExpression都ok的,一开始猜测是不是系统实体都改FetchExpression筛选了,但尝试了报价单的视图用QueryExpression过滤是可以的,有时间得好好查查资料看看什么个情况,如果有人了解其中缘由的也欢迎分享。

下面奉上FetchExpression的代码,这里用到了FetchExpression和QueryExpression之间的互相转化

 if (context.InputParameters["Query"] is FetchExpression)
                {
                    FetchExpression fetch = (FetchExpression)context.InputParameters["Query"];
                    var conversionRequest = new FetchXmlToQueryExpressionRequest
                    {
                        FetchXml = fetch.Query
                    };
                    var conversionResponse =
                        (FetchXmlToQueryExpressionResponse)service.Execute(conversionRequest);

                    // Use the newly converted query expression to make a retrieve multiple
                    // request to Microsoft Dynamics CRM.
                    query = conversionResponse.Query;
                    if (query.EntityName == "product" && context.Depth == 1)
                    {
                        //逻辑
                    }
                    // Convert the query expression to FetchXML.
                    var converRequest = new QueryExpressionToFetchXmlRequest
                    {
                        Query = query
                    };
                    var converResponse =
                        (QueryExpressionToFetchXmlResponse)service.Execute(converRequest);

                    // Use the converted query to make a retrieve multiple request to Microsoft Dynamics CRM.
                    String fetchXml = converResponse.FetchXml;
                    fetch.Query = fetchXml;
                }

FetchExpression和QueryExpression之间的互相转化的msdn示例:

https://msdn.microsoft.com/zh-cn/library/hh547457.aspx

Dynamics 365Online 通过插件中的retrievemultiple消息来过滤产品视图的更多相关文章

  1. Microsoft Dynamics CRM 2011的组织服务中的RetrieveMultiple方法(转)

    本篇文章,介绍Microsoft Dynamics CRM 2011的组织服务中的RetrieveMultiple方法. RetreiveMultiple方法,用于获取实体的多个实例,该方法的签名如下 ...

  2. Dynamics 365 CE在Pre Delete插件中应用Image

    微软动态CRM专家罗勇 ,回复327或者20190428可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me! 在插件中限制记录的删除是常见的场景,比如根据statuscode ...

  3. Dynamics 365 Customer Engagement中插件的调试

    微软动态CRM专家罗勇 ,回复319或者20190319可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 本文主要根据官方的教 ...

  4. Dynamics 365Online 使用adal.js注册和配置SimpleSPA应用程序

    本篇是基于dynamics 365online撰写,本文中使用的365online及azure均为试用版,因为online在国内还没落地,所以我申请的是新加坡版,online的申请方式可见我之前的博文 ...

  5. 如何将钉钉集成到FineReport插件中

    报表服务器 安装钉钉管理插件后,打开报表管理平台,管理系统下会增加钉钉管理节点,钉钉相关的配置管理都将会放在这个节点中去配置: 同时,设置定时任务的最后一步输出设置中,会增加推送钉钉消息: 钉钉企业应 ...

  6. Dynamic CRM插件中记录日志-Nlog记录到文本

    Dynamic CRM插件中记录日志的方式有多种 通常情况下分为ITracingService记录.单独日志表插入记录.文本记录三种. 之前整理过ITracingService记录的方式,但这种记录有 ...

  7. 详解jquery插件中;(function ( $, window, document, undefined )的作用

    在jquery插件中我们经常看到以下这段代码 1 2 3 ;(function ( $, window, document, undefined ){ //函数体内具体代码 })(jQuery, wi ...

  8. ZeroMQ接口函数之 :zmq_msg_recv - 从一个socket中接受一个消息帧

    ZeroMQ 官方地址 :http://api.zeromq.org/4-2:zmq_msg_recv zmq_msg_recv(3) ØMQ Manual - ØMQ/3.2.5 Name zmq_ ...

  9. 在eclipse的maven插件中搜寻本地仓库中的jar搜索不到的解决方案

    在eclipse的maven插件中搜寻本地仓库中的jar搜索不到的解决方案 之前,用过maven管理项目的童鞋都知道本地会有一个${User_Home}.m2/repository仓库 是用来存放ja ...

随机推荐

  1. FastDFS高可用集群架构配置搭建

      一.基本模块及高可用架构 FastDFS 是余庆老师开发的一个开源的高性能分布式文件系统(DFS). 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡. FastDFS 系统有 ...

  2. centos clamav杀毒软件安装配置及查杀,没想到linux下病毒比windows还多!

    centos clamav杀毒软件安装配置及查杀,没想到linux下病毒比windows还多! 一.手动安装 1.下载(官网)    cd /soft     wget http://www.clam ...

  3. .NET Framework 源码查看与调试

    1. 直接下载.NET Framework源代码(下载地址),然后用Visual Studio 13 打开查看.2. 在线查看,网址:http://referencesource.microsoft. ...

  4. Liferay7.0与cas单点登录配置

    1.简介     Liferay7.0支持多种登录方式,包括:常规的.opensso.cas.ntlm.ldap.openid.Facebook.Google等. 其中, (1) 常规:则是默认Lif ...

  5. java学习-加载.properties工具类

    javaWeb项目,要加载xxx.properties或其它如.txt, .md后缀的文本文件 文本内容有两种格式 key:value或者key=value 诸如Spring框架,Jfinal框架,都 ...

  6. postgresql 清空数据表数据

    在 mysql中,只需要执行: TRUNCATE table_name; 即可,数据会情况,而且自增id也会变回0: 但在 postgresql 则稍有不同,因为 postgresql 的自增id是通 ...

  7. 状态管理Vuex

    路由Router 配置 {path:'/login',component:Login} 路由出口 router-view 传参 {path:'/login/:id',component:Login} ...

  8. 并发编程—— LinkedTransferQueue

    1. 前言 Java 中总的算起来有 8 种阻塞队列. 我们分析了: 并发编程之 SynchronousQueue 核心源码分析 并发编程之 ConcurrentLinkedQueue 源码剖析 并发 ...

  9. 【angular5项目积累总结】结合adal4实现http拦截器(token)

    import { Injectable } from '@angular/core'; import { HttpEvent, HttpInterceptor, HttpHandler, HttpRe ...

  10. node.js遇到的问题

    1.cann't find module 'request'   不能找到’request' 模块 解决方法:找到项目的根路径,cd到该路径,运行命令 npm install request 2.no ...