Добавление нового типа события
Расширение настройки позволяет добавить в Конструктор бизнес процессов новые события.
Добавление нового типа события в конструктор бизнес-процессов включает в себя:
- добавление нового объекта "Событие" в интерфейсе оператора;
- настроить скриптовые действия по событиям в интерфейсе администратора.
Добавление объекта "Событие"
Место настройки в интерфейсе
Интерфейс оператора. Вкладка "Бизнес процессы" → "Справочники" → "События".
Выполнение настройки
Нажмите кнопку Добавить. Заполните параметры события: название, код и описание и нажмите кнопку Сохранить.
Запомните код созданного события, он будет использоваться при настройке скрипта.
Для каждого события необходимо создать два действия по событию: для синхронного действия и для асинхронного.
Настройка синхронного действия по событиям
Место настройки в интерфейсе
Меню навигации "Настройка системы" → настройка "Действия по событиям".
Выполнение настройки
Нажмите кнопку Добавить действие. На форме добавления заполните поля и нажмите кнопку Сохранить.
Поля на форме добавления:
- Название — в качестве названия можно использовать шаблон [#AAS], где S в конце обозначает синхронное действие.
- Объекты: "Заявка".
- Событие — выберите событие, при котором должно происходить действие.
- Действие: "Скрипт".
- Выполнять синхронно: "да".
-
Скрипт для синхронного действия по событию.
В параметре EVENT_CODE укажите код события.
def LOGGING_IS_ENABLED = true
def log = { msg ->
if (LOGGING_IS_ENABLED) {
logger.info('Запуск действий автоматизации при наступлении события: ' + msg.toString())
}
}
//Параметры------------------------------------------------------
def BPM = modules.sBPM
def ACTION_STATE = 'syncUsed'
def ROUTE = 'bpmRoute'
def ACTION_FQN = 'action$eventTemplate'
def EVENT_CODE = ''
//Функции--------------------------------------------------------
//Основной блок -------------------------------------------------
//используется для тестирования в консоли
//subject = utils.get('serviceCall$2262801')
//Получение текущего маршрута из объекта
def route = subject[ROUTE]
//Получение текущего действия по коду из функции модуля
def sourceEvent = BPM.getEvent(EVENT_CODE)
//Продолжаем работу только в случае наличия действия и маршрута
if (!route || !sourceEvent) {
log("не определено -- " + ((route ? [] : ['route']) + (sourceEvent ? [] : ['sourceEvent'])).join(', '))
return ''
}
//Контейнер параметров для поиска действий
def searchActions = [:]
//Заполняем параметры поиска
searchActions.put('removed', false)
searchActions.put('sourceEvent', sourceEvent)
searchActions.put('state', ACTION_STATE)
searchActions.put('targetTemplate', route.templates)
//Производим поиск действий автоматизации
def bpmActions = utils.find(ACTION_FQN, searchActions)
//Для каждого найденного действия выполняем типовую функцию модуля
bpmActions.each{ bpmAction ->
//Контейнер с параметрами действия автоматизации
def actionParams = [:]
actionParams.put('user', binding.hasVariable('user') ? user : null)
actionParams.put('source', subject)
actionParams.put('current', subject)
actionParams.put('action', bpmAction)
actionParams.put('sourceEvent', sourceEvent)
BPM."${bpmAction.action.code}"(actionParams)
}
Настройка асинхронного действия по событиям
Место настройки в интерфейсе
Меню навигации "Настройка системы" → настройка "Действия по событиям".
Выполнение настройки
Нажмите кнопку Добавить действие. На форме добавления заполните параметры действия и нажмите кнопку Сохранить.
Поля на форме добавления:
- Название — в качестве названия можно использовать шаблон [#AAA], где "A" в конце обозначает асинхронное действие.
- Объекты: "Заявка".
- Событие — выберите событие, при котором должно происходить действие.
- Действие: "Скрипт".
- Выполнять синхронно: "нет".
-
Скрипт для асинхронного действия по событию.
В параметре "EVENT_CODE" укажите код события.
def LOGGING_IS_ENABLED = true
def log = { msg ->
if (LOGGING_IS_ENABLED) {
logger.info('Запуск действий автоматизации при наступлении события: ' + msg.toString())
}
}
//Параметры------------------------------------------------------
def BPM = modules.sBPM
def ACTION_STATE = 'asyncUsed'
def ROUTE = 'bpmRoute'
def ACTION_FQN = 'action$eventTemplate'
def EVENT_CODE = 'stopProcess'
//Функции--------------------------------------------------------
//Основной блок -------------------------------------------------
//используется для тестирования в консоли
//subject = utils.get('serviceCall$2262801')
//Получение текущего маршрута из объекта
def route = subject[ROUTE]
//Получение текущего действия по коду из функции модуля
def sourceEvent = BPM.getEvent(EVENT_CODE)
//Продолжаем работу только в случае наличия действия и маршрута
if (!route || !sourceEvent) {
log("не определено -- " + ((route ? [] : ['route']) + (sourceEvent ? [] : ['sourceEvent'])).join(', '))
return ''
}
//Контейнер параметров для поиска действий
def searchActions = [:]
//Заполняем параметры поиска
searchActions.put('removed', false)
searchActions.put('sourceEvent', sourceEvent)
searchActions.put('state', ACTION_STATE)
searchActions.put('targetTemplate', route.templates)
//Производим поиск действий автоматизации
def bpmActions = utils.find(ACTION_FQN, searchActions)
//Для каждого найденного действия выполняем типовую функцию модуля
bpmActions.each{ bpmAction ->
//Контейнер с параметрами действия автоматизации
def actionParams = [:]
actionParams.put('user', binding.hasVariable('user') ? user : null)
actionParams.put('source', subject)
actionParams.put('current', subject)
actionParams.put('action', bpmAction)
actionParams.put('sourceEvent', sourceEvent)
BPM."${bpmAction.action.code}"(actionParams)
}
Включите созданные действия по событиям.
Подробное описание настройки действий по событию: