[I128-2809] Сохраненные и материализованные фильтры WorkflowFilter


НАЧАЛО >> Оглавление >> Общее описание >> История изменений >> Что нового в проекте I128 >> Версия 2026.3 >> [I128-2809] Сохраненные и материализованные фильтры WorkflowFilter📄 Скачать в DOCX


Тип Версия Статус Приоритет Исполнитель
⚙️ Новые возможности 2026.3 🔘 Завершено Средний Ilya Mikhaylenko

Компоненты: Нет

Завершено: 08.09.2026 13:50

  1. Цель

Нужно выделить WorkflowFilter как самостоятельный универсальный механизм сохраненных, проектных, общих, личных и материализованных фильтров workflowзаписей. Фильтр должен быть единым источником выборки для WorkflowView, dashboardсчетчиков, подписок, досок, календарей, портальных списков и внутренних очередей.

  1. Контекст

Задачи Tasks и заявительский портал TaskPortal требуют списков активных задач, личных обращений, задач на приемку, FAQ/knowledge views, просроченных задач, очередей команды и других выборок. Эти выборки не должны реализовываться отдельными SQL/PFT/pageфрагментами в каждом модуле. Логика фильтрации должна быть общей, rightsaware и пригодной для materialized slices.

WorkflowFilter является частью семейства Workflow, но его scope достаточно самостоятелен: определение фильтра, исполнение, параметры, права, materialized slices, counters, subscriptions, whereused и impact analysis. Поэтому его нужно вести отдельной Jiraзадачей, а не прятать внутри общей задачи WorkflowScreen/WorkflowView.

  1. Что Нужно Сделать

Нужно реализовать запись WorkflowFilter с ключом, названием, описанием, областью видимости, project/workflow binding, типом записи, параметрами, правами и признаком системности.

Фильтр должен описывать query по workflow-состоянию, типу записи, проекту, полям, участникам, датам, статусам API, правам и безопасным параметрам URL или формы. Фильтр должен возвращать только записи, доступные текущему пользователю.

Нужно реализовать общий API исполнения фильтра, пригодный для WorkflowView list/card, dashboard-счетчиков, подписок, WorkflowBoard, WorkflowCalendar, TaskPortal и внутренних очередей Tasks.

Нужно поддержать системные, проектные, общие и личные фильтры. Личный фильтр не должен становиться source of truth для проектного view. Персональные preference, избранное, порядок, фильтр по умолчанию и последние параметры должны храниться в ProfileManager, а не внутри WorkflowFilter.

Нужно реализовать materialized slices для тяжелых фильтров. Slice должен хранить версию фильтра, время пересчета, trace id, diagnostic state и признак устаревания. Пересчет тяжелых slices должен выполняться через Queue, а invalidation может запускаться через EventBus.

Нужно реализовать preview результата для администратора с учетом прав тестового пользователя, where-used по views, boards, calendars, subscriptions, menu и dashboards, а также impact analysis при изменении или удалении фильтра.

Нужно реализовать policy подписки на фильтр. WorkflowFilter определяет возможность подписки и исполняет выборку, EventBus отвечает за доставку, Queue за расписание, ProfileManager за пользовательскую привязку подписки.

  1. Границы Ответственности

WorkflowFilter владеет определением фильтра, исполнением выборки, safe parameters, materialized slices, counters, where-used, impact analysis и policy подписки.

WorkflowFilter не рисует страницы, не хранит пользовательские preference, не доставляет уведомления, не планирует фоновые задания и не содержит taskspecific бизнеслогику. Эти части остаются у WorkflowView, ProfileManager, EventBus, Queue и доменных модулей.

  1. Критерии Приемки

Можно создать системный фильтр и выполнить его через общий API с учетом прав текущего пользователя.

WorkflowView может использовать WorkflowFilter для списка и карточки без собственного частного механизма выборки.

Тяжелый фильтр может иметь materialized slice, пересчет через Queue и понятное состояние freshness.

Preview администратора показывает результат с учетом прав тестового пользователя и объясняет ограничения выборки.

Удаление или изменение фильтра показывает where-used и блокируется, если фильтр используется опубликованным view, board, calendar или subscription.

Личные preference фильтра хранятся вне WorkflowFilter и не расширяют права пользователя.

  1. Проверки И Документация

TestA должен проверять системный фильтр, проектный фильтр, личный фильтр, права, safe URL parameters, materialized slice, invalidation, where-used, запрет удаления используемого фильтра и интеграцию с WorkflowView.

Help должен описывать настройку фильтров, параметры, права, materialized slices, preview, where-used, подписки и диагностику производительности.

-

Задача I128-2809.

Что сделано:

Границы:

Проверки:

1. Связанные задачи

1.1. 🔗 blocks: I128-2810

[I128-2810] Миграция VirtualRef в промышленный контур Tasks Статус: Завершено | Автор: Ilya Mikhaylenko

1.2. 🔗 blocks: I128-2811

[I128-2811] Заявительский портал TaskPortal Статус: Завершено | Автор: Ilya Mikhaylenko

1.3. 🔗 blocks: I128-2814

[I128-2814] Расширить ProfileManager для пользовательских настроек TaskPortal Статус: Завершено | Автор: Ilya Mikhaylenko

1.4. 🔗 blocks: I128-2821

[I128-2821] Реализовать рабочие доски WorkflowBoard для workflow-записей Статус: Завершено | Автор: Ilya Mikhaylenko

1.5. 🔗 blocks: I128-2822

[I128-2822] Реализовать календарные представления WorkflowCalendar для workflow-записей Статус: Завершено | Автор: Ilya Mikhaylenko

1.6. 🔗 blocks: I128-2840

[I128-2840] Реализовать WorkflowDesigner как единую административную студию настройки workflow-проектов Статус: Завершено | Автор: Ilya Mikhaylenko

1.7. 🔗 blocks: I128-2790

[I128-2790] Расширить Workflow* для промышленного контура задач Статус: Завершено | Автор: Ilya Mikhaylenko

1.8. 🔗 blocks: I128-2791

[I128-2791] Расширить WorkflowScreen/WorkflowView для публичных ws-форм и представлений Статус: Завершено | Автор: Ilya Mikhaylenko

1.9. 🔗 blocks: I128-2793

[I128-2793] Ввести TraceContext для сквозной трассировки операций Статус: Завершено | Автор: Ilya Mikhaylenko

1.10. 🔗 blocks: I128-2794

[I128-2794] Реализовать системную событийную шину EventBus Статус: Завершено | Автор: Ilya Mikhaylenko

1.11. 🔗 blocks: I128-2795

[I128-2795] Расширить Queue как runtime фоновых заданий, retry и расписаний Статус: Завершено | Автор: Ilya Mikhaylenko

1.12. 🔗 blocks: I128-2797

[I128-2797] Расширить Security для проектных прав, полей, действий и аудита доступа Статус: Завершено | Автор: Ilya Mikhaylenko

1.13. 🔗 blocks: I128-2798

[I128-2798] Реализовать HealthCheck для workflow-проектов и задач Статус: Завершено | Автор: Ilya Mikhaylenko

1.14. 🔗 blocks: I128-2799

[I128-2799] Подготовить TestA-контракты системных JSON и end-to-end сценариев Статус: Завершено | Автор: Ilya Mikhaylenko