TrainingMaterials Features
RunaWFE. Практикум. Использование возможностей RunaWFE для решения задач
Версия 4.6.0
© 2015-2023, ООО "Процессные технологии"
Цель занятия
Целью данного занятия является изучение возможностей RunaWFE Free для решения задач.
Списки исполнителей
В бизнес-процессах производится связывание узлов-действий с исполнителями заданий при помощи ролей. Во время выполнения бизнес-процесса ролям назначаются конкретные исполнители. Процедура назначения исполнителей на роль называется инициализацией роли.
В качестве инициализаторов роли могут быть использованы:
- исполнитель по имени
- исполнитель по коду
- такие функции над оргструктурой как "Руководитель", "Директор"
- инициализация с помощью отношения
- кастомизированые инициализаторы (пользователи и гурппы Active Directory)
и т.д.
Инициализатор роли - "Исполнители из списка"
В версии RunaWFE Free 4.4 был добавлен новый инициализатор роли - "Исполнители из списка", позволяющий инициализировать роль списком исполнителей (переменной формата Список(Исполнитель)). В отличие от инициализации роли конкретной группой, в данном случае есть возможность формировать (добавление, удаление исполнителей) список в процессе выполнения БП.
Для редактирования инициализатора роли, выделите роль и нажмите "Изменить".
Новый инициализатор доступен в общем списке инициализаторов на вкладке "Код"
В поле "Список исполнителей" задается переменная список, содержащая исполнителей.
Используется следующий синтаксис ${Список}
Обработчики получения списка исполнителей
Для получения списка исполнителей, входящих в группу, в RunaWFE Free 4.4 были добавлены обработчики - "Получить список исполнителей группы" и "Получить список исполнителей по отношению".
Получить список исполнителей группы
В качестве входного параметра обработчик принимает группу, исполнителей которой необходимо получить. Группа может быть задана переменной формата "Группа" или "Строка".
В выходном параметре "Результат" должна использоваться переменная формата Список(Исполнитель). Ниже приведен пример конфигурации обработчика
Получить список исполнителей по отношению
Входные параметры:
- "название отношения" - может быть задано как с помощью строковой переменной (содержащей название отношения), так и с помощью ввода названия отношения непосредственно в конфигураторе
- "параметр отношения" - аналогично другим обработчикам, работающим с отношениями, в зависимости от выбранного значения в поле "Использовать обратное отношение" параметр используется как правая или левая часть в отношении.
Может быть задан с помощью роли или переменной формата Исполнитель
- "использовать обратное отношение" - Да/Нет
- "включая группы" - в случае "Нет" из списка исполнителей выбранных по отношению будут исключены группы.
Выходной параметр "Результат" - переменная формата Список(Исполнитель), будет содержать список исполнителей выбранных по отношению.
Пример работы со списками исполнителей
Рассмотрим пример использования вышеописанных обработчиков. Используем для этого бизнес-процесс "Игра в контакт".
В бизнес-процессе есть следующие роли.
- Ведущий
- Спрашивающий
- Контактер
- Команда.
Ведущий запускает экземпляр бизнес-процесса. В стартовой форме он вводит загаданное слово и его первую букву. После этого все остальные члены команды (определяются членством в группе "Группа МИБ-1" за исключением "Ведущего", если он является членом этой группы) получают задание "Придумать вопрос". В форме этого задания пользователь вводит вопрос и ответ на него. После того, как кто-то из членов команды выполнит задание (Спрашивающий), следующее задание "Установить контакт" получают все остальные отгадывающие (определяются отношением «Одногруппники», примененным к выполнившему задание, за исключением "Ведущего" и "Спрашивающего"). В форме задания "Установить контакт" пользователь (Контактер) должен ввести свой ответ на вопрос, начинающийся на данную букву.
Не будем останавливаться на правилах подсчета результатов игры, а также опустим разработку форм, валидаторов и т.п., рассмотрим лишь формирование списков исполнителей и инициализаторы ролей.
После старта бизнес-процесса под ролью "Ведущий", должна быть сформирована "Команда" состоящая из членов группы "Группа МИБ-1" за исключением "Ведущего". Для реализации этого создадим переменную формата Группа и проинициализируем ее значением по умолчанию "Группа МИБ-1", а также переменную "Список исполнителей" формата Список(Исполнитель).
Далее используем задачу сценария с обработчиком "Получить список исполнителей группы" со следующей конфигурацией
И исключаем "Ведущего" из полученного списка с помощью обработчика "Удалить объект из списка".
Результат сохраняем в том же списке исполнителей - "Команда".
Для роли "Спрашивающий" используем инициализатор "Исполнитель из списка".
Посмотрим как это работает.
Группа МИБ-1:
Запускает БП пользователь, входящий в группу, например, "Мухин". Далее в результате выполнения обработчика - формируется список "Команда", состоящая из членов группы.
После выполнения обработчика "Удалить объект из списка" из списка "Команда" удаляется "Мухин", запустивший экземпляр процесса. И роль "Спрашивающий" (задача "Придумать вопрос") назначается на временную группу, уже без "Ведущего".
Следующее задание "Установить контакт" должны получить все одногруппники (определяются отношением «Одногруппники», примененным к выполнившему задание "Придумать вопрос" под ролью "Спрашивающий", за исключением "Ведущего" и "Спрашивающего"). Для этого воспользуемся обработчиком "Получить список исполнителей по отношению", а также уже использованным ранее обработчиком удаления объекта из списка.
Для роли "Контактер" используем уже знакомый инициализатор "Исполнитель из списка"
Посмотрим как это работает.
Пусть задачу "Придумать вопрос" выполнил "Личинкин", тогда применяя к нему отношение, получаем список одногруппников: "Гусеницын", "Мотыльков", "Мухин".
Из полученного списка удаляется "Мухин" и роль "Контактер" назначается на временную группу без "Ведущего".
Полезные обработчики
Получение номера текущего экземпляра процесса
Функция get_process_id() обработчика "Выполнить формулу" позволяет получить некоторый уникальный идентификатор, являющийся номером текущего запущенного экземпляра БП.
Полезность использования данной функции можно посмотреть на примере БП из практикума по внешнему хранилищу данных (Практическое занятие "Разработка бизнес-процесса "Заказ автотранспорта").
Сотрудники предприятия подают заявки на заказ транспорта из автопарка (БП "Заявка"). Одобренные руководителем заявки сохраняются во внешнем хранилище для дальнейшей обработки в другом БП ("Планирование"), в рамках которого диспетчер выполняет отбор заявок и рассмотрение возможности выполнения. Сотрудник должен получить информацию о статусе обработки и результате рассмотрения его заявки. Для этого каждая заявка должна иметь свой уникальный номер, связанный с экземпляром БП, из которого она была подана.
Для получения этого номера используется элемент "Задача сценария" с обработчиком "Выполнить формулу".
В конфигурации обработчика используется функция get_process_id().
Получение текущей даты-времени
Для возвращения текущих даты, времени, даты-времени используются соответствующие функции обработчика "Выполнить формулу"
- current_date()
- current_time()
- current_date_time().
Пример возможного применения данной функции можно найти в практическом занятии "Работа с MS Word и MS Excel документами", где полученная текущая дата используется в служебной записке о начислении премии.
Получение ФИО пользователя и использование падежей
Часто в БП необходимо получить информацию об исполнителе из его профиля, например его ФИО. В практическом занятии "Работа с MS Word и MS Excel документами" ФИО исполнителей (сотрудника, руководителя) используется в формируемой с помощью обработчика DOCX служебной записке о начислении премии. При этом ФИО сотрудника в документе должно быть представлено в дательном падеже.
Для получения ФИО пользователя используется обработчик "Получить информацию об исполнителе".
Во входном параметре "Исполнитель" доступны для выбора переменные формата "Исполнитель", "Пользователь", а также Роль.
В параметре "Формат" необходимо выбрать информацию, которую требуется получить
- active - статус активности
- code - код
- department - подразделение
- description - описание
- fullName - полное имя пользователя (ФИО)
- id
- name - имя
- phone - телефон.
Результат сохраняется в переменную формата "Строка".
Для склонения ФИО используется обработчик "Выполнить формулу" с функцией 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, где ПеременнаяЦелогоТипа - созданная в процессе переменная целого типа.
Использование формулы-обработчика для создания выводимых на форму задания текстов
В обработчике "Выполнить формулу" можно формировать текст выводимый на формы, используя конкатенацию переменных.
В следующем примере сформируем текст служебной записки о начислении премии сотруднику.
Пусть в строковой переменной "ФИО сотрудника 3" содержится ФИО в дательном падеже, а в переменной формата "Число повышенной точности" - "Размер премии" содержится размер премии. Текст сохраним в переменной "Текст" (формата "Текст" или "Строка"):
Текст = "Прошу начислить сотруднику " + 'ФИО сотрудника 3' + " премию в размере " + 'Размер премии' + " рублей"
Полученную переменную выведем на форму с помощью компонента "Отобразить переменную" (форма отображения - "как строку").
Режим последовательного показа форм заданий
По умолчанию после выполнении очередного задания интерфейс автоматически перебрасывает пользователя на страницу со списком его задач. Но есть возможность изменить этот режим на так называемый режим последовательного показа форм, при котором выполняется автоматическое отображение формы следующей задачи.
Для переключения режима потребуется войти в настройки веб-интерфейса (пункт "Настройки" доступен пользователям из группы Administrators), перевести параметр task.form.autoShowNext в значение true и нажать "Сохранить" внизу таблицы с параметрами. Такой способ настройки позволяет применить новое значение параметра сразу, без перезагрузки сервера.
Рассмотрим пример.
БП с элементами Начало -> Задание 1 -> Задание 2 -> Окончание, стартовый узел не имеет формы.
Пользователь запускает на выполнение БП, вверху страницы отображается сообщение о запуске нового экземпляра и автоматически открывается форма следующей задачи "Задание 1".
После выполнения задачи "Задание 1" будет сразу отображена форма следующей задачи "Задание 2".
Замечание. Если между узлами действиями будет расположен один из следующих элементов - "Таймер", "Обработка события", "Подпроцесс"(но не "Композиция"), "Мультиподпроцесс", "Параллельный шлюз", "Задача бота" - то режим последовательного отображения не сработает и для пользователя будет открыта страница "Список заданий".
Также стоит обратить внимание на еще одну особенность. По умолчанию в RunaWFE Free (начиная с версии 4.3.0) используется режим коротких транзакций (описание работы транзакций при исполнении процессов на сервере) при котором каждый элемент работает в новой транзакции. В этом случае расположенный между двумя узлами действиями элемент: "Исключающий шлюз", "Задача сценария", "Мультидействие", "Генерация события" также приведет к тому, что следующая форма не будет отображена автоматически. Но в случае использования длинных транзакций режим последовательного отображения форм будет работать.
Переключиться на использование длинных транзакций можно как в отдельно взятом БП, отдельном элементе БП, так и в целом во всех узлах всех бизнес процессов (см. Настройки для изменения границ транзакций).
Для переключения границ транзакций на уровне процесса необходимо
- открыть БП в DevStudio,
- перейти в свойства БП,
- изменить "Транзакция для выполнения по умолчанию".
В случае выбора "Существующая" будет использоваться режим длинных транзакций, в случае "Отдельная" - коротких.
Такое же свойство имеет и каждый элемент графа.
Начиная с версии RunaWFE Free 4.4.1, изменить режим транзакций на уровне сервера можно в веб интерфейсе - пункт меню "Настройки", раздел "Основные настройки", где перевести параметр process.execution.node.async.default в false (режим длинных транзакций) или true (режим коротких, по умолчанию).
Использование замещений
Замещение пользователей применяется в случаях, когда исполнитель, которому предназначено задание, не имеет возможности его выполнить, например, находится в отпуске. В таких случаях подсистема замещения исполнителей перенаправляет задание другому пользователю.
В системе RunaWFE Free правила замещения "привязаны" к исполнителям задач. Для каждого исполнителя в системе есть возможность снять статус “Активен”, например по причине отъезда в командировку или болезни.
При снятии данной опции задания исполнителя будут перенаправлены другому пользователю согласно правилам замещения, описанным в секции "Заместители" в свойствах неактивного исполнителя.
Для каждого замещаемого сотрудника правила замещения просматриваются в некотором порядке до тех пор, пока либо не будет найдено подходящее правило замещения, либо будет выяснено, что ни одного подходящего правила нет
(подробнее о принципах работы механизма и о замещениях в целом).
Рассмотрим пример настройки замещений, в котором все задания пользователя "Иванов" (в случае его отсутствия - сброшен статус "Активен") будут перенаправлены Администратору.
Текущий список заданий пользователя "Иванов":
Добавим правило замещения, для этого необходимо:
- войти в веб интерфейс RunaWFE Free под "Administrator"
- открыть свойства исполнителя "Иванов"
- перейти к секции "Заместители"
- открыть ссылку "Добавить правило":
На странице добавления нового правила определяем следующие параметры:
- Критерий - "Замещать всегда"
- Применять - "Да"
- Оргфункция - "Исполнитель по имени".
В качестве имени пользователя - выбрать из списка пользователей - "Administrator". Щёлкнуть "Добавить".
Новое правило будет в списке правил замещения пользователя "Иванов":
Уберем статус "Активен" у пользователя "Иванов", перейдем в список заданий (пользователя Administrator) и увидим следующее:
Как можно наблюдать на скриншоте выше, Администратор получил все задачи пользователя "Иванов". Задачи, полученные по замещению, выделяются желтым цветом.
Ссылки
- Документация Runa WFE [официальный сайт проекта]. URL: https://runawfe.ru/rus/Документация