- 1 # Общее описание режима
- 2 # Настройка
- 3 # Использование переменных в режиме доступности из базового БП
- 4 # Пример использования переменной в режиме доступности из базового БП
# Общее описание режима
По умолчанию при передаче переменных в подпроцессы используется режим копирования
Начиная с версии 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