本篇中要讲的是对产品视图基于某个条件进行过滤显示,而手段就是通过插件中的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. 对于opencv全面貌的认识和理解

    1.opencv其实最开始只有源码,也就是sources中的代码,sources中有个modules,进入里面是各个我们平常使用的模块,如下图. 进入任意一个模块,比如calib3d,其中有inclu ...

  2. JS常用工具函数(持续记录)

    1.设置获取cookie //方式1 //设置cookie function SetCookie(name, value)//两个参数,一个是cookie的名字,一个是值 { var Days = 3 ...

  3. (转)csv — 逗号分隔值文件格式

    原文:https://pythoncaff.com/docs/pymotw/csv-comma-separated-value-files/125 csv 模块主要用于处理从电子数据表格或数据库中导入 ...

  4. c++处理类型与自定义数据结构

    1.typedef 类型别名 有时我们在阅读c++程序时,发现一些未见过的类型,这实际上就是typedef导致的,使用很简单,如下: typedef int wayne; wayne a = , b ...

  5. android的电话监听

    android的电话监听 新建一个项目,结构图如下: PhoneService: package com.demo.tingdianhua; import android.app.Service; i ...

  6. JAVA面试精选【Java算法与编程一】

    在面试中,算法题目是必须的,通过算法能够看出一个程序员的编程思维,考察对复杂问题的设计与分析能力,对问题的严谨性都能够体现出来.算法是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时 ...

  7. 什么情况下ArrayList增删 比LinkedList 更快

    public static void main(String[] args){ final int MAX_VAL = 10000; List<Integer> linkedList = ...

  8. dex内存提取

    转 http://blog.csdn.net/asmcvc/article/details/18216531 智能手机的普及将移动互联网的发展推到了一个让所有人都为之兴奋的高度,我想即使是以商业眼光见 ...

  9. elk-nginx输出json格式的日志

    把Nginx日志的格式输出成JSON格式展示在Kibana面板,生产环境中基本都是这么使用. 1, 配置nginx 主要修改nginx的访问日志格式,这里定义成json格式,以便后面logstash更 ...

  10. ExecutorService——<T> Future<T> submit(Callable<T> task)

    提交一个有返回值的任务用于执行,且返回一个Future对象,用来表示行将发生的任务的结果. 如果任务执行成功的话,那么Future对象的get方法将会返回任务的执行结果T.   如果你想要立即阻塞,等 ...