本篇中要讲的是对产品视图基于某个条件进行过滤显示,而手段就是通过插件中的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. Linux玩转redis从入门到放肆--1.缓存击穿

    1. 缓存穿透在大多数互联网应用中,缓存的使用方式如下图所示: 1.当业务系统发起某一个查询请求时,首先判断缓存中是否有该数据:2.如果缓存中存在,则直接返回数据:3.如果缓存中不存在,则再查询数据库 ...

  2. Pycharm配置autopep8:自动调整代码为PEP8风格

    关于PEP 8 PEP 8,Style Guide for Python Code,是Python官方推出编码约定,主要是为了保证 Python 编码的风格一致,提高代码的可读性. 官网地址:http ...

  3. 深入理解java虚拟机读书笔记--java内存区域和管理

    第二章:Java内存区域和内存溢出异常 2.2运行时数据区域 运行时数据区分为方法区,堆,虚拟机栈,本地方法栈,程序计数器 方法区和堆是线程共享的区域 虚拟机栈,本地方法栈,程序计数器是数据隔离的数据 ...

  4. 线程中消费者生产者的实例代码(synchronized关键字)

    http://www.cnblogs.com/DreamDrive/p/6204665.html  这个是用Lock类实现的. 场景: 厨师类: import java.util.List; impo ...

  5. centos6 Linux安装redis 2.6.14

    1.获取安装文件 wget http://download.redis.io/redis-stable.tar.gz 2.解压文件 tar xzvf redis-stable.tar.gz 3.进入目 ...

  6. Mac 安装 Ruby, Rails 运行环境

    对于新入门的开发者,如何安装 Ruby, Ruby Gems 和 Rails 的运行环境可能会是个问题,本页主要介绍如何用一条靠谱的路子快速安装 Ruby 开发环境. 次安装方法同样适用于产品环境! ...

  7. .net 中 C# 简单自定义事件实现

    个人认为事件处理机制是一种很好的机制 特别是可以方便安全的实现窗口间(子窗口对父窗口,子窗口间等)的消息传递.功能调用 下面展现的源自以前论坛上看到的一套方法,可能记得不大准确,所以可能不规范,我的理 ...

  8. 详解C#泛型(二)

    一.自定义泛型方法(Generic Method),将类型参数用作参数列表或返回值的类型: void MyFunc<T>() //声明具有一个类型参数的泛型方法 { Type generi ...

  9. 面试题----C语言中exit和return的区别

    C语言中return和exit的区别 exit用于结束进程,返回的状态码是给操作系统使用或父进程使用的.return是堆栈返回,返回的值是给主调函数用的.主线程结束前会默认调用exit结束进程. ex ...

  10. 通过HttpServletRequest获取服务器路径

    String scheme = request.getScheme(); String serverName = request.getServerName(); int port = request ...