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 }
记得收藏并关注,掌握更多相关知识!!!