Руководство по использованию в подпроцессе переменных в режиме доступности из базового БП

# Общее описание режима

По умолчанию при передаче переменных в подпроцессы используется режим копирования

Начиная с версии 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 при сопоставлении переменных процесса и подпроцесса.

Baseid 1.png

# Использование переменных в режиме доступности из базового БП

Все переменные, которые будут использоваться в данном режиме должны быть определены в подпроцессе.

Как и в случае режима копирования, пользователю предоставляется возможность настроить использование переменных:

Baseid 3.png

  • «чтение» — при чтении значение переменной будет доступно из базового БП
  • «запись» — при завершении подпроцесса значение переменной копируется в родительский БП
  • «синхронизация» — при изменении значения переменной в подпроцессе оно меняется в базовом БП; при чтении значение переменной будет доступно из базового БП

При включённой настройке base.process.id.variable.read.all при чтении используется базовый БП для переменных с любым названием.

Поддерживается иерархия любой вложенности.

При доступе на чтение возвращается первое непустое значение, найденное вверх по иерархии базовых БП.

При доступе на запись значение меняется в последнем базовом БП по иерархии, где определена переменная наличием.

Режим доступности переменных из базового БП поддерживает все типы переменных, в том числе и списки. Но для «Ролей» используется только режим копирования, при этом не поддерживается синхронизация.

Baseid 5.png

Данный режим можно использовать также и в мультиподпроцессе, но синхронизация поддерживается только для переменных формата «Список»

Baseid 4.png

# Пример использования переменной в режиме доступности из базового БП

В подпроцесс «Обработать заявку» передаются

  • ${currentProcessId} — конструкция определяющая id основного процесса, сопоставление с переменной baseid, использование — чтение
  • Роль «Менеджер» — для инициализации роли «Ответственный»
  • «Заявка» — пользовательская переменная, использование — синхронизация

Переменная «Заявка» в подпроцессе будет использоваться в режиме доступа из основного БП, для этого на сервере настроен параметр

base.process.id.variable.name = baseid

Baseid 6.png

Baseid 7.png

Руководитель подает заявку

Baseid 8.png

Вызывается подпроцесс, переменная baseid получает значение id основного БП — «11»

Baseid 9.png

Из логов видно, что в подпроцессе (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, Заявка.Список исполнителей)

В подпроцессе исполнители с ролью «Ответственный» и «Бухгалтерия» добавляет в заявку новые данные

Baseid 10.png

При этом автоматически выполняется синхронизация с переменной «Заявка» базового БП, и «Руководитель» видит текущую информацию по заявке

Baseid 12.png

Выполнение синхронизации также отражено в логах:

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

Baseid 11.png