/// <summary> /// Записываем в лог инфу о найденых карточках. Пишем ИД карточки и её рег номер /// </summary> private void WriteLogInfo(DBItemCollection items, DBList list) { Console.WriteLine($"{Environment.NewLine}Найдено карточек: {items.Count}"); this.Loger.WriteLine($"{Environment.NewLine}Дата {DateTime.Now.ToString()} найдено карточек: {items.Count}{Environment.NewLine}Информация о найденых карточках:"); if (items.Count == 0) { return; } //устанавливаем load type DBField field = list.GetField(Consts.Fields.RegNumber, true); field.ValueLoadingType = DBFieldValueIOType.Directly; //собираем всю инфу (ИД карточки и её рег номер) и потом записываем разом в лог StringBuilder itemsinfo = new StringBuilder(); foreach (DBItem item in items) { itemsinfo.AppendLine($"ItemID = '{item.ID}' Регистрационный номер: '{item.GetStringValue(Consts.Fields.RegNumber)}'"); } this.Loger.WriteLine(itemsinfo.ToString()); }
/// <summary> /// Вычисляет доступные группы рассылки для текущего пользователя /// </summary> /// <returns>SQL-запрос</returns> public string GetGroups() { string result = string.Empty; //Список группы рассылки DBList deviringList = this.Site.RootWeb.GetList(Consts.DeliveringGroups.ListName, true); //список «WSSC_Доступ к группам рассылки» DBWeb web = this.Site.GetWeb("dms", true); DBList accessList = web.GetList(Consts.Lists.AccessOfDelivering.ListName, true); //поля в которых нужно проверять текущего юзера DBFieldLookupMulti fieldGroups = accessList.GetField <DBFieldLookupMulti>(Consts.Lists.AccessOfDelivering.Fields.UsersGroups, true); DBFieldLookupMulti fieldUsers = accessList.GetField <DBFieldLookupMulti>(Consts.Lists.AccessOfDelivering.Fields.Users, true); DBFieldLookupMulti fieldDevGroups = accessList.GetField <DBFieldLookupMulti>(Consts.Lists.AccessOfDelivering.Fields.DeliverinGroups, true); //текущий юзер DBUser currentUser = this.Context.CurrentUser; //группы текущего юзера IEnumerable <int> currentUsersGroups = currentUser.AllGroups.Select(group => group.ID); List <string> devGroupsID = new List <string>(); foreach (DBItem accessItem in accessList.GetItems($"{fieldUsers.GetSelectCondition(currentUser.ID)} OR {fieldGroups.GetSelectCondition(currentUsersGroups)}")) { devGroupsID.AddRange(accessItem.GetLookupValues(Consts.Lists.AccessOfDelivering.Fields.DeliverinGroups).Select(lv => lv.LookupID.ToString())); } string devGroupsIDStr = string.Join(",", devGroupsID.Distinct().ToArray()); string condition = devGroupsIDStr.Length > 0 ? $"OR[ID] IN({ devGroupsIDStr})" : string.Empty; result = $@" [ID] IN ( SELECT [ID] FROM {deviringList.TableName} WITH(NOLOCK) WHERE ([{Consts.DeliveringGroups.AccessRestriction}] = 0 OR [{Consts.DeliveringGroups.AccessRestriction}] IS NULL) {condition} ) "; //throw new Exception(result); return(result); }