Запросы задач Redmine. Как мы их усовершенствовали и как используем


    Коробочный Redmine имеет достаточно гибкую систему запросов. Задачи можно фильтровать практически по всем полям, выбирая нужные, группировать вывод и сортировать результаты.

    Cтолкнувшись с использованием Redmine в качестве единой информационной среды в компании, мы пришли к выводу, что стандартный функционал запросов использовать не совсем удобно.

    Первая причина – это большое общее количество запросов.

    Разветвленные жизненные циклы и различные типы задач обуславливают необходимость достаточно большого количества сохраненных запросов. Как следствие, боковая панель превращается в кучу плохо различимых ссылок.



    Что мы сделали

    Написали небольшой плагинчик Redmine Extra Queries, который упрощает работу с запросами задач.

    В нем реализовали функцию разбивки сохраненных запросов по категориям. Это помогло систематизировать запросы, и мы достаточно долго жили с этим, но общей проблемы не решило. Среднестатистический пользователь пугается выбора нужной ссылки из большого количества запросов, поэтому мы реализовали возможность закрепления самых важных запросов на боковой панели сверху, а остальные спрятали.

    Администратор Redmine может закрепить самые важные запросы всем пользователям и отсортировать их перетаскиванием мыши. Каждый пользователь может закрепить нужные лично ему запросы. Таким образом, мы минимизировали количество ссылок на боковой панели, оставив возможность получать доступ к более редким запросам в случае необходимости.



    Интерфейс фильтрации задач и сохранения запроса в Redmine разный (не совсем понятно почему?!). Причем, последний представляет собою адскую форму.
    Адская форма сохранения запроса


    Мы объединили два интерфейса в один и минимизировали его.
    Пользователь может сначала настроить фильтры, затем проконтролировать результат фильтрации и тут же сохранить запрос.



    Всегда можно посмотреть по каким параметрам отфильтрованы задачи.



    Почему-то поля со списком значений в Redmine не сортируются по алфавиту. Со временем, задачи и другие сущности обрастают большим количеством настраиваемых полей, что приводит процедуру выбора нужного значения в выпадающем списке в квест по перебору значений.
    Мы отсортировали значения во всех полях и добавили функцию поиска по подстроке, чтобы условия фильтрации можно было задавать быстрее.



    Как мы используем запросы задач в Redmine.

    Ну понятно, что используем по прямому назначению (так как это задумано разработчиками). Сохраняем запросы, чтобы пользователь мог быстро найти нужные ему задачи. Но еще мы применяем их повсеместно для различных настроек.

    Например, у нас есть плагин «Unread issues», который позволяет отображать зеленый и синий кружочек с количеством непрочитанных задач. Зеленый, когда пользователь совсем не читал задачу и синий – когда читал, но с момента прочтения в задаче что-то изменилось.

    Этот же плагин делает ссылку с кружочками-счетчиками в топ-меню на мою страницу. Кружочки показывают суммарное количество непрочитанных задач, назначенных на пользователя.



    Программисту периодически приходилось переписывать запрос, отвечающий за подсчет счетчиков. Затем мы ввели настройку, которая определяла на основе какого запроса задач считать счетчики непрочитанных задач.



    Проблема сразу ушла, теперь администратор может быстро изменить запрос задач, воспользовавшись стандартными широкими возможностями фильтрации, и счетчики будут считаться на основе обновленного запроса автоматически.

    Затем мы применили эту же концепцию в массе других мест:

    Выборка задач в оперативный план (про оперативное планирование я писал ранее) строится на основе обычного запроса задач. Это позволяет администратору гибко перенастраивать условия, по которым задача попадает в оперативный план.

    На основе запроса задачи попадают в определенную колонку WIP-диаграммы (Scrum-доски)



    На основе любого запроса задач можно создать блок на моей странице. Стандартный Redmine имеет ограниченный набор блоков, выборка задач для блоков вшита в код.

    Ну и так далее, мы используем стандартные запросы задач повсеместно, когда нужно определить выборку задач, которая должна отображаться в каком-то месте.

    Такое архитектурное решение дает удивительную гибкость в настройке системы и избавляет программистов от кучи рутинной работы по переписыванию запросов.

    Надеюсь, статья и плагины будут полезны.
    Share post

    Similar posts

    Comments 1

      0
      Интересно читать посты «конкурентов» ))
      Не совсем понял, почему возникли трудности с прочитанными задачами. У себя мы таблицу с задачами рассматриваем как список писем. Если кто то изменил задачу, то задача для тебя отмечается как не прочитанный. Пользователь видит только те задачи, к которым у него есть доступ, поэтому храним с каждой задачей список ИД пользователей, которые прочитали. Также не забываем, что такая функциональность нужна не всегда. Скажем у нас есть таблица, где храним информацию о сотрудниках.
      Второй момент, от которого мы отказались — это фильтры. Я так понимаю, что у вас между условиями может быть только «И». У нас сперва было так, но часто нужны писать более сложные условия. Допустим, {колонка1=значение1 or колонка1=значение2} and {колонка2>100 or колонка2<50}
      Поэтому наш фильтр теперь выглядит так:

      Ну и последнее, как использовать фильтры. Мы у себя разделили фильтры и представления. Т.е. в одном месте создаем фильтры(например: мои задачи, просроченные задачи), причем видимость фильтра настраивается, а в другом месте настраиваем какие колонки показать, и тут можно указать, какой фильтр для него будет по умолчанию.

      Only users with full accounts can post comments. Log in, please.