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

Материал из RunaWFE
Перейти к навигации Перейти к поиску
м
 
Строка 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|Добавление нового типа}} =

Текущая версия на 07:09, 5 ноября 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

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

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

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


# Замечания

  • Поскольку валидаторы полей уже разработаны, требуется в раздел "Область допустимых значений переменных (планируется)" внести их описание.