• 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;
                }
            }
        }
  • 相关阅读:
    ConcurrentSkipListMap 源码分析
    ConcurrentHashMap 源码分析
    CopyOnWriteArrayList 源码分析
    AtomicBoolean 源码分析
    commons-lang3-3.4.jar
    Effective Java
    FindBugs Bug Descriptions
    EasyMock
    Apache Maven 入门
    Eclipse
  • 原文地址:https://www.cnblogs.com/parkerchen/p/16053974.html
Copyright © 2020-2023  润新知