Dynamic CRM 365 通过自身GUID的集合多查询QueryExpression的例子&查询当前登录人所属业务部门下(含下级部门)的用户&QueryExpression的And和Or的使用

     private List<AccoutSaleModel> GetAccountSaleMsgs(IOrganizationService adminService)
        {
            List<object> accoutidList = new List<object>();
            accoutidList.Add(new Guid("xxxxx"));
            accoutidList.Add(new Guid("xxxxx")); 

            QueryExpression qe = new QueryExpression("account");
            qe.Criteria.AddCondition("accountid", ConditionOperator.In, accoutidList.ToArray());
            qe.ColumnSet.AddColumns("accountid", "scc_sales_area", "scc_state", "scc_credit_rating");
            var ec = adminService.RetrieveMultiple(qe);
            if (ec != null && ec.Entities.Count > 0)
            {
                foreach (var en in ec.Entities)
                {
                   。。。
                }
            }

            return accList;

        }

 

不是GUID的,也可以这样处理:

/// <summary>
/// 当前登录人所属业务部门下(含下级部门)的用户
/// </summary>
/// <returns></returns>
private List<SystemUserModel> GetBMLowerOweridList(IOrganizationService adminService, Guid currUserid,string querystring)
{
    var useridList = new List<SystemUserModel>();
    List<object> busidList = GetLowBusinessidList(adminService, currUserid);
    QueryExpression qe = new QueryExpression("systemuser");
    qe.Criteria.AddCondition("businessunitid", ConditionOperator.In, busidList.ToArray());
    if (!string.IsNullOrWhiteSpace(querystring))
    {
        qe.Criteria.AddCondition("fullname", ConditionOperator.Contains, querystring);
    }
    qe.ColumnSet.AddColumns("systemuserid","fullname");
    var ec = adminService.RetrieveMultiple(qe);
    if (ec != null && ec.Entities.Count > 0)
    {
        foreach (var en in ec.Entities)
        {
            useridList.Add(new SystemUserModel()
            {
                userid = en.Id.ToString(),
                username = en.GetAttributeValue<string>("fullname")
            });
        }
    }
    return useridList;
}

 

/// <summary>
/// 获取指定用户对应的部门的下级所有部门ID(包含当前ID)
/// </summary>
/// <returns></returns>
private List<object> GetLowBusinessidList(IOrganizationService adminService,Guid currUserid)
{
    List<object> busidList = new List<object>();
    List<object> currBusidList = new List<object>();  //当前级别的部门ID
    Entity busEn = adminService.Retrieve("systemuser", currUserid, new ColumnSet("businessunitid"));
    if (busEn != null && busEn.Contains("businessunitid"))
    {
        Guid businessunitid = busEn.GetAttributeValue<EntityReference>("businessunitid").Id;  //当前用户的部门ID
        busidList.Add(businessunitid);
        currBusidList.Add(businessunitid);

        for (int i = 0; i < 20; i++)  //最多兼容20级
        {
            if (currBusidList.Count <= 0)
            {
                break;
            }
            //查询下级所有部门id
            QueryExpression qe = new QueryExpression("businessunit");
            qe.Criteria.AddCondition("parentbusinessunitid", ConditionOperator.In, currBusidList.ToArray());
            qe.ColumnSet.AddColumns("businessunitid", "parentbusinessunitid");
            var ac = adminService.RetrieveMultiple(qe);
            if (ac == null || ac.Entities.Count <= 0)
            {
                break;
            }
            currBusidList = new List<object>();  //清空当前层级的id
            foreach (var en in ac.Entities)
            {
                if (!busidList.Contains(en.Id))
                {
                    busidList.Add(en.Id);
                }
                if (!currBusidList.Contains(en.Id))
                {
                    currBusidList.Add(en.Id);
                }
            }
        }

    }

    return busidList;
}

 

QueryExpress 的And和Or的使用

QueryExpression queryEntity = new QueryExpression("logicalNameOfTheEntity");
            queryEntity.ColumnSet = new ColumnSet("attribute1", "attribute2");
            
            FilterExpression Filter1 = new FilterExpression(LogicalOperator.And);
            Filter1.AddCondition("field1_logicalname", ConditionOperator.Equal, value1);
            Filter1.AddCondition("field2_logicalname", ConditionOperator.Equal, value2);

            FilterExpression Filter2 = new FilterExpression(LogicalOperator.And);
            Filter2.AddCondition("field3_logicalname", ConditionOperator.Equal, value3);
            Filter2.AddCondition("field4_logicalname", ConditionOperator.Equal, value4);

            FilterExpression mainFilter = new FilterExpression(LogicalOperator.Or);
            mainFilter.AddFilter(Filter1);
            mainFilter.AddFilter(Filter2);
            queryEntity.Criteria = mainFilter;
            EntityCollection queryEntityRecords = service.RetrieveMultiple(queryEntity);
            foreach (var entityRecord in queryEntityRecords.Entities)
            {
                
                //Your code logic here
            }

 

posted @ 2022-04-15 17:53  溜溜球_小钢wan  阅读(171)  评论(0编辑  收藏  举报