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

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

作者:互联网

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