Variables: различия между версиями
Nvasiliev (обсуждение | вклад) |
Nvasiliev (обсуждение | вклад) |
||
Строка 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, ...), из-за ограничения идентификаторов переменных, генерируется автоматически, уникально в контексте процесса |
тип | тип переменной определяет:
|
значение по умолчанию | при запуске процесса переменная будет иметь это значение. Для некоторых типов поддержка значения по умолчанию отсутствует. |
доступ | определяет права доступа (видимость) переменной |
# Переменная экземпляра процесса
определение переменной | используется для ссылки на определение переменной, заданной при разработке процесса. См. замечание. |
значение | значение переменной с областью видимости, соответствующей экземпляру процесса |
# Строгая типизация 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 | номер процесса в системе (целое число) | число в строковом выражении |
# Типы для работы с исполнителями (пользователь, группа, исполнитель)
| |||
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". |
Для переменных этих трёх типов возможен доступ к полям:
| ||||
id | (идентификатор) | + | + | + |
name | (уникальный логин пользователя или название группы) | + | + | + |
description | (описание) | + | + | + |
fullName | (Ф.И.О. пользователя) | - | - | + |
department | (подразделение пользователя) 4.3.0+ | - | - | + |
title | (должность пользователя) 4.3.0+ | - | - | + |
code | (код пользователя) | - | - | + |
active | (активен ли пользователь) | - | - | + |
(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
# Область допустимых значений переменных планируется
Наложение ограничений для возможных значений переменных решает следующие проблемы:
- заменяет повторяющуюся проверку при вводе переменных на формах
- определяет поведение компонентов на формах, исключая ввод заранее недоступных значений (требуется адаптация компонентов ввода)