Variables: различия между версиями

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


{| class="prettytable" border="1"  
{| class="prettytable" border="1"  
|  
| <center>'''Свойство'''</center>
| '''ru.runa.wfe.user.Executor''' (исполнитель)
| <center>'''Описание'''</center>
| '''ru.runa.wfe.user.Group''' (группа)
| <center>'''ru.runa.wfe.user.Executor''' (исполнитель)</center>
| '''ru.runa.wfe.user.Actor''' (пользователь)
| <center>'''ru.runa.wfe.user.Group''' (группа)</center>
| <center>'''ru.runa.wfe.user.Actor''' (пользователь)</center>




|-
|-
| '''id''' (идентификатор)
| '''id'''
| (идентификатор)
| +
| +
| +
| +
Строка 197: Строка 199:


|-
|-
| '''name''' (уникальный логин пользователя или название группы)
| '''name'''
| (уникальный логин пользователя или название группы)
| +
| +
| +
| +
Строка 203: Строка 206:


|-
|-
| '''description''' (описание)
| '''description'''
| (описание)
| +
| +
| +
| +
Строка 209: Строка 213:


|-
|-
| '''fullName''' (Ф.И.О. пользователя)
| '''fullName'''
| (Ф.И.О. пользователя)
| -
| -
| -
| -
Строка 215: Строка 220:


|-
|-
| '''department''' (подразделение пользователя) {{Since|4.3.0}}
| '''department'''
| (подразделение пользователя) {{Since|4.3.0}}
| -
| -
| -
| -
Строка 221: Строка 227:


|-
|-
| '''title''' (должность пользователя) {{Since|4.3.0}}
| '''title'''
| (должность пользователя) {{Since|4.3.0}}
| -
| -
| -
| -
Строка 227: Строка 234:


|-
|-
| '''code''' (код пользователя)
| '''code'''
| (код пользователя)
| -
| -
| -
| -
Строка 233: Строка 241:


|-
|-
| '''active''' (активен ли пользователь)
| '''active'''
| (активен ли пользователь)
| -
| -
| -
| -
Строка 239: Строка 248:


|-
|-
| '''email''' (email пользователя)
| '''email'''
| (email пользователя)
| -
| -
| -
| -
Строка 245: Строка 255:


|-
|-
| '''phone''' (телефон пользователя)
| '''phone'''
| (телефон пользователя)
| -
| -
| -
| -
Строка 251: Строка 262:


|-
|-
| '''ldapGroupName''' (соответствие ldap группы)
| '''ldapGroupName'''
| (соответствие ldap группы)
| -
| -
| +
| +
Строка 257: Строка 269:


|-
|-
| '''lastName''' (фамилия пользователя) {{Since|4.0.6}}
| '''lastName'''
| (фамилия пользователя) {{Since|4.0.6}}
| -
| -
| -
| -
Строка 263: Строка 276:


|-
|-
| '''firstName''' (имя пользователя) {{Since|4.0.6}}
| '''firstName'''
| (имя пользователя) {{Since|4.0.6}}
| -
| -
| -
| -
Строка 269: Строка 283:


|-
|-
| '''middleName''' (отчество пользователя) {{Since|4.0.6}}
| '''middleName'''
| (отчество пользователя) {{Since|4.0.6}}
| -
| -
| -
| -
Строка 276: Строка 291:
|}
|}


Доступ осуществляется с помощью ".", например для получения телефона пользователя можно использовать следующий код
Доступ осуществляется с помощью ".". Например, для получения телефона пользователя можно использовать следующий код
  пользователь.phone
  пользователь.phone



Версия 20:38, 26 октября 2024

Руководство по работе с переменными

Версия 4.6.0

© 2015-2023, ООО "Процессные технологии"

# Обзор

Данные в экземплярах процессов хранятся в виде переменных.

Переменные определяются в среде разработки в контексте определения процесса, значения устанавливаются в контексте экземпляра процесса.

# Переменная в определении процесса

Атрибут
Значение
название используется для ссылки на переменную, уникально в контексте процесса
описание используется только в среде разработки для дополнительных комментариев при разработке процесса
название в скриптах используется для ссылки на переменную при написании кода скриптов (JavaScript, Groovy, ...), из-за ограничения идентификаторов переменных, генерируется автоматически, уникально в контексте процесса
тип тип переменной определяет:
  • формат хранения
  • формат сериализации для передачи информации в WebServices API
  • влияет на ввод и вывод переменных на форме
значение по умолчанию при запуске процесса переменная будет иметь это значение. Для некоторых типов поддержка значения по умолчанию отсутствует.
доступ определяет права доступа (видимость) переменной

# Переменная экземпляра процесса

Атрибут
Значение
определение переменной используется для ссылки на определение переменной, заданной при разработке процесса. См. замечание.
значение значение переменной с областью видимости, соответствующей экземпляру процесса

# Строгая типизация 4.0.5+

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

Замечание. В режиме обратной совместимости исполнения процессов или при соответствующей настройке свойства undefined.variables.allowed можно избавиться от необходимости определять переменные в среде разработки, а управлять их значениями либо используя обработчики, либо API.

Замечание. Тип переменной может не совпадать с ожидаемыми значениями в случае настройки свойства strong.variables.format.enabled. Свойство variables.autocast.enabled позволяет использовать автоматическое изменение типа в соответствии с определенным в среде разработки.

# Простые типы

Класс формата
Класс значение
Описание
Сериализация
ru.runa.wfe.var.format.BooleanFormat java.lang.Boolean флаг: значение ИСТИНА или ЛОЖЬ "true" или "false"
ru.runa.wfe.var.format.LongFormat java.lang.Long целое число число в строковом выражении
ru.runa.wfe.var.format.DoubleFormat java.lang.Double дробное число число в строковом выражении
ru.runa.wfe.var.format.BigDecimalFormat java.math.BigDecimal число повышенной точности число в строковом выражении
ru.runa.wfe.var.format.DateFormat java.util.Date дата дата в указанном формате date.format.pattern
ru.runa.wfe.var.format.DateTimeFormat java.util.Date дата со временем дата в указанном формате date.format.pattern, время в формате ЧЧ:ММ
ru.runa.wfe.var.format.TimeFormat java.util.Date время время в формате ЧЧ:ММ
ru.runa.wfe.var.format.StringFormat java.lang.String строка без изменений
ru.runa.wfe.var.format.TextFormat java.lang.String текст (отличается от строки только отображением на формах) без изменений
ru.runa.wfe.var.format.FileFormat ru.runa.wfe.var.FileVariable файл название файл, например "test.doc"; обратная операция не поддерживается
ru.runa.wfe.var.format.ProcessIdFormat java.lang.Long номер процесса в системе (целое число) число в строковом выражении

# Типы для работы с исполнителями (пользователь, группа, исполнитель)

Класс формата
Класс значение
Описание


Сериализация в формате JSON


ru.runa.wfe.var.format.ExecutorFormat ru.runa.wfe.user.Executor исполнитель (группа или пользователь системы) JSON-объект вида
{"id": 1, "name": "Administrator", "fullName": "Adm A.A."}

Для передачи данных в систему достаточно заполнять "id" или "name".

ru.runa.wfe.var.format.GroupFormat ru.runa.wfe.user.Group группа в системе JSON-объект вида
{"id": 2, "name": "Administrators", "fullName": ""}

Для передачи данных в систему достаточно заполнять "id" или "name".

ru.runa.wfe.var.format.ActorFormat ru.runa.wfe.user.Actor пользователь в системе JSON-объект вида
{"id": 1, "name": "Administrator", "fullName": "Adm A.A."}

Для передачи данных в систему достаточно заполнять "id" или "name".


Для переменных этих трёх типов возможен доступ к полям:

Свойство
Описание
ru.runa.wfe.user.Executor (исполнитель)
ru.runa.wfe.user.Group (группа)
ru.runa.wfe.user.Actor (пользователь)


id (идентификатор) + + +
name (уникальный логин пользователя или название группы) + + +
description (описание) + + +
fullName (Ф.И.О. пользователя) - - +
department (подразделение пользователя) 4.3.0+ - - +
title (должность пользователя) 4.3.0+ - - +
code (код пользователя) - - +
active (активен ли пользователь) - - +
email (email пользователя) - - +
phone (телефон пользователя) - - +
ldapGroupName (соответствие ldap группы) - + -
lastName (фамилия пользователя) 4.0.6+ - - +
firstName (имя пользователя) 4.0.6+ - - +
middleName (отчество пользователя) 4.0.6+ - - +

Доступ осуществляется с помощью ".". Например, для получения телефона пользователя можно использовать следующий код

пользователь.phone

# Компонентные типы (контейнеры)

класс формата класс значение описание сериализация в формате JSON
ru.runa.wfe.var.format.ListFormat java.util.ArrayList список значений ["value1", "value2"]
ru.runa.wfe.var.format.MapFormat java.util.HashMap карта (хеш-таблица) {"key1": "value1", "key2": "value2"}
ru.runa.wfe.var.format.UserTypeFormat java.util.HashMap пользовательский тип с определенными атрибутами по аналогии с MapFormat, для определённых атрибутов и соответствующих типов

Вложенные списки и карты не поддерживаются из-за потери типизации.

# Пользовательские типы 4.1.0+

В среде разработки в контексте определения процесса можно определить новый составной тип переменной, состоящий из определенного количества именованных и типизированных атрибутов. Атрибуты, в свою очередь, могут иметь составной тип (поддерживается произвольная вложенность типов).

При доступе на сервере переменная составного типа будет иметь значение, являющееся объектом java.util.HashMap.

# Добавление нового типа

На стороне сервера

Класс-формат должен наследовать абстрактный класс ru.runa.wfe.var.format.VariableFormat.

Нужно реализовать методы:

// определяет класс для хранения значений переменных 
public Class<?> getJavaClass();
// сериализация в строку
public String format(Object object);
// десериализация из строки, обратный к предыдущему
public Object parse(String source) throws Exception;

Он используется для преобразования полученных из HTTP запроса данных в виде строк при выполнении задания в объект определенного типа.

На стороне Среды разработки

Способ регистрации обработчиков через настройки Среды разработки

TODO. В разработке.

Способ с использованием механизма расширений

См. схему точки расширения ru.runa.gpd.formats.

# Поддержка файловых переменных больших размеров

По умолчанию все переменные хранятся в БД. При использовании файлов больших размерах имеет смысл настроить хранение в файловой системе с помощью настроек file.variable.local.storage.enabled, file.variable.local.storage.path, file.variable.local.storage.enableforfilesgreaterthan

# Область допустимых значений переменных планируется

Наложение ограничений для возможных значений переменных решает следующие проблемы:

  • заменяет повторяющуюся проверку при вводе переменных на формах
  • определяет поведение компонентов на формах, исключая ввод заранее недоступных значений (требуется адаптация компонентов ввода)