/// <summary> /// Поднимает событие биндинга внутреннего грида. /// </summary> protected PagingResult OnRequestDataSource(object sender, PagingArgs args) { // поднимаем событие биндинга. if (RequestDatasource != null) return RequestDatasource(this, args); return null; }
/// <summary> /// Возвращает коллекцию полных новостей из архива для заданного пользователя. /// </summary> /// <returns></returns> public static PagingResult GetArchiveNews(PagingArgs args, int? personID) { NewsCollection coll = new NewsCollection(); string[] offices = GetUserOfficesStringIDs(personID); int total_count; coll.FillFromDataSet(DBManager.GetArchiveNews(args, out total_count, offices)); return new PagingResult(coll, total_count); }
PagingResult OnRequestDatasource(object sender, PagingArgs args) { int? userID = (CurrentUser != null) ? CurrentUser.ID : null; PagingResult result = NewsManager.GetArchiveNews( args, userID ); return result; }
PagingResult OnRequestDatasource(object sender, PagingArgs args) { PagingResult result = NewsManager.SearchNews( args, tbSearchText.Text, Int32.Parse(ddlAuthors.SelectedItem.Value), (DBManager.NewsStatus) ddlNewsStatus.SelectedIndex, CurrentUser.ID.Value, Int32.Parse(ddlOffices.SelectedItem.Value), (DBManager.SearchPeriod) ddlPeriod.SelectedIndex ); return result; }
/// <summary> /// Поиск новостей. /// </summary> /// <param name="args"> аргументы пэйджинга</param> /// <param name="strSearchTerms"> слова для поиска</param> /// <param name="iSearchAuthorID">ID автора</param> /// <param name="iNewsStatus">Статус новости</param> /// <param name="personID">ID пользователя,просматривающего страницу</param> /// <param name="officeID">ID офиса</param> /// <param name="iPeriod">период для поиска</param> /// <returns></returns> public static PagingResult SearchNews(PagingArgs args, String searchTerms, int searchAuthorID, UlterSystems.PortalLib.DB.DBManager.NewsStatus newsStatus, int personID, int officeID, UlterSystems.PortalLib.DB.DBManager.SearchPeriod period ) { NewsCollection coll = new NewsCollection(); int total_count; string[] offices = GetUserOfficesStringIDs(personID); coll.FillFromDataSet(DBManager.SearchNews(args, out total_count, searchTerms, searchAuthorID, newsStatus, officeID, offices, period)); return new PagingResult(coll, total_count); }
/// <summary> /// Возвращает датасет, содержащий страницу записей из БД, /// соответствующих объектам заданного типа. /// </summary> /// <param name="type">Тип объектов.</param> /// <param name="args">Параметры страницы.</param> /// <param name="totalCount">Общее количество объектов данного типа.</param> /// <returns></returns> private static DataSet GetObjectsPageDataset(Type type, PagingArgs args, out int totalCount, params object[] param) { BaseCommand command = GetObjectsPageCommand(type, args, param); DataSet ds = command.ExecDataSet(); totalCount = Convert.ToInt32(command.GetReturnValue()); return ds; }
/// <summary> /// Возвращает страницу объектов, связанных с данным по ключевому полю. /// Первичным ключём для данного объекта считается ID. /// </summary> /// <param name="type">Тип связанных объектов.</param> /// <param name="propertyName">Имя свойства связанных объектов, /// по которому происходит связь с данным.</param> /// <returns>Результат импорта. Если объекты не найдены, то он пустой.</returns> public virtual PagingResult GetLinkedObjectsPage(Type type, PagingArgs args, string propertyName, params object[] param) { if (!DBAttributesManager.HasDBTableAttribute(type)) throw new CoreInvalidOperationException(ResourceManager.GetString("TypeDBTableException", type.FullName)); PagingResult result = PagingResult.Empty; if (ID.HasValue) { object[] par = new object[param.Length + 2]; par[0] = propertyName; par[1] = ID.Value; param.CopyTo(par, 2); result = GetObjectsPage(type, args, par); } return result; }
/// <summary> /// Возвращает страницу объектов, связанных с данным по ключевому полю. /// Первичным ключём для данного объекта считается ID. /// </summary> /// <param name="type">Тип связанных объектов.</param> /// <param name="propertyName">Имя свойства связанных объектов, /// по которому происходит связь с данным.</param> /// <returns>Результат импорта. Если объекты не найдены, то он пустой.</returns> public virtual PagingResult GetLinkedObjectsPage(Type type, PagingArgs args, string propertyName) { if (!DBAttributesManager.HasDBTableAttribute(type)) throw new CoreInvalidOperationException(ResourceManager.GetString("TypeDBTableException", type.FullName)); PagingResult result = PagingResult.Empty; if (ID.HasValue) result = GetObjectsPage(type, args, propertyName, ID.Value); return result; }
/// <summary> /// Возвращает страницу объектов заданного типа, отфильтрованную по заданным полям /// </summary> /// <param name="type">Тип объекта</param> /// <param name="args">Параметры страницы</param> /// <param name="param">Параметры фильтрации в формате имя свойства - значение - ...</param> /// <returns></returns> public static PagingResult GetObjectsPageWithCondition(Type type, PagingArgs args, params object[] param) { Type tp = typeof(BaseObjectCollection<>); Type[] tpArgs = { type }; Type collectionType = tp.MakeGenericType( tpArgs ); object coll = Activator.CreateInstance( collectionType ); int totalCount = 0; MethodInfo fill_from_dataset_method = coll.GetType().GetMethod("FillFromDataSet", new Type[] { typeof(DataSet) }); fill_from_dataset_method.Invoke(coll, new object[] { GetObjectsPageDataset(type, args, out totalCount, param) }); return new PagingResult(coll, totalCount); }
/// <summary> /// Возвращает команду БД для получения постраничного списка объектов. /// </summary> /// <param name="type">Тип объектов.</param> /// <param name="args">Параметры страницы.</param> /// <returns></returns> public static BaseCommand GetObjectsPageCommand(Type type, PagingArgs args, params object[] param) { Dictionary<string, object> prms; var statement = ObjectMapper.GetSelectQueryStatement(type); statement.ConcatClauses(GetObjectByFieldCondition(type, out prms, param)); BaseCommand command = new Query(statement.ToString()); foreach (string key in prms.Keys) { command.Add(key, prms[key]); } var procedure = new Procedure("uiGetObjectsPage"); procedure.Add("@PageIndex", args.PageIndex); procedure.Add("@PageSize", args.PageSize); procedure.Add("@OrderField", args.SortExpression); procedure.Add("@IsOrderASC", args.SortOrderASC); procedure.Add("@Query", ObjectMapper.GetCommandFullText(command)); procedure.AddReturnValueParameter(); return procedure; }
/// <summary> /// Возвращает страницу объектов заданного типа. /// </summary> /// <param name="type">Тип объектов.</param> /// <param name="args">Параметры страницы.</param> /// <param name="param">Дополнительные параметры выборки.</param> /// <returns>Результат пейджинга. Если объекты не найдены, то результат пустой.</returns> public static PagingResult GetObjectsPage(Type type, PagingArgs args, params object[] param) { Type tp = typeof(BaseObjectCollection<>); Type[] tpArgs = { type }; Type collectionType = tp.MakeGenericType(tpArgs); if (!string.IsNullOrEmpty(args.SortExpression)) { PropertyInfo prop = ObjectPropertiesMapper.GetDBReadPropertyByName(type, args.SortExpression); if (prop == null) throw new CoreInvalidOperationException(ResourceManager.GetString("PropertyException", type.FullName, args.SortExpression)); args.SortExpression = ObjectPropertiesMapper.GetFieldNameByProperty(prop); } object coll = Activator.CreateInstance(collectionType); int totalCount = 0; MethodInfo fill_from_dataset_method = coll.GetType().GetMethod("FillFromDataSet", new [] { typeof(DataSet) }); fill_from_dataset_method.Invoke(coll, new object[] { GetObjectsPageDataset(type, args, out totalCount, param) }); return new PagingResult(coll, totalCount); }
/// <summary> /// Возвращает страницу объектов заданного типа. /// </summary> /// <param name="type">Тип объектов.</param> /// <param name="args">Параметры страницы.</param> /// <returns>Результат пейджинга. Если объекты не найдены, то результат пустой.</returns> public static PagingResult GetObjectsPage( Type type, PagingArgs args ) { return GetObjectsPage( type, args, null ); }
/// <summary> /// Возвращает все объекты данного типа в виде коллекции типа collectionType, /// отсортированные по значениям указанного свойства. /// </summary> /// <param name="type">Тип обьекта.</param> /// <param name="collectionType">Тип коллекции.</param> /// <param name="sortPropertyName">Имя свойства класса, по которому нужно сортировать значения.</param> /// <param name="sortOrderAsc"></param> /// <param name="param">true - если по возрастанию, false - по убыванию.</param> /// <returns>Коллекция типа collectionType.</returns> public static object GetObjects(Type type, Type collectionType, string sortPropertyName, bool sortOrderAsc, params object[] param) { // получаем свойство по имени свойства PropertyInfo prop = ObjectPropertiesMapper.GetDBReadPropertyByName( type, sortPropertyName ); if (prop == null) throw new CoreInvalidOperationException(ResourceManager.GetString("PropertyException", type.FullName, sortPropertyName)); // получаем имя поля string fieldName = ObjectPropertiesMapper.GetFieldNameByProperty(prop); // формируем аргументы выборки var args = new PagingArgs(0, PagingArgs.MaxPageSize, fieldName, sortOrderAsc); int totalCount; // получаем данные object coll = Activator.CreateInstance(collectionType); MethodInfo fill_from_dataset_method = coll.GetType().GetMethod("FillFromDataSet", new[] {typeof (DataSet)}); fill_from_dataset_method.Invoke(coll, new object[] {GetObjectsPageDataset(type, args, out totalCount, param)}); return coll; }
/// <summary> /// Возвращает датасет полных новостей из архива. /// </summary> /// <returns></returns> public static DataSet GetArchiveNews(PagingArgs args, out int total_count, String[] offices) { String query = "SELECT n.ID,Caption,Text,AuthorID,CreateTime,ExpireTime,OfficeID, PostID,u.LastName FROM News n,Users u"; DateTime dt = DateTime.Now.Date; query += " WHERE n.AuthorID=u.ID AND ExpireTime<=CONVERT(datetime, '" + dt.ToString(CultureInfo.InvariantCulture.DateTimeFormat) + "', 101)"; query += " AND (OfficeID=" + String.Join(" OR OfficeID=", offices) + ")"; Procedure procedure = new Procedure("uiGetObjectsPage"); procedure.Add("@PageIndex", args.PageIndex); procedure.Add("@PageSize", args.PageSize); procedure.Add("@OrderField", args.SortExpression); procedure.Add("@IsOrderASC", args.SortOrderASC); procedure.Add("@Query", query); procedure.AddReturnValueParameter(); DataSet ds = procedure.ExecDataSet(); total_count = Convert.ToInt32(procedure.GetReturnValue()); return ds; }
///// <summary> ///// Возвращает датасет редакторов всех новостей. ///// </summary> ///// <returns>Датасет редакторов всех новостей.</returns> //public static DataSet GetNewsEditors() //{ // String query = "select distinct u.* from "; // query += ObjectMapper.GetDBTableName(typeof(Person)) + " u, "; // query += ObjectMapper.GetDBTableName(typeof(GroupMembership)) + " pg, "; // query += ObjectMapper.GetDBTableName(typeof(Group)) + " g "; // query += " where u.ID = pg.PersonID"; // query += " and pg.GroupID = g.ID"; // query += " and (g.GroupID = '" + Group.GroupsEnum.OfficeNewsEditor + "' or g.GroupID='" + Group.GroupsEnum.GeneralNewsEditor + "')"; // Query q = new Query(query); // DataSet ds = q.ExecDataSet(); // return ds; //} /// <summary> /// Возвращает датасет с результатами поиска новостей. /// </summary> /// <param name="SearchTerms">Искомые слова в тексте и заголовках.</param> /// <param name="SearchAuthor">Искомый автор.</param> public static DataSet SearchNews(PagingArgs args, out int total_count, string searchTerms, int searchAuthorID, NewsStatus newsStatus, int officeID, string[] offices, SearchPeriod period ) { if (searchTerms == null) searchTerms = String.Empty; // Period DateTime searchDateTime = new DateTime(1754, 1, 1); switch (period) { case SearchPeriod.Day: searchDateTime = DateTime.Now.AddDays(-1); break; case SearchPeriod.ThreeDays: searchDateTime = DateTime.Now.AddDays(-3); break; case SearchPeriod.Week: searchDateTime = DateTime.Now.AddDays(-7); break; case SearchPeriod.Month: searchDateTime = DateTime.Now.AddDays(-30); break; case SearchPeriod.HalfYear: searchDateTime = DateTime.Now.AddMonths(-6); break; case SearchPeriod.Year: searchDateTime = DateTime.Now.AddYears(-1); break; } // Author String[] aTerms; // aTerms = strSearchAuthor.Split(new char[] { ' ' }); String searchQuery = "SELECT t1.ID,Caption,Text,AuthorID,CreateTime,ExpireTime,OfficeID, PostID, t2.LastName FROM [Portal].[dbo].[News] t1 inner join (select ID,LastName from [Portal].[dbo].[Users]"; if (searchAuthorID != 0) { searchQuery += " where ("; /*searchQuery += " FirstName LIKE '%" + String.Join("%' OR FirstName LIKE '%", aTerms) + "%'"; searchQuery += " OR MiddleName LIKE '%" + String.Join("%' OR MiddleName LIKE '%", aTerms) + "%'"; searchQuery += " OR LastName LIKE '%" + String.Join("%' OR LastName LIKE '%", aTerms) + "%'";*/ searchQuery += "ID = " + searchAuthorID; searchQuery += " )"; } searchQuery += ") as t2 on t1.AuthorID = t2.ID "; searchQuery += " WHERE ( CreateTime >= CONVERT(datetime, '" + searchDateTime.ToString(CultureInfo.InvariantCulture.DateTimeFormat) + "', 101)"; // Terms aTerms = searchTerms.Split(new char[] { ' ' }); searchQuery += " AND (( Caption LIKE '%" + String.Join("%' AND Caption LIKE '%", aTerms) + "%' )"; searchQuery += " OR ( Text LIKE '%" + String.Join("%' AND Text LIKE '%", aTerms) + "%' ))"; switch (newsStatus) { case NewsStatus.ActualNews: searchQuery += " AND (ExpireTime > GetDate())"; break; case NewsStatus.ArchiveNews: searchQuery += " AND (ExpireTime <= GetDate())"; break; } if (officeID == -1) { searchQuery += " AND (OfficeID=" + String.Join(" OR OfficeID=", offices) + ")"; } else searchQuery += " AND OfficeID=" + officeID; searchQuery += ")"; Procedure procedure = new Procedure("uiGetObjectsPage"); procedure.Add("@PageIndex", args.PageIndex); procedure.Add("@PageSize", args.PageSize); procedure.Add("@OrderField", args.SortExpression); procedure.Add("@IsOrderASC", args.SortOrderASC); procedure.Add("@Query", searchQuery); procedure.AddReturnValueParameter(); DataSet ds = procedure.ExecDataSet(); total_count = Convert.ToInt32(procedure.GetReturnValue()); return ds; }