TrainingMaterials Features

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

RunaWFE. Практикум. Использование возможностей RunaWFE для решения задач

Версия 4.6.0

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


Цель занятия

Целью данного занятия является изучение возможностей RunaWFE Free для решения задач.

Списки исполнителей

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

В качестве инициализаторов роли могут быть использованы:

  • исполнитель по имени
  • исполнитель по коду
  • такие функции над оргструктурой как "Руководитель", "Директор"
  • инициализация с помощью отношения
  • кастомизированые инициализаторы (пользователи и гурппы Active Directory)

и т.д.

Инициализатор роли - "Исполнители из списка"

В версии RunaWFE Free 4.4 был добавлен новый инициализатор роли - "Исполнители из списка", позволяющий инициализировать роль списком исполнителей (переменной формата Список(Исполнитель)). В отличие от инициализации роли конкретной группой, в данном случае есть возможность формировать (добавление, удаление исполнителей) список в процессе выполнения БП.

Для редактирования инициализатора роли, выделите роль и нажмите "Изменить".

Новый инициализатор доступен в общем списке инициализаторов на вкладке "Код"

Tm feature 1.png
Рисунок 2.01. Выбор инициализатора "Исполнитель из списка"

В поле "Список исполнителей" задается переменная список, содержащая исполнителей.

Используется следующий синтаксис ${Список}

Tm feature 2.png
Рисунок 2.02. Конфигурация инициализатора "Исполнитель из списка"


Tm feature 3.png
Рисунок 2.03. Переменная список, используемая в инициализаторе "Исполнитель из списка"

Обработчики получения списка исполнителей

Для получения списка исполнителей, входящих в группу, в RunaWFE Free 4.4 были добавлены обработчики - "Получить список исполнителей группы" и "Получить список исполнителей по отношению".


Получить список исполнителей группы

В качестве входного параметра обработчик принимает группу, исполнителей которой необходимо получить. Группа может быть задана переменной формата "Группа" или "Строка".

В выходном параметре "Результат" должна использоваться переменная формата Список(Исполнитель). Ниже приведен пример конфигурации обработчика


Tm feature 4.png
Рисунок 2.04. Конфигурация обработчика "Получить список исполнителей группы"

Получить список исполнителей по отношению

Входные параметры:

  • "название отношения" - может быть задано как с помощью строковой переменной (содержащей название отношения), так и с помощью ввода названия отношения непосредственно в конфигураторе
Tm feature 5.png
Рисунок 2.05. Конфигурация обработчика "Получить список исполнителей по отношению"


  • "параметр отношения" - аналогично другим обработчикам, работающим с отношениями, в зависимости от выбранного значения в поле "Использовать обратное отношение" параметр используется как правая или левая часть в отношении.

Может быть задан с помощью роли или переменной формата Исполнитель

  • "использовать обратное отношение" - Да/Нет
  • "включая группы" - в случае "Нет" из списка исполнителей выбранных по отношению будут исключены группы.

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

Пример работы со списками исполнителей

Рассмотрим пример использования вышеописанных обработчиков. Используем для этого бизнес-процесс "Игра в контакт".

В бизнес-процессе есть следующие роли.

  • Ведущий
  • Спрашивающий
  • Контактер
  • Команда.

Ведущий запускает экземпляр бизнес-процесса. В стартовой форме он вводит загаданное слово и его первую букву. После этого все остальные члены команды (определяются членством в группе "Группа МИБ-1" за исключением "Ведущего", если он является членом этой группы) получают задание "Придумать вопрос". В форме этого задания пользователь вводит вопрос и ответ на него. После того, как кто-то из членов команды выполнит задание (Спрашивающий), следующее задание "Установить контакт" получают все остальные отгадывающие (определяются отношением «Одногруппники», примененным к выполнившему задание, за исключением "Ведущего" и "Спрашивающего"). В форме задания "Установить контакт" пользователь (Контактер) должен ввести свой ответ на вопрос, начинающийся на данную букву.

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

После старта бизнес-процесса под ролью "Ведущий", должна быть сформирована "Команда" состоящая из членов группы "Группа МИБ-1" за исключением "Ведущего". Для реализации этого создадим переменную формата Группа и проинициализируем ее значением по умолчанию "Группа МИБ-1", а также переменную "Список исполнителей" формата Список(Исполнитель).


Tm feature 6.png
Рисунок 2.06. Переменная формата "Группа" со значением по умолчанию

Далее используем задачу сценария с обработчиком "Получить список исполнителей группы" со следующей конфигурацией


Tm feature 7.png
Рисунок 2.07. Обработчик "Получить список исполнителей группы"

И исключаем "Ведущего" из полученного списка с помощью обработчика "Удалить объект из списка".


Tm feature 8.png
Рисунок 2.08. Обработчик "Удалить объект из списка"


Результат сохраняем в том же списке исполнителей - "Команда".

Для роли "Спрашивающий" используем инициализатор "Исполнитель из списка".

Tm feature 9.png
Рисунок 2.09. Инициализатор "Исполнитель из списка"


Посмотрим как это работает.

Группа МИБ-1:

Tm feature 10.png
Рисунок 2.10. Список членов группы "Группа МИБ-1"


Запускает БП пользователь, входящий в группу, например, "Мухин". Далее в результате выполнения обработчика - формируется список "Команда", состоящая из членов группы.

Tm feature 11.png
Рисунок 2.11. Формирование списка "Команда"


После выполнения обработчика "Удалить объект из списка" из списка "Команда" удаляется "Мухин", запустивший экземпляр процесса. И роль "Спрашивающий" (задача "Придумать вопрос") назначается на временную группу, уже без "Ведущего".

Tm feature 12.png
Рисунок 2.12. Назначение задания "Придумать вопрос"


Следующее задание "Установить контакт" должны получить все одногруппники (определяются отношением «Одногруппники», примененным к выполнившему задание "Придумать вопрос" под ролью "Спрашивающий", за исключением "Ведущего" и "Спрашивающего"). Для этого воспользуемся обработчиком "Получить список исполнителей по отношению", а также уже использованным ранее обработчиком удаления объекта из списка.


Tm feature 13.png
Рисунок 2.13. Получение списка исполнителей по отношению "Одногруппники"


Tm feature 14.png
Рисунок 2.14. Исключение "Ведущего"


Для роли "Контактер" используем уже знакомый инициализатор "Исполнитель из списка"

Tm feature 14 2.png
Рисунок 2.15. Инициализатор для роли "Контактер"


Посмотрим как это работает.


Tm feature 15.png
Рисунок 2.16. Отношение "Одногруппники"


Пусть задачу "Придумать вопрос" выполнил "Личинкин", тогда применяя к нему отношение, получаем список одногруппников: "Гусеницын", "Мотыльков", "Мухин".

Tm feature 16.png
Рисунок 2.17. Получение списка одногруппников "Личинкина"


Из полученного списка удаляется "Мухин" и роль "Контактер" назначается на временную группу без "Ведущего".

Tm feature 17.png
Рисунок 2.18. Назначение задачи "Установить контакт"

Полезные обработчики

Получение номера текущего экземпляра процесса

Функция get_process_id() обработчика "Выполнить формулу" позволяет получить некоторый уникальный идентификатор, являющийся номером текущего запущенного экземпляра БП.

Полезность использования данной функции можно посмотреть на примере БП из практикума по внешнему хранилищу данных (Практическое занятие "Разработка бизнес-процесса "Заказ автотранспорта").

Сотрудники предприятия подают заявки на заказ транспорта из автопарка (БП "Заявка"). Одобренные руководителем заявки сохраняются во внешнем хранилище для дальнейшей обработки в другом БП ("Планирование"), в рамках которого диспетчер выполняет отбор заявок и рассмотрение возможности выполнения. Сотрудник должен получить информацию о статусе обработки и результате рассмотрения его заявки. Для этого каждая заявка должна иметь свой уникальный номер, связанный с экземпляром БП, из которого она была подана.

Для получения этого номера используется элемент "Задача сценария" с обработчиком "Выполнить формулу".

Zak 29.png
Рисунок 3.01. Выбор класса обработчика для задачи "Сформировать id заявки"

В конфигурации обработчика используется функция get_process_id().


Zak 30.png
Рисунок 3.02. Конфигурация задачи "Сформировать id заявки"

Получение текущей даты-времени

Для возвращения текущих даты, времени, даты-времени используются соответствующие функции обработчика "Выполнить формулу"

  • current_date()
  • current_time()
  • current_date_time().

Пример возможного применения данной функции можно найти в практическом занятии "Работа с MS Word и MS Excel документами", где полученная текущая дата используется в служебной записке о начислении премии.


R196 ru.png
Рисунок 3.03. Определение текущей даты


Tm feature18.png
Рисунок 3.04. Использование текущей даты в шаблоне DOCX-документа

Получение ФИО пользователя и использование падежей

Часто в БП необходимо получить информацию об исполнителе из его профиля, например его ФИО. В практическом занятии "Работа с MS Word и MS Excel документами" ФИО исполнителей (сотрудника, руководителя) используется в формируемой с помощью обработчика DOCX служебной записке о начислении премии. При этом ФИО сотрудника в документе должно быть представлено в дательном падеже.

Для получения ФИО пользователя используется обработчик "Получить информацию об исполнителе".


Tm feature19.png
Рисунок 3.05. Обработчик "Получение информации об исполнителе"


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

В параметре "Формат" необходимо выбрать информацию, которую требуется получить

  • active - статус активности
  • code - код
  • department - подразделение
  • description - описание
  • email
  • fullName - полное имя пользователя (ФИО)
  • id
  • name - имя
  • phone - телефон.


Результат сохраняется в переменную формата "Строка".


R194c ru.png
Рисунок 3.06. Конфигурация обработчика для получения ФИО


Для склонения ФИО используется обработчик "Выполнить формулу" с функцией FIO_case_ru(fio, caseNumber, mode).

Параметры функции:

  • fio - фамилия, имя и отчество в именительном падеже (переменная формата "Строка")
  • caseNumber - номер падежа от 1 до 6
  • mode - строка форматирования:
  Символы F, I и O заменяются на фамилию, имя или отчество в соответствующем падеже. 
  Символы f, i и o заменяются на первую букву фамилии, имени или отчества.

Например, при следующих параметрах

'ФИО сотрудника 3'=FIO_case_ru('ФИО сотрудника', 3, "F i o")

функция вернет ФИО сотрудника в дательном падеже, первую букву Имени и первую букву Отчества, например Иванову И.И. в переменную "ФИО сотрудника 3".

Еще примеры:

FIO_case_ru("Иванов Иван Иванович", 1, "F N P :)")         Иванов Иван Иванович :) 
FIO_case_ru("Иванова Ира Ивановна", 2, "F N p")            Ивановой Иры И. 
FIO_case_ru("Иванов Иван Иванович", 3, "F n P")            Иванову И. Ивановичу 
FIO_case_ru("Иванова Ира Ивановна", 4, "F n p")            Иванову И. И. 
FIO_case_ru("Иванов Иван Иванович", 5, "f N P")            И. Иваным Ивановичем 
FIO_case_ru("Иванова Ира Ивановна", 6, "о P n")            о Ивановне И. 
FIO_case_ru("Апырвапыркина Фыва Няковна", 5, "F N P")      Апырвапыркиной Фывой Няковной

Использование формулы-обработчика для получения случайного числа (датчик или генератор случайных чисел)

random() - возвращает псевдослучайное число с плавающей запятой из диапазона [0, 1), то есть, от 0 (включительно) до 1 (но не включая 1), которое затем можно отмасштабировать до нужного диапазона.

  • Поместить Задачу сценария на схему
  • Для удобства и компактности в опциях Задачи сценария (кликнув по ПКМ) выбрать Компактный вид
  • Выбрать класс обработчика - Выполнить формулу
  • По клику на Задаче сценария заполнить кофигурацию

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

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

Например, для получения целого числа в диапазоне от 0 до 9 нужно написать в конфигурации обработчика ПеременнаяЦелогоТипа = random()*10, где ПеременнаяЦелогоТипа - созданная в процессе переменная целого типа.

Выполнить формулу - random()
Выполнить формулу - random()

Использование формулы-обработчика для создания выводимых на форму задания текстов

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

В следующем примере сформируем текст служебной записки о начислении премии сотруднику.

Пусть в строковой переменной "ФИО сотрудника 3" содержится ФИО в дательном падеже, а в переменной формата "Число повышенной точности" - "Размер премии" содержится размер премии. Текст сохраним в переменной "Текст" (формата "Текст" или "Строка"):

Текст = "Прошу начислить сотруднику " + 'ФИО сотрудника 3' + " премию в размере " + 'Размер премии' + " рублей"

Полученную переменную выведем на форму с помощью компонента "Отобразить переменную" (форма отображения - "как строку").


Рисунок 3.07. Вывод текста о начислении премии, сформированного в обработчике "Выполнить формулу"
Рисунок 3.07. Вывод текста о начислении премии, сформированного в обработчике "Выполнить формулу"

 

Режим последовательного показа форм заданий

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

Для переключения режима потребуется войти в настройки веб-интерфейса (пункт "Настройки" доступен пользователям из группы Administrators), перевести параметр task.form.autoShowNext в значение true и нажать "Сохранить" внизу таблицы с параметрами. Такой способ настройки позволяет применить новое значение параметра сразу, без перезагрузки сервера.

Tm feature21.png
Рисунок 4.01. Включение режима последовательного отображения форм заданий


Рассмотрим пример.

БП с элементами Начало -> Задание 1 -> Задание 2 -> Окончание, стартовый узел не имеет формы.

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


Tm feature22.png
Рисунок 4.02. Автоматическое отображение формы следующей задачи


После выполнения задачи "Задание 1" будет сразу отображена форма следующей задачи "Задание 2".


Tm feature23.png
Рисунок 4.03. Автоматическое отображение формы следующей задачи


Замечание. Если между узлами действиями будет расположен один из следующих элементов - "Таймер", "Обработка события", "Подпроцесс"(но не "Композиция"), "Мультиподпроцесс", "Параллельный шлюз", "Задача бота" - то режим последовательного отображения не сработает и для пользователя будет открыта страница "Список заданий".

Также стоит обратить внимание на еще одну особенность. По умолчанию в RunaWFE Free (начиная с версии 4.3.0) используется режим коротких транзакций (описание работы транзакций при исполнении процессов на сервере) при котором каждый элемент работает в новой транзакции. В этом случае расположенный между двумя узлами действиями элемент: "Исключающий шлюз", "Задача сценария", "Мультидействие", "Генерация события" также приведет к тому, что следующая форма не будет отображена автоматически. Но в случае использования длинных транзакций режим последовательного отображения форм будет работать.


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


Для переключения границ транзакций на уровне процесса необходимо

  • открыть БП в DevStudio,
  • перейти в свойства БП,
  • изменить "Транзакция для выполнения по умолчанию".
Tm feature24.png
Рисунок 4.04. Изменение границ транзакций на уровне БП


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


Начиная с версии RunaWFE Free 4.4.1, изменить режим транзакций на уровне сервера можно в веб интерфейсе - пункт меню "Настройки", раздел "Основные настройки", где перевести параметр process.execution.node.async.default в false (режим длинных транзакций) или true (режим коротких, по умолчанию).

Tm feature24 2.png
Рисунок 4.05. Изменение границ транзакций на уровне сервера

Использование замещений

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

В системе RunaWFE Free правила замещения "привязаны" к исполнителям задач. Для каждого исполнителя в системе есть возможность снять статус “Активен”, например по причине отъезда в командировку или болезни.

Tm feature25.png
Рисунок 5.01. Статус "Активен" в свойствах пользователя


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

Рассмотрим пример настройки замещений, в котором все задания пользователя "Иванов" (в случае его отсутствия - сброшен статус "Активен") будут перенаправлены Администратору.

Текущий список заданий пользователя "Иванов":

Tm feature26.png
Рисунок 5.02. Текущий список заданий пользователя "Иванов"


Добавим правило замещения, для этого необходимо:

  • войти в веб интерфейс RunaWFE Free под "Administrator"
  • открыть свойства исполнителя "Иванов"
  • перейти к секции "Заместители"
  • открыть ссылку "Добавить правило":
Tm feature27.png
Рисунок 5.03. Секция "Заместители" в свойствах пользователя

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

Tm feature28.png
Рисунок 5.04. Добавление нового правила замещения исполнителя


  • Критерий - "Замещать всегда"
  • Применять - "Да"
  • Оргфункция - "Исполнитель по имени".

В качестве имени пользователя - выбрать из списка пользователей - "Administrator". Щёлкнуть "Добавить".

Новое правило будет в списке правил замещения пользователя "Иванов":

Tm feature29.png
Рисунок 5.05. Секция с правилами замещения исполнителя


Уберем статус "Активен" у пользователя "Иванов", перейдем в список заданий (пользователя Administrator) и увидим следующее:

Tm feature30.png
Рисунок 5.06. Список заданий пользователя, полученных по замещению


Как можно наблюдать на скриншоте выше, Администратор получил все задачи пользователя "Иванов". Задачи, полученные по замещению, выделяются желтым цветом.

Ссылки

  1. Документация Runa WFE [официальный сайт проекта]. URL: https://runawfe.ru/rus/Документация