ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Dynamics Crm 365 查询Retrieve的Plugins,需要通过业务逻辑判断,将部分字段不展示处理,但是遇到EntityReference=Null没有效果的问题

2022-03-25 12:03:46  阅读:206  来源: 互联网

标签:Key attribute entity EntityReference context serviceProvider 365 tracer Crm


Dynamics Crm 365 查询Retrieve的Plugins,需要通过业务逻辑判断,将部分字段不展示处理,但是遇到EntityReference=Null没有效果

原先做的处理是:不能查看的字段直接赋值NULL,但是奇怪的是PC段没问题,手机端Cube却针对EntityReference和OptionSettion类型的没有效果

后来换了一种思路, 在postRetrieve的时候再查询一次,然后覆盖entity返回

    public class RetrieveParameters : IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {

            Microsoft.Xrm.Sdk.IPluginExecutionContext context = (Microsoft.Xrm.Sdk.IPluginExecutionContext)
            serviceProvider.GetService(typeof(Microsoft.Xrm.Sdk.IPluginExecutionContext));

            IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
            IOrganizationService adminService = serviceFactory.CreateOrganizationService(null);

            ITracingService tracer = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
            tracer.Trace("开始执行线索RetrieveParameters插件Execute方法。");
            if (context.Depth > 1)
            {
                tracer.Trace("context.Depth > 1 返回执行程序");
                return;
            } if (context.OutputParameters.Contains("BusinessEntity"))
            {
                Entity entity = (Entity)context.OutputParameters["BusinessEntity"];
                tracer.Trace(entity.LogicalName);
                if (BllService.CheckOwner(entity,adminService,context,tracer,isSalesManager))
                {
                    return;
                }
                if (entity.LogicalName == "account")
                {
                    #region 客户
                    if (BllService.checkAccountGroupAndShare(entity, adminService, context, tracer))
                    {
                        return;
                    }

                    BllService.cleanAccountIndustry1(entity, adminService);
                    var Attributes = entity.Attributes.ToArray();

                    entity = service.Retrieve("account", entity.Id, new ColumnSet("accountid", "name", "accountnumber", "ownerid", "scc_cust_class"));

                    //for (int i = 0; i < Attributes.Count(); i++) //旧方式
                    //{
                    //    var attribute = Attributes[i];
                    //    if (attribute.Key != "accountid" && attribute.Key != "name" && attribute.Key != "accountnumber" && attribute.Key != "ownerid" && attribute.Key != "scc_cust_class")
                    //    {
                    //        entity[attribute.Key] = null;
                    //    }
                    //}

                    #endregion

                }
              
                context.OutputParameters["BusinessEntity"] = entity;
            }
        }
    }

 

标签:Key,attribute,entity,EntityReference,context,serviceProvider,365,tracer,Crm
来源: https://www.cnblogs.com/parkerchen/p/16053974.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有