VariablesInBaseProcessIdMode

Материал из RunaWFE
Перейти к навигации Перейти к поиску

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

Версия 4.4.2

© 2015-2021, ООО "Процессные технологии", материалы этого документа распространяются свободно на условиях лицензии GNU FDL. RunaWFE Free является системой с открытым кодом и распространяется в соответствии с LGPL лицензией (http://www.gnu.org/licenses/lgpl.html).

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

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

Начиная с версии 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