|
|
Строка 3: |
Строка 3: |
| {{Licensing}} | | {{Licensing}} |
|
| |
|
| = {{Title|Introduction|Обзор}} =
| |
|
| |
|
| Данные в экземплярах процессов хранятся в виде переменных.
| | {{VariablesForUser}} |
| | |
| Переменные определяются в среде разработки в контексте определения процесса, значения устанавливаются в контексте экземпляра процесса.
| |
| | |
| == {{Title|VariableDefinition|Переменная в определении процесса}} ==
| |
| | |
| {| class="prettytable" border="1"
| |
| | <center>'''Атрибут'''</center>
| |
| | <center>'''Значение'''</center>
| |
| | |
| |-
| |
| | Название
| |
| | Используется для ссылки на переменную, уникально в контексте процесса.
| |
| | |
| |-
| |
| | Описание
| |
| | Используется только в среде разработки для дополнительных комментариев при разработке процесса.
| |
| | |
| |-
| |
| | Название в скриптах
| |
| | Используется для ссылки на переменную при написании кода скриптов (JavaScript, Groovy, ...). Из-за ограничения идентификаторов переменных генерируется автоматически, уникально в контексте процесса.
| |
| | |
| |-
| |
| | Тип
| |
| | Тип переменной определяет:
| |
| * формат хранения
| |
| * формат сериализации для передачи информации в WebServices API
| |
| * влияет на ввод и вывод переменных на форме.
| |
| | |
| |-
| |
| | Значение по умолчанию
| |
| | При запуске процесса переменная будет иметь это значение. Для некоторых типов поддержка значения по умолчанию отсутствует.
| |
| | |
| |-
| |
| | доступ
| |
| | Определяет права доступа (видимость) переменной.
| |
| | |
| |}
| |
| | |
| == {{Title|Variable|Переменная экземпляра процесса}} ==
| |
| | |
| {| class="prettytable" border="1"
| |
| | <center>'''Атрибут'''</center>
| |
| | <center>'''Значение'''</center>
| |
| | |
| |-
| |
| | Определение переменной
| |
| | Используется для ссылки на определение переменной, заданной при разработке процесса.
| |
| | |
| |-
| |
| | Значение
| |
| | Значение переменной с областью видимости, соответствующей экземпляру процесса.
| |
| | |
| |}
| |
| | |
| == {{Title|StrongTyping|Строгая типизация}} {{Since|4.0.5}}==
| |
| | |
| Все переменные должны быть определены в среде разработки, а также все значения должны соответствовать определённым типам.
| |
| | |
| '''Замечание:''' В режиме [[ServerConfigurationGuide#v3compatibility | обратной совместимости исполнения процессов]] или при соответствующей настройке свойства [[ServerConfigurationGuide#undefined.variables.allowed | undefined.variables.allowed]] можно избавиться от необходимости определять переменные в среде разработки, а управлять их значениями либо используя обработчики, либо API.
| |
| | |
| '''Замечание:''' Тип переменной может не совпадать с ожидаемыми значениями в случае настройки свойства [[ServerConfigurationGuide#strong.variables.format.enabled | strong.variables.format.enabled]]. Свойство [[ServerConfigurationGuide#variables.autocast.enabled | variables.autocast.enabled]] позволяет использовать автоматическое изменение типа в соответствии с определенным в среде разработки.
| |
| | |
| = {{Title|SimpleTypes|Простые типы}} =
| |
| | |
| {| class="prettytable" border="1"
| |
| | <center>'''Класс формата'''</center>
| |
| | <center>'''Класс значение'''</center>
| |
| | <center>'''Описание'''</center>
| |
| | <center>'''Сериализация'''</center>
| |
| | |
| |-
| |
| | 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
| |
| | Дата
| |
| | Дата в указанном формате [[ServerConfigurationGuide#date.format.pattern | date.format.pattern]]
| |
| | |
| |-
| |
| | ru.runa.wfe.var.format.DateTimeFormat
| |
| | java.util.Date
| |
| | Дата со временем
| |
| | Дата в указанном формате [[ServerConfigurationGuide#date.format.pattern | 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
| |
| | Номер процесса в системе (целое число)
| |
| | Число в строковом выражении
| |
| | |
| |}
| |
| | |
| = {{Title|ExecutorTypes|Типы для работы с исполнителями (пользователь, группа, исполнитель)}} =
| |
| | |
| {| class="prettytable" border="1"
| |
| | <center>'''Класс формата'''</center>
| |
| | <center>'''Класс значение'''</center>
| |
| | <center>'''Описание'''</center>
| |
| | <BR><BR><center>'''Сериализация в формате JSON'''</center>
| |
| | |
| | |
| |-
| |
| | 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".
| |
| | |
| |}
| |
| | |
| <BR>
| |
| | |
| Для переменных этих трёх типов возможен доступ к полям:
| |
| | |
| {| class="prettytable" border="1"
| |
| | <center>'''Свойство'''</center>
| |
| | <center>'''Описание'''</center>
| |
| | <center>'''ru.runa.wfe.user.Executor''' (исполнитель)</center>
| |
| | <center>'''ru.runa.wfe.user.Group''' (группа)</center>
| |
| | <BR><BR><center>'''ru.runa.wfe.user.Actor''' (пользователь)</center>
| |
| | |
| | |
| |-
| |
| | '''id'''
| |
| | Идентификатор
| |
| | +
| |
| | +
| |
| | +
| |
| | |
| |-
| |
| | '''name'''
| |
| | Уникальный логин пользователя или название группы
| |
| | +
| |
| | +
| |
| | +
| |
| | |
| |-
| |
| | '''description'''
| |
| | Описание
| |
| | +
| |
| | +
| |
| | +
| |
| | |
| |-
| |
| | '''fullName'''
| |
| | Ф.И.О. пользователя
| |
| | -
| |
| | -
| |
| | +
| |
| | |
| |-
| |
| | '''department'''
| |
| | Подразделение пользователя {{Since|4.3.0}}
| |
| | -
| |
| | -
| |
| | +
| |
| | |
| |-
| |
| | '''title'''
| |
| | Должность пользователя {{Since|4.3.0}}
| |
| | -
| |
| | -
| |
| | +
| |
| | |
| |-
| |
| | '''code'''
| |
| | Код пользователя
| |
| | -
| |
| | -
| |
| | +
| |
| | |
| |-
| |
| | '''active'''
| |
| | Активен ли пользователь
| |
| | -
| |
| | -
| |
| | +
| |
| | |
| |-
| |
| | '''email'''
| |
| | Email пользователя
| |
| | -
| |
| | -
| |
| | +
| |
| | |
| |-
| |
| | '''phone'''
| |
| | Телефон пользователя
| |
| | -
| |
| | -
| |
| | +
| |
| | |
| |-
| |
| | '''ldapGroupName'''
| |
| | Соответствие ldap группы
| |
| | -
| |
| | +
| |
| | -
| |
| | |
| |-
| |
| | '''lastName'''
| |
| | Фамилия пользователя {{Since|4.0.6}}
| |
| | -
| |
| | -
| |
| | +
| |
| | |
| |-
| |
| | '''firstName'''
| |
| | Имя пользователя {{Since|4.0.6}}
| |
| | -
| |
| | -
| |
| | +
| |
| | |
| |-
| |
| | '''middleName'''
| |
| | Отчество пользователя {{Since|4.0.6}}
| |
| | -
| |
| | -
| |
| | +
| |
| | |
| |}
| |
| | |
| Доступ осуществляется с помощью ".". Например, для получения телефона пользователя можно использовать следующий код
| |
| пользователь.phone
| |
| | |
| = {{Title|ContainerTypes|Компонентные типы (контейнеры)}} =
| |
| | |
| {| class="prettytable" border="1"
| |
| | <center>'''Класс формата'''</center>
| |
| | <center>'''Класс значение'''</center>
| |
| | <center>'''Описание'''</center>
| |
| | <center>'''Сериализация в формате JSON'''</center>
| |
| | |
| |-
| |
| | 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, для определённых атрибутов и соответствующих типов
| |
| | |
| |}
| |
| | |
| {{Note|Вложенные списки и карты не поддерживаются из-за потери типизации}}
| |
| | |
| = {{Title|UserTypes|Пользовательские типы}} {{Since|4.1.0}} =
| |
| | |
| В среде разработки в контексте определения процесса можно определить новый составной тип переменной, состоящий из определенного количества именованных и типизированных атрибутов. Атрибуты, в свою очередь, могут иметь составной тип (поддерживается произвольная вложенность типов).
| |
| | |
| При доступе на сервере переменная составного типа будет иметь значение, являющееся объектом java.util.HashMap.
| |
|
| |
|
| = {{Title|Extensions|Добавление нового типа}} = | | = {{Title|Extensions|Добавление нового типа}} = |
Руководство по работе с переменными
Версия 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
# Область допустимых значений переменных планируется
Наложение ограничений для возможных значений переменных решает следующие проблемы:
- заменяет повторяющуюся проверку при вводе переменных на формах
- определяет поведение компонентов на формах, исключая ввод заранее недоступных значений (требуется адаптация компонентов ввода).
# Замечания
- Поскольку валидаторы полей уже разработаны, требуется в раздел "Область допустимых значений переменных (планируется)" внести их описание.