В фильтр списка экземпляров добавляем возможность фильтрации по
• Исполнитель задания (с опцией - "включая/не включая вхождение в группы")
• Название роли
• Имя задания
• Длительность задачи
• Текущая длительность задачи
• Время получения задания
• Время взятия задания на исполнение
• Срок задачи
Фильтрация работает следующим образом:
Рассматривается список незавершенных экземпляров бизнес-процессов, в них рассматриваются все узлы-действия, в которых в данный момент находятся точки управления.
Для каждого экземпляра проверяется, есть ли в нем узел-действие, содержащее точку управления, для которого
• Если элемент "исполнитель задания" отмечен галочкой: исполнителем является указанный в фильтре пользователь (в случае опции - исполнителем является группа, в которую входит указанный в фильтре пользователь). Также в фильтре в качестве исполнителя можно вместо пользователя указать группу
• Если элемент "название роли" отмечен галочкой: название роли совпадает с указанным в фильтре
• Если элемент "имя задания" отмечен галочкой: название задания (то есть - узла-действия) совпадает с указанным в фильтре
• Если элемент "длительность задачи" отмечен галочкой: Длительность задачи попадает в границы, указанные в фильтре
• Если элемент "текущая длительность задачи" отмечен галочкой: текущая длительность задачи попадает в границы, указанные в фильтре
• Если элемент "время получения задания" отмечен галочкой: Время получения задания попадает в границы, указанные в фильтре
• Если элемент "время взятия задания на исполнение" отмечен галочкой: Время взятия задания на исполнение попадает в границы, указанные в фильтре
• Если элемент "срок задачи" отмечен галочкой: Срок задачи попадает в границы, указанные в фильтре
Экземпляры, для которых выполняется условие, отображаются в таблице. Также по данным элементам возможна сортировка и группировка экземпляров
Для отфильтрованного списка экземпляров добавляется кнопка (ссылка) экспорта в Excel
Полноценной выгрузки в eсxel ещё нет.
Условия фильтрации по длительности задач вводятся в том же формате,
что и длительность задачи по умолчанию в настройках (например 2 hours, или 5 minutes).
Работоспособность проверял для H2, PostgreSQL, Oracle и MS SQL Server.
По производительности: на 1000 экземпляров процессов на глаз разницу заметить не удалось. Точных измерений не производил.
(Но производительность упасть должна, так как добавился left join c таблицами BPM_TASK, EXECUTOR, BPM_SWIMLANE.)
Уточнение постановки:
Если у поля (нового элемента фильтра) позиция отображения не равна "нет", то столбец показываем. Но поле заполняем не пустым значением только в случае единственного возможного значения (то есть, в случае диапазона значений или использования а фильтре элемента "*", допускающего много значений, оставляем поле пустым)
Дублировать экземпляры процессов не надо. Экземпляр процесса должен оставаться единственным.
Если может быть несколько значений и в связи с этим поле пустое, то при выполнении сортировки и группировки по этому полю, его значение считается пустым. То есть, все экземпляры с возможными неоднозначными значениями попадут в одну группировку. С сортировкой - аналогично.
Уточнение (модификация) постановки.
Предлагается модифицировать постановку следующим образом (так, по-видимому, будет лучше со стороны логики поведения формы и проще в реализации).
Если у поля (нового элемента фильтра) позиция отображения не равна "нет", то столбец показываем в таблице. Но значение поля такого столбца не заполняем по результатам запроса. В поле пишем в виде строкового значение содержимое фильтра этого элемента.
То есть, значение этих полей во всех строках будет одинаковым. Тогда сортировка по этому полю будет фиктивной (т.е. при "включении" сортировки в любом направлении по этому полю ничего не изменится, т.к. все поля одинаковые). Группировка тоже будет простейшей - все "свернется" в одну строку.
Забыл написать: Если у нового поля позиция отображения не равна "нет", то в поле "Критерий фильтрации" обязательно должна стоять галочка, которую нельзя снять. В "обратную" сторону это не так: можно поставить в "Критерий фильтрации" такого поля галочку (и, соответственно, заполнить фильтр), но само поле не показывать (т.е. в позиции отображения будет "нет").
Реализовал новую вкладку "Запущенные процессы (подробно)".
Реализовал метод ExecutionService.getextendedProcesses().
Убрал повторяющиеся строки если нет фильтров и нет отображаемых полей по заданиям.
PS. Может лучше вообще никогда не показывать новые поля в результате запроса? Тогда для устранения дублирования достаточно будет distinct-а.
Если таким образом можно устранить дублирование, то давай так и сделаем. Это решит проблему. Просьба внести в пул реквест соответствующие изменения.
Дублирование устранил
В настоящий момент непонятно, насколько изменения в фильтре ухудшат производительность.
Поэтому надо добавить в релиз оба варианта. При этом надо добавить в web-интерфейс настройку, - какую вкладку (т.е. пункт меню) показывать.
Должна показываться только одна строка в меню (В зависимости от этой настройки) - либо со старым фильтром, либо с новым. Но назваться в обоих случаях она должна одинаково - "Запущенные процессы".
По дефолту должна быть страница с новым фильтром (то есть то, что сейчас называется "Запущенные процессы (подробно)")