VariablesInBaseProcessIdMode
Руководстве по использованию в подпроцессе переменных в режиме доступности из базового БП4.3.0+
Версия 4.6.0
© 2015-2023, ООО "Процессные технологии"
# Общее описание режима
По умолчанию при передаче переменных в подпроцессы используется режим копирования
Начиная с версии RunaWFE 4.3.0 доступен новый режим "ID базового БП", позволяющий хранить переменные в единственном экземпляре, не дублируя значения в подпроцессах.
# Настройка
Для использования данного режима потребуется определить параметр base.process.id.variable.name
Согласно правила переопределения настроек, определенных в properties файлах необходимо создать файл wfe.custom.system.properties в каталоге ..\standalone\wfe.custom (если директория wfe.custom не существует, то создать). Например, для Windows версии RunaWFE, в случае использования симулятора сервера, файл wfe.custom.system.properties должен быть помещен в C:\Program Files\RunaWFE\Simulation\standalone\wfe.custom\
Укажите переменную, которая будет хранить идентификатор (ID) базового процесса.
base.process.id.variable.name = baseid
Переменная с таким названием должна быть определена в подпроцессе и проинициализирована значением идентификатора базового БП.
Получить id базового БП можно с помощью конструкции ${currentProcessId}, на рисунке ниже показан пример передачи id при сопоставлении переменных процесса и подпроцесса.
# Использование переменных в режиме доступности из базового БП
Все переменные, которые будут использоваться в данном режиме должны быть определены в подпроцессе.
Как и в случае режима копирования, пользователю предоставляется возможность настроить использование переменных:
- "чтение" - при чтении значение переменной будет доступно из базового БП
- "запись" - при завершении подпроцесса значение переменной копируется в родительский БП
- "синхронизация" - при изменении значения переменной в подпроцессе оно меняется в базовом БП; при чтении значение переменной будет доступно из базового БП
При включённой настройке base.process.id.variable.read.all при чтении используется базовый БП для переменных с любым названием.
Поддерживается иерархия любой вложенности.
При доступе на чтение возвращается первое непустое значение, найденное вверх по иерархии базовых БП.
При доступе на запись значение меняется в последнем базовом БП по иерархии, где определена переменная наличием.
Режим доступности переменных из базового БП поддерживает все типы переменных, в том числе и списки. Но для "Ролей" используется только режим копирования, при этом не поддерживается синхронизация.
Данный режим можно использовать также и в мультиподпроцессе, но синхронизация поддерживается только для переменных формата "Список"
# Пример использования переменной в режиме доступности из базового БП
В подпроцесс "Обработать заявку" передаются
- ${currentProcessId} - конструкция определяющая id основного процесса, сопоставление с переменной baseid, использование - чтение
- Роль "Менеджер" - для инициализации роли "Ответственный"
- "Заявка" - пользовательская переменная, использование - синхронизация
Переменная "Заявка" в подпроцессе будет использоваться в режиме доступа из основного БП, для этого на сервере настроен параметр
base.process.id.variable.name = baseid
Руководитель подает заявку
Вызывается подпроцесс, переменная baseid получает значение id основного БП - "11"
Из логов видно, что в подпроцессе (id=12) не создается новая переменная, а выполняется доступ к полям пользовательской переменной "Заявка" базового процесса (id=11)
00:05:55,700 DEBUG [ru.runa.wfe.execution.ExecutionContext] (http--127.0.0.1-8080-2) Loading variable 'Заявка' from process '11' 00:05:55,702 DEBUG [apicall] (http-127.0.0.1-127.0.0.1-8080-11) 17 ms: ExecutionServiceBean.getTaskVariable(Actor{id=5, name=Иванов, code=-3}, 12, 12, Заявка.Список исполнителей)
В подпроцессе исполнители с ролью "Ответственный" и "Бухгалтерия" добавляет в заявку новые данные
При этом автоматически выполняется синхронизация с переменной "Заявка" базового БП, и "Руководитель" видит текущую информацию по заявке
Выполнение синхронизации также отражено в логах:
00:07:55,066 DEBUG [ru.runa.wfe.execution.ExecutionContext] (http-127.0.0.1-127.0.0.1-8080-2) Setting 12.Заявка.Список исполнителей[0] in parent process 11.Заявка.Список исполнителей[0] 00:07:55,067 DEBUG [ru.runa.wfe.var.VariableCreator] (http-127.0.0.1-127.0.0.1-8080-2) Creating variable 'Заявка.Список исполнителей[0]' in Process{id=11, status=ACTIVE} with value 'Actor{id=7, name=Сидоров, code=-5}' of class ru.runa.wfe.user.Actor
00:07:55,073 DEBUG [ru.runa.wfe.execution.ExecutionContext] (http-127.0.0.1-127.0.0.1-8080-2) Setting 12.Заявка.Список исполнителей[1] in parent process 11.Заявка.Список исполнителей[1] 00:07:55,074 DEBUG [ru.runa.wfe.var.VariableCreator] (http-127.0.0.1-127.0.0.1-8080-2) Creating variable 'Заявка.Список исполнителей[1]' in Process{id=11, status=ACTIVE} with value 'Actor{id=8, name=Соболев, code=-6}' of class ru.runa.wfe.user.Actor