Гибкость и вариативность настройки СЭД «Атач» посредством использования триггеров на уровне веб-приложения

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

Гибкость и вариативность настройки СЭД «Атач» посредством использования триггеров на уровне веб-приложения

Представленный в данной статье подход позволяет выполнять определенные действия на пользовательские события (изменение состояний компонентов/элементов), при условии, что состав и последовательность этих действий вариативны.

Богданов Артур
Инженер-программист

Составляющие интерфейса СЭД «Атач»

«Атач» – российская система по управлению бизнес-процессами электронного документооборота и корпоративных коммуникаций, которая позволяет автоматизировать весь спектр задач по работе с документами – создание, согласование, подписание, выдачу поручений и контроль их исполнения.

Одной из базовых сущностей в системе «Атач» является документ. На скриншоте пользовательского интерфейса, согласно 3-х колоночной концепции, расположены следующие блоки (в соответствии с рисунком 1):

  • слева расположена панель задач;
  • по центру – карточка документа;
  • на правой панели – маршрут текущего документа.
Рисунок 1 – Пользовательский интерфейс СЭД «Атач»
Рисунок 1 – Пользовательский интерфейс СЭД «Атач»

Составными частями карточек и маршрутов документов являются компоненты и элементы. Примеры компонентов выделены оранжевыми линиями, элементы обозначены красными (в соответствии с рисунком 2).

Рисунок 2 – Элементы и компоненты СЭД «Атач»
Рисунок 2 – Элементы и компоненты СЭД «Атач»

К элементам относятся кнопки, текстовые поля, выпадающие списки, детали маршрута и т.п., а компоненты предназначены для группировки элементов.

Триггеры на уровне веб-приложения в СЭД «Атач»

Концептуальная схема отражает вызов триггеров на пользовательские события (в соответствии с рисунком 3).

Рисунок 3 – Вызов триггеров на пользовательские события
Рисунок 3 – Вызов триггеров на пользовательские события

В качестве типов пользовательских событий могут выступать стандартные OnClick, OnCreate, OnUpdate, OnDelete, или относящиеся к предметной области – вход в группу маршрута, выход из группы, вход в шаг маршрута, выход с шага. Конкретное событие вызывает определенный обработчик. Чаще всего триггеры вызываются из базовых обработчиков, но это необязательное условие, точка входа может быть любой. Далее, в обработчике, согласно логике конкретного бизнес-процесса, вызываются триггеры с определённым типом события.

Триггеры на уровне кода – это вложенные обработчики, команды которых наследуются от общего интерфейса, идентифицируются атрибутом.

[Trigger(Domain.Enums.Action.DocumentWasCreated)] public class DocumentWasCreatedCommand : IRequest, ITrigger { public DocumentWasCreatedCommand() { } }

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

Рисунок 4 – Триггеры на элементах
Рисунок 4 – Триггеры на элементах

На схеме БД отражена связь между триггерами и элементами (в соответствии с рисунком 5). Для компонентов схема аналогична.

Рисунок 5 – Триггеры на элементах в БД
Рисунок 5 – Триггеры на элементах в БД

Заключение

Дополнение базовых обработчиков кастомной логикой без вмешательства в ядро системы позволило достичь высокого уровня гибкости и вариативности настройки СЭД «Атач». Немаловажные преимущества данного подхода – возможность делегирования разработки триггеров другим командам (в том числе, на стороне заказчика) и высокий уровень повторного использования кода.

22
4 комментария

Интересный подход!
Пожелание автору-схемы 2 и 4 сделать гифками с выделением значимых частей-со смартфона очень не читаемые картинки получились

2
Ответить

Как настоящий программист, автор и работает на компьютере и пишет статьи для просмотра с него же)

1
Ответить

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

1
Ответить