AnnotatedEventListener
Опциональная возможность обрабатывать события в динамических скриптах без нагромождений из лишнего кода.
Quick start
-
Наследуем скрипт от
ru.bgcrm.event.listener.dispatcher.AnnotatedEventListener
, для скриптов процессов в комбинации с [интеракторами] отru.bgcrm.event.listener.dispatcher.ProcessAnnotatedEventListener
-
Отмечаем публичные функции необходимыми аннотациями, в качестве аргумента функция или не принимает аргументов, или должна принимать ожидаемый тип события, либо super-тип.
-
Profit!
Имеется возможность в рамках метода указывать сразу несколько аннотаций и/или использовать для одного вида события несколько методов.
Для работы данных режимов необходимо указать в аннотации EventDispatcher параметр multipleSubscribers=true (см. @EventDispatcher).
|
В случае использования режима нескольких аннотаций, в качестве аргумента метод может или не принимать аргументов вообще, или должен принимать только тот тип события, который имеется у всех входящих в метод аннотаций |
В случае использования EventProcessor.subscribe не используйте обработчик наследованный от ru.bgcrm.event.listener.dispatcher.ProcessAnnotatedEventListener (Могут происходить проблемы с интерактором. Данная проблема происходит из-за того, что обработчик объявляется один раз, и интерактор не переопределяется из-за использования Lazy )
|
@EventDispatcher(multipleSubscribers = true)
public class CameraInstallationListener extends AnnotatedEventListener {
@OnCreated
public void init(ProcessChangedEvent event) {
// init default params
}
@OnStatusChanged(STATUS_ACTIVATION)
public void activateCamera(ProcessChangedEvent event) {
// do some dirty stuff
}
@OnStatusChanged(STATUS_REGISTRATION)
public void registerCamera(ProcessChangedEvent event) {
// do some dirty stuff
}
@OnParamChanged(PARAM_CAMERA_TYPE)
public void enableSoundRecording(ParamChangedEvent event) {
// do some dirty stuff
}
@OnLinkAdding
public void validateLink(LinkAddingEvent event) {
// do some dirty stuff
}
@OnLinkAdded
public void onLinkAdded(LinkAddedEvent event) {
// do some dirty stuff
}
}
Аннотации
Работа с параметрами
@OnParamListGet
Подсписка на событие получения списка значений для динамического списка (ParamListGetEvent
)
Работа с процессами
@OnProcessCreatedAsLink
Подписка на создание процесса, как привязанного к другому процессу (ProcessCreateAsLinkEvent
)
@OnProcessClosing
Подсписка на событие перед изменения статуса процесса на любой из закрывающих статусов(ProcessChangingEvent
)
@OnProcessClosed
Подсписка на событие после изменения статуса процесса на любой из закрывающих статусов (ProcessChangedEvent
)
@OnDependedProcessClosed
Подписка на событие после изменения статуса связанного процесса на любой из закрывающих статусов (DependedProcessCloseEvent
)
Связанный процесс должен быть порожден родительским процессом (имеет тип привязки processMade )
|
@OnGroupChanging
Подписка на событие перед изменением групп исполнителей процесса (ProcessChangingEvent
)
@OnGroupChanged
Подписка на событие после изменения групп исполнителей процесса (ProcessChangedEvent
)
@OnExecutorChanging
Подписка на событие перед изменением исполнителей процесса (ProcessChangingEvent
)
Работа с адресным справочником
Работа с ТМЦ
@OnTmcListAdded
Подписка на событие добавления движения
(TmcListChangedEvent
)
Name | Type | Required | Default | Description |
---|---|---|---|---|
destinations |
Array<TmcDestinationVerdandi> |
false |
[] |
Направления движений |
Работа с модулем "Task"
Дополнительные
@OnRunClassRequest
Подсписка на событие запуска динамического класса (RunClassRequestEvent
)
Параметры
Name | Type | Required | Default | Description |
---|---|---|---|---|
checkMethodName |
Boolean |
false |
false |
Необходимость проверки имени метода. Проверка производится по точному совпадению с переданным параметром Используется как основа для динамических API, является заменой функционала |
См.пакет ru.bgcrm.event.listener.dispatcher.filter
Contribution guide
Заведение новой аннотации
-
Определиться с пакетом. Для ядровых аннотаций используется пакет
ru.bgcrm.event.listener.dispatcher.filter
, для аннотаций плагинов в соответствии со структурой пакетов плагина -
Создать класс аннотации и класс обработчик аннотации, наследующийся от
ru.bgcrm.event.listener.dispatcher.filter.BaseEventFilter
-
На класс аннотацию повесить аннотацию Dispatch с указанием класса-обработчика
-
Реализовать логику проверки совпадения события в классе-обработчике
-
Написать тесты
-
Написать документацию (java doc на аннотации + adoc)
FAQ
Если у одного и того же события в скрипте есть несколько методов обработчиков, то какие из них вызовутся?
По-умолчанию будет вызван только первый из найденных методов. Можно сделать так, чтобы вызывались все, но порядок их вызова пока ничем не гарантирован:
@EventDispatcher(multipleSubscribers = true)