Dyanmics CRM,Plugin消息RetrieveMultiple(修改视图列表显示结果)跨表查询

RetrieveMultiple消息会在系统加载视图时触发。包括在代码里查询也会触发,所以使用是也要考虑清楚不要影响到其他插件的查询结果。
插件工具注册如下图。是需要注册在触发前,如果触发后好像是没有用的。
在这里插入图片描述
在OP环境中,新UCI、经典模式以及高及查找使用的查询类型是不一样的。online还有待验证。
UCI中使用的是FetchExpression 也是fetchXML查询
经典模式和高级查找使用的是QueryExpression。

所以如果要在多个模式同时使用,那就要分类别写逻辑。
有很多情况都可以使用这个消息,看个人需求所用。

以下举一个例子,现在有A、B、C三个表关系如下:
A–B 1:N
B–C 1:N
A–C没有直接关系
需求:需要在A表子网格里显示C表中和A表有关系的B表记录的所有C表记录。
处理方法,C表建立和A表的关系。在C表中加入了一个A表的查询字段。这个字段无需赋值,是为了配置视图。在子网格视图中选择仅关联记录。
这样就能顺利的触发我们的插件,之后就可以在插件里搞事情了。

在这里插入图片描述

var Query = context.InputParameters["Query"];

                if (Query.GetType() == typeof(FetchExpression))
                {
                    FetchExpression fetchXml = Query as FetchExpression;
                    //读取XML
                    XmlDocument XmlDo = new XmlDocument();
                    XmlDo.LoadXml(fetchXml.Query);

                    //获取link-entity节点
                    XmlNodeList Xmlnl = XmlDo.GetElementsByTagName("link-entity");
//加入你要处理的逻辑,比如修改filter或者删除节点。处理过滤器。
//如果按我上面的逻辑在XML中就会返回触发视图的A表ID,通过ID查询到关联B表记录ID就修改掉filter条件就可以在A表显示C表数据
                    //更新XML
                    fetchXml.Query = XmlDo.InnerXml;
                    context.InputParameters["Query"] = fetchXml;
                }
                else
                {
                    QueryExpression queryExpression = Query as QueryExpression;

                    //获取筛选条件
                    FilterExpression filterExpression = queryExpression.Criteria;

                    if (filterExpression.Conditions.Count == 2)
                    {
                        foreach (ConditionExpression item in filterExpression.Conditions)
                        {
                           //加入你要处理的逻辑,比如修改filter或者删除节点。处理过滤器。
//这个相对XML要容易改一些,可以直接将filter值修改掉,同样也可以做增删改。
                            
                        }
                        queryExpression.Criteria = filterExpression;
                        context.InputParameters["Query"] = queryExpression;
                    }
                }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值