Dynamics 365Online通过插件中的retrievemultiple消息来过滤产品视图

Dynamics 365Online通过插件中的retrievemultiple消息来过滤产品视图,第1张

概述本篇中要讲的是对产品视图基于某个条件进行过滤显示,而手段就是通过插件中的retrievemultiple消息,可能很多人都写过对它都不陌生。 先来看张插件注册的截图,插件的message是retrievemultiple,对应的实体我这里用的是product(为什么用它是因为它特殊,因为它特殊才有

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

    先来看张插件注册的截图,插件的message是retrIEvemultiple,对应的实体我这里用的是product(为何用它是由于它特殊,由于它特殊才有了本篇博文),事件是pre-operation(这个很好理解,在展现数据之前就要过滤好,1定是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了,调试下来发现取到的都是下面这些鬼

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



      我尝试的实体不多,目前发现的产品、客户、联系人都是这类情况,自定义的实体用queryExpression都ok的,1开始猜想是否是系统实体都改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消息来过滤产品视图全部内容,希望文章能够帮你解决Dynamics 365Online 通过插件中的retrievemultiple消息来过滤产品视图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1015725.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存