Relations

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

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

Версия 4.4.1

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


# Понятие бинарное отношение

Понятие «бинарное отношение»

Бинарное отношение можно рассматривать как расширение понятия функция.

Определение. Бинарным отношением между множествами A и B называется любое подмножество P декартова произведения множества A на множество B. Часто, чтобы обозначить принадлежность упорядоченной пары (a,b) к бинарному отношению P вместо записи (a,b) BelongTo.png P используют обозначения P(a,b) или aPb. При этом говорят, что a находится в отношении P к b.

Замечание1. Для множеств A и B, состоящих из конечного числа элементов, любое отношение можно задать, определив набор упорядоченных пар (a,b)для этого отношения.

Замечание2. Некоторые (но не все) бинарные отношения соответствуют функциям. То есть некоторые бинарные отношения являются функциями. Можно определить функцию как такое бинарное отношение R, в котором каждому значению b отно­шения aPb соответствует лишь одно единственное значение a (но не наоборот). В этом случае a=f(b), где f - функция, соответствующая бинарному отношению R.


# Работа с отношениями в web интерфейсе RunaWFE

Концепция отношений реализована в интерфейсе RunaWFE следующим образом

1. В главном меню системы появился еще один пункт меню - Отношения (в английской локализации - Relations).


R23 ru.png

В этом пункте можно посмотреть/добавить/удалить отношение, открыть отношение и отредактировать множество составляющих его пар.


2. Для каждого исполнителя в его свойствах добавлены два раздела:

  • Отношения, в которых он может находиться в левой части
  • Отношения, в которых он может находиться в правой части


R24 ru.png


Каждое отношение можно открыть и отредактировать множество исполнителей в другой части отношения


R25 ru.png

Для отношений вводятся права - изменение отношений, просмотр, права на установку прав и т.д. (также как для Исполнителей или бизнес-процессов)


Rpic4 ru.png


# Использование отношений

Отношения используются:

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

# Использование бинарных отношений для упрощения инициализации ролей

Роли и их инициализация

Исполнителями заданий бизнес-процесса могут быть как сотрудники предприятия, так и информационные системы или специализированные устройства.

Связывание узлов бизнес-процесса с исполнителями заданий производится при помощи ролей. При разработке бизнес-процесса создается роль и ставится в соответствие определенным узлам схемы. Во время выполнения бизнес-процесса ролям назначаются конкретные исполнители.

Применение отношений к инициализации ролей

В RunaWFE реализована возможность инициализации ролей не только при помощи функций над исполнителями заданий, но и при помощи отношений.

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

Во-вторых, при использовании отношений процедура задания возможных исполнителей задания становится очень простой, она реализована прямо в интерфейсе RunaWFE.

В качестве примеров рассмотрим следующие отношения над множеством сотрудников предприятия:

1. Непосредственный руководитель сотрудника

2. Секретари отдела, в котором работает сотрудник

3. Заместители руководителя департамента, в котором работает сотрудник

Из них первое отношение является функцией, но следующие два отношения функциями не являются, т.к. одному сотруднику предприятия они могут ставить в соответствие множество, состоящее из нескольких сотрудников.

Простота задания отношения следует из того, что любое отношение над исполнителями заданий можно задать множеством пар (Исполнитель1, Исполнитель2), при этом не требуется проверять каких-либо ограничений (как, например, для функции – что она возвращает только одно значение для одного исполнителя).


Использование групп пользователей при задании отношений

Задавать отношения перечислением всех определяющих его пар пользователей неудобно, так как таких пар может быть очень много. Для уменьшения количества вводимых данных можно использовать группы пользователей.

Группы пользователей служат для объединения пользователей по какому-либо признаку, для коллективных операций со всеми пользователями, входящими в группу достаточно произвести только одну операцию с группой. Одни группы могут содержать в себе другие группы. В RunaWFE группа «наследует» свойства всех групп, в которые она входит.

В RunaWFE отношение задается множеством пар (Исполнитель1, Исполнитель2), в которых Исполнитель является пользователем или группой пользователей.

Инициализация роли производится следующим образом:

  1. Из указанной в инициализаторе роли переменной бизнес-процесса берется ее значение - код пользователя. (В качестве переменной можно использовать роль бизнес-процесса). Это значение будет соответствовать правой части отношения.
  2. Строится множество значений всех левых частей отношения, соответствующих данному элементу правой части. Делается это так: Для Исполнителя – значения правой части отношения находятся все группы, в которые он входит (хотя бы в одну из их подгрупп). Далее находятся все пары определенные в СУБП для данного отношения, у которых в правой части стоит Исполнитель или одна из найденных групп. Далее рассматривается множество всех левых частей этих пар.

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

Например, отношение "Непосредственный руководитель" можно задать при помощи пар следующим образом:

(сотрудник1, сотрудник2)

(сотрудник1, сотрудник-N)

Оно соответствует тому, что сотрудник1 является руководителем сотрудника2, … сотрудника N.

Но это же отношение можно задать и одной парой:

(сотрудник1, группа1)

В данном случае оно соответствует тому, что сотрудник является руководителем любого сотрудника, входящего в группу "группа", а также в любую подгруппу данной группы

Замечание. Кроме того, существует понятие обратного отношения, в этом случае параметр по которому строится отношение будет соответствовать левой части. При этом строиться будет множество значений всех правых частей отношения, соответствующих данному элементу левой части.


Использование отношений в инициализаторе роли

В качестве инициализатора роли возможно использовать отношения. Делается это на закладке «задать роль с помощью отношения». Используйте "Настройки соединения" для ввода параметров соединения и проверки связи с сервером. Нажмите "Синхронизация" для получения списка отношений с сервера.


Rpic5 1.png

Введите название отношения или выберите из списка. В качестве параметра может быть задана переменная формата Пользователь, Исполнитель, Группа, или Роль-дорожка.


Rpic6 1.png

Также можно использовать “Обратное отношение”, установив соответствующую опцию. При этом параметр отношения будет соответствовать левой части, а не правой.

# Отношения в компонентах форм

# Список компонентов

Для выбора исполнителя/пользователя с помощью отношений, предусмотрены следующие компоненты:

  • Выбрать исполнителя по отношению (ChooseExecutorFromRelation)
  • Выбрать исполнителя по отношению с параметром (ChooseExecutorByRelation)
  • Выбрать пользователя по отношению с параметром (ChooseActorByRelation)

Описание данных тегов можно найти в разделе Руководство по работе с формами (Выбрать исполнителя по отношению, Выбрать исполнителя по отношению с параметром, Выбрать пользователя по отношению с параметром)

# Использование отношений на примере компонента ChooseActorByRelation

Расположим на форме компонент “ChooseActorByRelation”.

Ftlrel ru1 2.png


При этом необходимо задать следующие параметры:

  • “Пользователь”. Переменная типа Пользователь (или Роль) для сохранения результата выбора;
  • “Название отношения”. Здесь есть возможность задать как существующую переменную бизнес-процесса (в которой содержится имя отношения), так и явно вписать имя отношения (т.е. константу);
  • “Параметр”. Здесь задаётся параметр отношения, по которому выполняется фильтрация пар по правой части (в случае обратного отношения - по левой), может быть задан как с помощью непосредственного строкового значения (название группы или исполнителя), так и с помощью переменной типа Исполнитель.
  • “Обратное отношение”. Принимает значение Да/Нет, определяет используется ли обратное отношение (если "Да", то фильтрация пар по левой части)

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

Из этого списка в ходе выполнения бизнес процесса выбирается пользователь (которым например, может быть проинициализирована роль).


Далее рассмотрим примеры нескольких отношений.


# Отношение “Boss” (Руководители группы)

Создадим отношение вида:

Ftlrel ru2.png


Т.е. имеются пары ivanov-rabs, sidorov-rabs где rabs это группа

Создадим бизнес-процесс с возможностью выбора для выполнения задания одного из руководителей группы “rabs”. Для этого расположим на форме компонент ChooseActorByRelation со следующей конфигурацией:

 ${ChooseActorByRelation("Роль2", "Boss", group, "false")}

Т.е. для сохранения результата выбора используется роль Роль2, название отношения задано строковым значением (“Boss”), параметр - переменной "group" (имеет значение rabs) формата Группа, обратное отношение не используется.


Результатом применения данного компонента будет список, содержащий пользователей руководителей группы rabs.

Ftlrel ru3.png

# Отношение “Boss2” (Группа пользователей - руководители другой группы пользователей)

В этом случае конфигурация комопнента будет следующего вида:

 ${ChooseActorByRelation("Роль2", "Boss2", "group", "false")}

где Роль2 – роль которую инициализируем с помощью компонента отношений

Boss2 – имя отношения

group – группа (значение “rabs”)

В отношении Boss2 существует пара типа группа-группа (manager-rabs)

Ftlrel ru4 1.png


Результатом применения данного компонента форм будет список, содержащий пользователей которые входят в группу “manager” и при этом являются руководителями группой “rabs”

Ftlrel ru5 1.png


# Отношение “Boss3” (Пользователь руководитель группы и всех подгрупп данной группы)

В группу “rabs” входит подгруппа “podrabs”

Создадим отношение Boss3 вида:

Ftlrel ru6.png

Т.е. пользователь Fedorov является руководителем группы “rabs” и всех подгрупп входящих в данную группу.

Создадим бизнес-процесс с формой содержащей компонент ChooseActorByRelation со следующей конфигурацией:

 ${ChooseActorByRelation("Роль2", "Boss3", "value@podrabs", "false")}


В данном случае параметр задан строковым значением "podrabs"

Результатом применения будет список, содержащий лишь одного пользователя Fedorov, который является руководителем группы “rabs” и соответственно всех подгрупп входящих в данную группу.

Ftlrel ru7.png

# Отношения в эскалации

Начиная с версии 4.1.1, для определения иерархии эскалации заданий есть возможность использовать отношения.

Пример настройки эскалации с использованием отношений смотрите в Настройка и включение эскалации в Среде разработки

# Отношения в мультиподпроцессе и мультидействии

Создание мультиподпроцесса по отношению рассмотрено в разделе Мультиподпроцесс по отношению

# Отношения в обработчиках

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

  • Назначить Роль (в качестве инициализатора роли)
  • Получить исполнителя по отношению
  • Получить список исполнителей по отношению