Разработка новых логических блоков для конструктора автоматизаций
Логика работы
Система разделена на следующие блоки:
-
Блок управления правилами для процессов, сюда входят
bgcrm.automation.process.listener
,…model
,…repository
,…service
. Эти пакеты отвечают за подписку/логику/хранение и выполнение настроенных правил. -
Модель для работы с "абстрактными" правилами в виде дескрипторов, которая будет использоваться на фронте. Сюда входят все классы
bgcrm.automation.descriptor…
.
Дескрипторы представляют собой абстракцию для описания правил, каждый дескриптор является некой логической сущностью, являющейся составным блоком для создаваемого правила.
Данные описываются вложенными в дескриптор property, при чем вложенность одного property в другое говорит о зависимости вложенных элементов от родительских
(например, для того что бы указать значение параметра нужно знать о том, что это за параметр, что говорит об их зависимости). Всего типов данных property 4: list
- одно значение из списка значений; multilist
- множество значений из списка значений; text
- текстовое значение; boolean
- логическое значение.
В данный момент реализация такова, что вложенные параметры зависят только от типа list
. То есть изменение родительского property такого типа в интерфейсе сбрасывает значения всех вложенных в него property.
Следуя ранее описанному примеру с указанием значения параметра процесса, при изменении самого параметра будут удалены уже выбранные значения и обновленный список доступных значений будет запрошен заново.
-
Блок для маппинга настроенных правил для процессов в дескрипторы для фронта. Сюда входит весь пакет
bgcrm.automation.process.descriptor
:-
подпакет
…factory
отвечает за создание дескрипторов, которые должны описывать соответствующие правила; -
подпакет
…mapper
отвечает за наполнение этих дескрипторов требуемыми данными (в частности, тайтлами, которые в самих правилах не хранятся); -
…service
отвечает за работу с этими дескрипторами, всего сервиса три:ProcessRuleDescriptorService
- сервис получения самих правил;ProcessScopeDescriptorService
- сервис получения составных блоков(или условий) - для этих правил;ProcessPropertyService
- сервис получения данных для этих условий.
-
-
Сам редактор правил на Vue
Как добавить новую логику
Всё действие происходит в ru.bgcrm.automation.process
Добавляем класс с логикой в модель:
-
Создаем класс с желаемой логикой, наследуемся от интерфейса ProcessAction/ProcessCondition/ProcessEvent
-
Вносим новый класс в аннотацию базового интерфейса для возможности сериализации
Описываем этот блок в терминах дескрипторов. Не забываем про зависимость вложенных property:
-
Заводим id для этого дескриптора в
ProcessDescriptorConstants
-
Описываем этот дескриптор в соответствующем
factory
Если для описания правила не хватает уже существующих property, нужно их добавить:
-
Также заводим id в
ProcessDescriptorConstants
-
Реализуем логику получения property в
ProcessPropertyService
-
-
Создаем маппер правило←→дескриптор в пакете
mapper