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

Материал из RunaWFE
Перейти к навигации Перейти к поиску
 
(не показано 13 промежуточных версий этого же участника)
Строка 339: Строка 339:
{|width=100% border=1
{|width=100% border=1
| '''Переменная'''
| '''Переменная'''
| '''Тип'''
| '''Формат'''
| '''Описание'''
| '''Описание'''
|-
|-
Строка 433: Строка 433:


| Ввод переменной, InputVariable  
| Ввод переменной, InputVariable  
| Создается поле для ввода значения переменной на основе ее типа
| Создается поле для ввода значения переменной на основе ее формата
|-
|-


Строка 464: Строка 464:




Для добавления стилей формы, необходимо щёлкнуть правой кнопкой по “пустой” области графа разрабатываемого процесса и выбрать пункт “CSS для форм”:  
Для добавления стилей формы необходимо щёлкнуть правой кнопкой по “пустой” области графа разрабатываемого процесса и выбрать пункт “CSS для форм”:  


[[Image:DevOvertimeWork_ru_11.png]]
[[Image:DevOvertimeWork_ru_11.png]]
Строка 676: Строка 676:
== Задание проверок значений, введенных в элементы форм (валидация)==
== Задание проверок значений, введенных в элементы форм (валидация)==


Элементы форм могут быть обязательными или не обязательными для ввода. Также могут быть правила, относящиеся к нескольким элементам форм. Например - «дата с» не может быть позже, чем «дата по». Кроме того, могут быть специфические ограничения на размер хранимых данных для разных типов переменных: для чисел – меньше или больше какого-то числа, для строк – ограничение на длину строки и т.д..
Элементы форм могут быть обязательными или не обязательными для ввода. Также могут быть правила, относящиеся к нескольким элементам форм. Например - «дата с» не может быть позже, чем «дата по». Кроме того, могут быть специфические ограничения на размер хранимых данных для разных форматов переменных: для чисел – меньше или больше какого-то числа, для строк – ограничение на длину строки и т.д..




Строка 766: Строка 766:
'''Задача назначена одному исполнителю'''
'''Задача назначена одному исполнителю'''


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


Также есть возможность задать условие (используется синтаксис groovy) создания задания.
Также есть возможность задать условие (используется синтаксис groovy) создания задания.
Строка 951: Строка 951:


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


См. "[[Handlers|Руководство по работе с обработчиками]]".
См. "[[Handlers|Руководство по работе с обработчиками]]".
Строка 957: Строка 956:
= Задание инициализаторов для ролей-дорожек =
= Задание инициализаторов для ролей-дорожек =
== Первый пример ==
== Первый пример ==
В качестве примера задания инициализатора при создании новой роли рассмотрим создание роли «human resource inspector» для демо-процесса «Vacation».
В качестве примера задания инициализатора при создании новой роли рассмотрим создание роли «Инспектор кадровой службы» для демо-процесса «Vacation».


На закладке «Роли» щёлкните «Создать». В появившейся форме введите «human resource inspector» в качестве названия роли-дорожки. Выберите кнопку «ОК».
На вкладке «Роли» щёлкните «Создать». В появившейся форме введите «Инспектор кадровой службы» в качестве названия роли-дорожки. Выберите кнопку «ОК».




Строка 965: Строка 964:




Щёлкните по роли, нажмите кнопку «Изменить». В появившемся окне на вкладке «Код» выберите инициализатор «функция ExecutorByName» и в качестве параметра введите имя группы, содержащей сотрудников – инспекторов кадровой службы.
Щёлкните по роли, нажмите кнопку «Изменить». В появившемся окне на вкладке «Код» выберите инициализатор «Исполнитель по имени» и в качестве параметра введите имя группы "human resource", содержащей сотрудников – инспекторов кадровой службы.




Строка 972: Строка 971:


Выберите кнопку «ОК». Инициализатор новой роли при этом будет определен.
Выберите кнопку «ОК». Инициализатор новой роли при этом будет определен.


== Второй пример ==
== Второй пример ==
Строка 982: Строка 980:
На закладке «Роли» выберите кнопку «Создать». В появившейся форме введите «Руководитель» в качестве названия роли-дорожки. Выберите кнопку «ОК».
На закладке «Роли» выберите кнопку «Создать». В появившейся форме введите «Руководитель» в качестве названия роли-дорожки. Выберите кнопку «ОК».


Щёлкните по роли, нажмите кнопку «Изменить». В появившемся окне на вкладке «Код» выберите инициализатор DemoChiefFunction (руководитель сотрудника в случае демо-процессов). В качестве параметра введите строку «${requester}» - значение переменной requester.
Щёлкните по роли, нажмите кнопку «Изменить». В появившемся окне на вкладке «Код» выберите инициализатор "Руководитель (демо)" (руководитель сотрудника в случае демо-процессов). В качестве параметра введите строку «${Сотрудник}» - значение переменной Сотрудник.




Строка 991: Строка 989:


'''Замечание:''' Для задания в качестве параметра значения переменной надо ввести в окно ввода параметра выражение: ${имя_переменной}.
'''Замечание:''' Для задания в качестве параметра значения переменной надо ввести в окно ввода параметра выражение: ${имя_переменной}.
<BR>


= Замещение имен java-классов русскоязычными названиями  =
= Замещение имен java-классов русскоязычными названиями  =
Строка 1122: Строка 1121:
|-
|-
| '''Порт'''
| '''Порт'''
| порт RMI (по умолчанию настроен 10099)
| Порт RMI (по умолчанию настроен 10099)
| colspan="3" | порт HTTP (по умолчанию настроен 8080)
| colspan="3" | Порт HTTP (по умолчанию настроен 8080)


|-
|-
| '''Версия сервера'''
| '''Версия сервера'''
| не используется
| Не используется
| colspan="3" | используется для формирования WSDL URL
| colspan="3" | Используется для формирования WSDL URL


|-
|-

Текущая версия на 21:39, 15 августа 2024

Среда разработки. Руководство пользователя

Версия 4.6.0

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

Введение

Developer Studio – это "Среда разработки" для открытой системы управления бизнес-процессами RunaWFE. Среда разработки является частью открытого проекта RunaWFE, свободно распространяется под LGPL лицензией. Среда разработки может выполняться на различных платформах (Linux, Windows и т.д.).

Исходный код "Среды разработки" можно свободно загрузить с https://github.com/processtech/runawfe-devstudio. Специализированные дистрибутивы, а также варианты в виде исполнимых файлов java-машины можно загрузить с https://sourceforge.net/projects/runawfe/.

В настоящем документе описывается, как разрабатывать бизнес-процессы в Среде разработки.

Установка и запуск

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

  1. В виде специализированных дистрибутивов для конкретных операционных систем
  2. В виде исполнимых файлов java-машины
  3. В исходных кодах.

Подробно процесс установки и запуска описан в "Руководстве администратора".

По умолчанию используется язык (локаль) по умолчанию на компьютере.

Если нужно использовать другой язык - то можно написать -Dosgi.nl=eng, например, для английского, отдельной строчкой после -vmargs в runa-gpd.ini .


Создание нового проекта процессов

  1. Выберите пункт меню Файл > Создать > Новый проект - появится интерфейс заведения нового проекта процессов:

Process-editor User guide ru 1.png


Process-editor User guide ru 2.png


2. Введите имя проекта “HelloWorldProject”.


Process-editor User guide ru 3.png


Будет создан проект HelloWorldProject.


Process-editor User guide ru 4.png

Создание процесса HelloWorld

Процесс состоит только из двух узлов: Start-state и Stop-state.

Сценарий

  • При запуске процесса появляется стартовая форма HelloWorld
  • После щелчка по команде “Запустить” процесс запускается и тут же переходит в состояние завершения.

Разработка графа процесса

Откройте контекстное меню правой кнопкой мыши, щёлкнув ею проект HelloWorldProject, затем щёлкните по пункту «Новый процесс».


Process-editor User guide ru 5.png


Введите "HelloWorldProcess" в качестве имени процесса. В качестве языка доступны JPDL и BPMN, выберем JPDL.

Process-editor User guide ru 6.png

Щёлкните «Готово». Будет создан процесс HelloWorldProcess.


Щёлкните двойным щелчком процесс HelloWorldProcess. Откроется диаграмма процесса:


Process-editor User guide ru 7.png


Щёлкните пункт "Вид/Показать сетку", появится сетка. Щёлкните элемент “Начало” палитры, затем щёлкните курсором мыши на окне диаграммы. В окне диаграммы процесса появится стартовый узел. Аналогично поместите на диаграмму завершающий узел процесса “Окончание”, щёлкните элемент “Переход” и соедините узлы «Начало» и «Окончание».


Process-editor User guide ru 8.png


Выберите пункт меню "Вид/Показать сетку" – сетка исчезнет. В соответствующих полях свойств введите краткое описание процесса (не обязательно) и пиктограмму изображения процесса (не обязательно). Граф процесса готов. Сохраните его.

Создание ролей

Роли в стартовом узле

Swimlanes (ролевые дорожки) соответствуют ролям бизнес-процесса. Начальный узел процесса (Start-state) имеет отличное от остальных узлов поведение в части инициализации ролей: cтартовый узел не использует инициализатор роли - роль, указанная в стартовом узле, инициализируется пользователем, запустившим бизнес-процесс.

Задание роли для процесса HelloWorld

Процесс состоит только из двух узлов: Начало и Окончание. Для состояния окончания процесса роль не нужна. Поэтому в процессе будет только одна роль.

Выберите вкладку «Роли». Появится следующая форма:

Process-editor User guide ru 9.png


Щёлкните кнопку “Создать”. В появившейся форме введите “requester”.

Process-editor User guide ru 10.png


Щёлкните кнопку "ОК". На символы в именах ролей и переменных существуют ограничения (про ограничения на имена переменных и ролей смотрите на странице https://runawfe.ru/BPMNImplementation).

Process-editor User guide ru 11.png


Щёлкните по закладке «Граф». На графе процесса щёлкните по узлу «Начало», в таблице свойств узла щёлкните по полю, находящемуся на пересечении "Роль-Значение", откройте появившийся список и выберите в нем строку requester.

Или щёлкните правой кнопкой мыши на узле «Начало» и выберите роль в выпадающем меню:

Process-editor User guide ru 12.png


Имя роли появится в круглых скобках над названием узла процесса:

Process-editor User guide ru 13.png


Создание графической формы

Формы

Узлам-действиям, исполнителями заданий в которых являются сотрудники (не боты), должны быть поставлены в соответствие формы. Начиная с версии Среды разработки 4.0, можно создавать формы только вида HTML-страницы с расширением в виде FreeMarker тегов (FTL-тегов).

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

Описание FreeMarker можно найти, например, по данной ссылке - http://ru.wikipedia.org/wiki/FreeMarker .

HTML-cтраницы с расширением в виде дополнительного тега <customtag> поддерживаются для обратной совместимости бизнес-процессов, новые формы данного типа создавать нельзя.

При попытке создания такой формы будет выдано сообщение об ошибке:

Gpd guide ru 6.png


У тега <customtag> есть следующие атрибуты:

  • var – имя переменной бизнес-процесса
  • delegation – имя Java класса, использующегося для работы с переменной.

Создание формы

У процесса HelloWorld нет переменных и есть только одна форма – стартовая форма. Щёлкните узел «Начало» графа бизнес-процесса правой кнопкой мыши и выберите команду «Форма» > «Создать форму» (левой кнопкой мыши):

Process-editor User guide ru 14.png


В появившимся выпадающем списке выберите тип формы "Произвольная форма":

Gpd guide ru 8.png


После появления окна редактирования щёлкните по вкладке дизайн.

В окне конструктора форм введите "Hello World!".

Выберите соответствующие шрифт, размер, положение на странице:

Process-editor User guide ru 16.png


Замечание: Перейдя на вкладку «Код», можно увидеть страницу в виде HTML:

Gpd guide ru 18.png


Закройте вкладку формы, подтвердив ее сохранение в диалоге.

Создание файла-архива бизнес-процесса

Выберите правой кнопкой HelloWorldProcess, выполните команду "Файл/Экспорт процесса", чтобы создать файл ".par" с архивом процесса:

Gpd guide ru 19.png


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

Итак, в появившемся окне выберите экспорт в файл, нажмите кнопку «Выбрать», укажите каталог и введите имя файла архива бизнес-процесса:

Gpd guide ru 20.png


Выполните “Готово”. В файловой системе будет сформирован файл-архив бизнес-процесса HelloWorldProcess: HelloWorldProcess.par.

Загрузка бизнес-процесса в систему управления бизнес-процессами

Войдите в систему управления бизнес-процессами RunaWFE как Administrator (по умолчанию при установке пароль пользователя Administrator - «wf», см. "Рукводство по установке" RunaWFE).

Войдите в меню «Запустить процесс».

Gpd guide ru 21.png


Выберите ссылку «Загрузить определение процесса».

Замечание: Для того, чтобы загрузить определение бизнес-процесса в систему, у вас должны быть права «Загружать определение процесса» (могут быть выданы пользователем Administrator в меню "Система").

В появившемся диалоге выберите в файловой системе сформированный в Среде разработки файл-архив бизнес-процесса - HelloWorldProcess.par, впишите тип процесса - «демо» и выберите кнопку «Загрузить определение процесса».

Gpd guide ru 22.png


Процесс HelloWorldProcess будет загружен в систему:

Gpd guide ru 23.png

Выполнение процесса

Щёлкните по имени процесса. Вы увидите стартовую форму:

Gpd guide ru 24.png


Выберите команду «Запустить». Процесс будет запущен и тут же завершится. Можно будет посмотреть экземпляр процесса в меню «Запущенные процессы»:

Gpd guide ru 25.png


Щёлкните по экземпляру процесса – вы увидите свойства процесса:

Gpd guide ru 26.png

Создание процесса «Overtime Work»

Сценарий процесса

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

Предполагается, что руководитель является членом группы “manager”, а сотрудник является членом группы “staff”.

Разработка графа бизнес-процесса

Создайте новый проект "NewBPMN", затем щёлкните левой кнопкой мыши команду «Новый процесс». Введите в появившемся диалоге “Overtime Work” в качестве имени процесса. Данный демо-процесс разработаем с использованием языка BPMN, для этого необходимо в поле "Язык" выбрать BPMN. "Показывать роли на графе" – Нет (отображение роли на графе будет рассмотрено в последующих разделах данного документа). "Шаблон для форм (CSS)" - не задавать.

DevOvertimeWork ru 1.png


Сделайте двойной щелчок на появившемся имени процесса «Overtime Work». В области редактирования появится поле графа бизнес-процесса. Выбирая элементы палитры, расположенной справа, нарисуйте следующий граф бизнес-процесса:

DevOvertimeWork ru 2.png


Для задания подписи элемента, отличной от подписи по умолчанию, выделите элемент, щёлкнув по нему правой кнопкой мыши, перейдите в свойства и измените название.

Для переходов, выходящих из узла «Принять решение», в их свойствах задайте явные имена «Принять» и «Отклонить».

Создание ролей

Роли в узлах-действиях

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

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

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

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


«Внутри» бизнес-процесса функции над организационной структурой (далее - оргфункции) должны быть определены в соответствии с используемым языком. Для работы с оргфункциями в Среде разработки разработаны соответствующие наборы форм.

Если параметрами оргфункций являются значения переменных бизнес-процесса, то имена этих переменных должны быть «окружены» следующей конструкцией: ${<имя переменной>}.

Задание ролей для процесса «Overtime Work»

В бизнес-процессе есть две роли:

  • manager
  • staffrole
Описание ролей:
Роль Описание
manager Руководитель, который запускает процесс
staffrole Сотрудник, которого руководитель выбирает в стартовой форме и которому система направит предложение о сверхурочной работе


Связь узлов графа бизнес-процесса и ролей:
Узел Роль
Offer an overtime work (предложить сверхурочные работы) manager
Make a decision (принять решение) staffrole
Notify for declining (ознакомиться с сообщением об отклонении) manager
Notify for acceptance (ознакомиться с сообщением о согласии) manager

Создание ролей

Щёлкните вкладку «Роли».

DevOvertimeWork ru 3.png


На появившейся странице выберите кнопку «Создать».

В появившейся форме введите название роли «manager» и щёлкните по кнопке «ОК», т.к данная роль-дорожка будет использована в стартовом состоянии – т.е. инициализирована пользователем, запустившим процесс. Поэтому для роли-дорожки manager не требуется инициализатор.

Аналогично добавьте роль «staffrole».


Замечание: Примеры задания инициализаторов будут отдельно рассмотрены далее в данном документе.


Откройте опять вкладку «Граф», выберите стартовый узел-действие “Предложить сотруднику выйти на сверхурочную работу”. На подвальной вкладке "Свойства" щёлкните по правой части поля "Роль/Значение". В появившемся списке выберите “manager”. Кроме того, можно воспользоваться пунктом "Роль" контекстного меню, вызванного на элементе, где в списке выбрать необходимую роль.

DevOvertimeWork ru 4.png


Аналогично задайте роли во всех остальных узлах-действиях.

Создание переменных

Описание и инициализация переменных

В бизнес-процессе используются следующие переменные:
Переменная Формат Описание
since Дата-время Дата-время начала сверхурочных
till Дата-время Дата-время окончания сверхурочных
reason Строка Причина
comment Текст Комментарий
staff_person_comment Текст Комментарий сотрудника


Переменные

  • since
  • till
  • reason
  • comment

должны быть проинициализированы значениями в стартовом узле-действии “Offer an overtime work”.

Переменная

  • staff_person_comment

должна быть проинициализирована в узле “Make a decision”.

Создание переменных

Щёкните по вкладке «Переменные». Выберите кнопку «Создать»:

DevOvertimeWork ru 5.png


Введите название переменной – since, нажмите «Далее» и в качестве формата выберите "Дата со временем".

DevOvertimeWork ru 6.png

DevOvertimeWork ru 6 2.png


Выберите кнопку «Готово».

Аналогично заведите все остальные переменные бизнес-процесса.

Создание графических форм

Описание форм RunaWFE

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

В редакторе можно выбрать Шаблонные или Произвольные формы.

Шаблонные формы предоставляют только Ввод/вывод информации (переменных).

Произвольные формы предоставляют широкий спектр компонентов.

В процессе Overtime Work используются Произвольные формы.

С помощью таблицы стилей можно придать форме желаемый вид.

Основную разметку можно просто произвести на вкладке дизайн.


В процессе Overtime Work используются следующие компоненты:
Freemarker тег Description
Выбор из членов группы, GroupMembers Показывает список членов группы. Имя группы может быть задано как с помощью переменной бизнес-процесса, так и в виде значения. Также задаётся роль, в которую будет возвращен ID выбранного члена группы. В процессе Overtime Work используется группа “staff”, заданная в виде значения. Результат выполнения возвращается в роль “staffrole”
Ввод переменной, InputVariable Создается поле для ввода значения переменной на основе ее формата
Вывод переменной, DisplayVariable Выводит значение переменной (показывается в режиме «только чтение»)


Создание графических форм при помощи конструкторов форм

Перейдите на вкладку "Граф", щёлкните правой кнопкой мыши по стартовому узлу «Предложить сотруднику выйти на сверхурочную работу» графа бизнес-процесса и выберите команду «Форма» > «Создать форму» (левой кнопкой мыши):

DevOvertimeWork ru 7.png


В появившимся выпадающем списке выберите тип формы «Произвольная форма»:

DevOvertimeWork ru 8.png


Появится следующий интерфейс редактирования формы:

DevOvertimeWork ru 9.png


Задайте разметку страницы на вкладке “Код”:

DevOvertimeWork ru 10.png


Для добавления стилей формы необходимо щёлкнуть правой кнопкой по “пустой” области графа разрабатываемого процесса и выбрать пункт “CSS для форм”:

DevOvertimeWork ru 11.png


В появившемся окне будет открыт для редактирования файл form.css. Задайте необходимые стили, например:

DevOvertimeWork ru 12.png


div.form-container {
    margin: 0px;
    padding: 10px;
    border: #888 1px solid;
    font: 100% Arial,Helvetica,sans-serif;
    color: #111;
    background-color: #f3f3f3;
}
p.legend {
    margin-bottom: 1em;
    margin-left: 10%;
    text-align: left;
    font-size: 1.2em;
}
div.form-container {
    margin: 0;
}
div.form-container fieldset {
    margin: 10px 0;
    padding: 10px;
}
div.form-container legend {
    color: #666;
}
div.form-container fieldset div {
    padding: 0.25em 0;
}
div.form-container label {
    margin-right: 10px;
    padding-right: 10px;
    width: 150px;
    display: block;
    float: left;
    text-align: right;
    position: relative;
}
div.form-container label em {
    position: absolute; right: 0;
    font-size: 120%;
    font-style: normal; color: #C00;
}
div.form-container input:focus, div.form-container textarea:focus {
    background-color: #FFC;
    border-color: #FC6;
}
div.form-container input {
    width: 300px;
    padding-left: 5px;
}
div.form-container select {
    width: 300px;
}
div.form-container textarea {
    width: 300px;
    height: 100px;
    padding: 5px;
    overflow: auto;
}
.readOnlyText {
    background-color: #f3f3f3;
}
div.form-container div.controlset label, div.form-container div.controlset input {
    display: inline;
    float: none;
    width: auto;
}
div.form-container div.controlset {
    margin-left: 170px;
}


Далее на странице вкладки “Дизайн” введите текст «Предложить сотруднику выйти на сверхурочную работу:».

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

Создайте форму для менеджера.

Выберите таблицу в верхнем меню разметки, появится таблица, задать 2 столбца и 5 строк:

DevOvertimeWork ru 13.png


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

Дважды щёлкните по нему и задайте конфигурацию: в поле "Пользователь" вводим роль staffrole, а группу задаем в виде значения staff (название группы):

DevOvertimeWork ru 14.png


Выберите кнопку «ОК». На форме запомнится сконфигурированный элемент «Выбор из членов группы» (щёлкнув по нему, можно посмотреть/сменить конфигурацию):

DevOvertimeWork ru 15.png


Создайте элементы для ввода других переменных бизнес-процесса, используя компонент “Ввод переменной”:

  • since
  • till
  • reason
  • comment.


DevOvertimeWork ru 16 1.png


Замечание: Перейдя на вкладку «Код», можно увидеть страницу в виде HTML и в случае необходимости поправить тег <div> так, чтобы открывающий тег был первым на странице, а закрывающий последним:

DevOvertimeWork ru 17 2.png


<DIV class="form-container"> <P>Предложить сотруднику выйти на сверхурочную работу:</P> <P> </P> <TABLE border="1" cellpadding="1" cellspacing="1" style="width:500px;"> <TBODY> <TR> <TD>Выберите сотрудника</TD> <TD>${GroupMembers("staffrole", "value@staff", "all", "false")}</TD> </TR> <TR> <TD>Дата с</TD> <TD>${InputVariable("since")}</TD> </TR> <TR> <TD>Дата по</TD> <TD>${InputVariable("till")}</TD> </TR> <TR> <TD>Причина</TD> <TD>${InputVariable("reason")}</TD> </TR> <TR> <TD>Комментарий</TD> <TD>${InputVariable("comment")}</TD> </TR> </TBODY> </TABLE> </DIV>


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

  • Принять решение
  • Ознакомиться с отказом
  • Ознакомьтесь с согласием.


Форма для узла «Принять решение»:

Поскольку на форме используются только компоненты ввод и вывод, удобно воспользоваться "Шаблонными формами".

Щёлкните по узлу принятия решения правой кнопкой мыши, выберите "Форма / Создать форму / Шаблонная форма" и выберите "ОК".

Введите (внизу) заголовок задания: "Дайте согласие или отклоните предложение о выходе на сверхурочную работу".

Затем выберите кнопку "Редактировать", появится диалоговое окно, где будут указаны все переменные процесса и роли, в котором надо будет выбрать введённые менеджером переменные для отображения и переменную "staff_person_comment" для ввода. Выберите кнопку "Готово".

DevOvertimeWork ru 18 1.png

DevOvertimeWork ru 18 2.png


Для узла «Ознакомиться с отказом» создайте "Шаблонную форму", дважды щёлкнув по нему левой кнопкой мыши.

Введите внизу заголовок задания "Ознакомьтесь с отказом сотрудника выйти сверхурочно".

Выберите все переменные для отображения:

DevOvertimeWork ru 19 1.png


Форма для узла «Ознакомьтесь с согласием»:

Создайте форму этого узла, щёлкнув по нему правой кнопкой мыши и выбрав "Форма / Создать форму на основе существующей" и выбрав из списка предлагаемых прототипов форму "Ознакомиться с отказом".

Измените название задания внизу на "Ознакомьтесь с согласием сотрудника выйти сверхурочно". Форма готова, сохраните её.

DevOvertimeWork ru 20 1.png

DevOvertimeWork ru 20 2.png


Задание проверок значений, введенных в элементы форм (валидация)

Элементы форм могут быть обязательными или не обязательными для ввода. Также могут быть правила, относящиеся к нескольким элементам форм. Например - «дата с» не может быть позже, чем «дата по». Кроме того, могут быть специфические ограничения на размер хранимых данных для разных форматов переменных: для чисел – меньше или больше какого-то числа, для строк – ограничение на длину строки и т.д..


Для задания проверки значения полей начальной формы щёлкните узел правой кнопкой мыши, в появившейся меню выберите «Формы / Проверка переменных формы»:


DevOvertimeWork ru 21.png


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

Для выбранного поля в окне «Валидаторы» будут находиться доступные типы проверок поля. При щелчке по конкретной проверке в нижнем окне можно будет посмотреть и отредактировать параметры этой проверки:

DevOvertimeWork ru 22.png

Например, в данном случае для проверки «Ограничитель длины строки» установлена максимальная длина 100 символов, в качестве сообщения об ошибке использовано «Длина не может превышать 100 символов».


Если требуется установить проверки на совместные значения нескольких полей, после установки всех проверок на одно поле перейдите на вкладку «Глобальные валидаторы».

В появившейся форме при помощи «мастера» можно установить совместные проверки значений полей. Например, что Дата Till не должна быть позже даты since:

DevOvertimeWork ru 23.png


Замечание: Если в правилах валидации (проверки формы) найдены ошибки - то процесс не экспортируется. Если в правилах валидации есть только замечания – то процесс экспортируется.


Типы ошибок при работе с формами:

  • отсутствие файла валидации при наличии формы - error
  • отсутствие переменной формы в переменных процесса - error
  • отсутствие переменной формы в файле валидации - warning.

Создание файла-архива бизнес-процесса и загрузка его в систему

Последовательность действий полностью повторяет последовательность, описанную для процесса разработки бизнес-процесса «HelloWorldProcess».


Замечание: Для выполнения процесса «Overtime Work» необходимо создать в Workflow системе группы пользователей:

  • manager
  • staff
  • all,

завести конкретных пользователей этих групп и раздать соответствующие права.

Создание процесса «Vacation»

Сценарий процесса

Сотрудник подает заявку на отпуск. Непосредственный руководитель сотрудника подтверждает или отклоняет заявку. В случае если заявка отклонена - сотрудник получает об этом уведомление. Если же заявка подтверждена, то далее формируется задание в кадровую службу, где сотрудник данной службы проводит проверку правил и технологий. По результатам проверки – заявка либо снова направляется на рассмотрение руководителю, либо, если выполнены все правила и технологии – бизнес-процесс переходит к оформлению официального заявления и подписанию приказа. Сотрудник получает задание «Представить в отдел кадров заявление на отпуск». Одновременно работнику отдела кадров направляется задание «Получить подписанное заявление на отпуск». После завершения этого задания работник отдела кадров получает задание «Подготовить и подписать приказ». После выполнения всех этих заданий бизнес-процесс завершается.

Разработка графа бизнес-процесса

Создайте новый проект "HR", затем щёлкните правой кнопкой мыши по названию процесса и выберите команду «Новый процесс». Введите в появившемся диалоге “Vacation” в качестве имени процесса. Данный демо-процесс будем разрабатывать с использованием языка BPMN, для этого в поле язык необходимо выбрать BPMN.

DevVacation ru 1.png


Сделайте двойной щелчок на появившейся строке «Vacation» в навигаторе процессов. Появится окно диаграммы бизнес-процесса. Используя элементы палитры, нарисуйте следующий граф бизнес-процесса:

DevVacation ru 2.png


Используйте элементы: исключающие шлюзы, узлы действия, параллельные шлюзы, начало и окончание.

Для задания подписи элемента, отличной от подписи по умолчанию, щёлкните его правой кнопкой и измените название, доступное в свойствах элемента. Для переходов, выходящих из исключающих шлюзов, задайте имена «approved»/«rejected» и «not correct»/«correct».

Создание ролей

Задание ролей для процесса «Vacation»

В данном бизнес-процессе используются три роли:

  • Сотрудник
  • Руководитель
  • Инспектор кадровой службы.


Описание ролей:
Роль
Описание
Сотрудник Сотрудник, подающий заявку на отпуск
Руководитель Непосредственный руководитель сотрудника, запустившего процесс
Инспектор кадровой службы Один из сотрудников отдела кадров (группа "human resource"), который проводит проверку правил и технологий заявки, а также подготавливает и подписывает приказ


Связь узлов графа бизнес-процесса и ролей:
Узел
Роль
Подать заявку на отпуск Сотрудник
Принять решение по заявке Руководитель
Ознакомиться с сообщением об отклонении Сотрудник
Проверка правил и технологий Инспектор кадровой службы
Представить в отдел кадров заявление на отпуск Сотрудник
Получить подписанное заявление на отпуск Инспектор кадровой службы
Подготовить и подписать приказ Инспектор кадровой службы


Создание ролей

Щёлкните вкладку «роли».

DevVacation ru 3.png


На появившейся странице щёлкните кнопку «Создать».

Введите название роли «Сотрудник» и щёлкните кнопку «ОК». Т.к. данная роль-дорожка будет использована в стартовом состоянии – т.е. автоматически инициализирована пользователем, запустившим процесс, то для роли "Сотрудник" не требуется инициализатор.

Далее добавляем роль «Руководитель», для которой уже необходимо использовать инициализатор. Поэтому позиционируем горизонтальный курсор на этой роли, выбираем кнопку "Изменить" и на вкладке "Код" используем функцию над оргструктурой DemoChiefFunction с параметрами "Тип" = “Руководитель (демо)”, "Пользователь" = "Сотрудник".

DevVacation ru 4.png


Аналогично создаем роль "Инспектор кадровой службы". В качестве инициализатора задаём функцию ExecutorByNameFunction с параметрами "Тип" = “Исполнитель по имени”, “Имя группы или пользователя” = “human resource”.

DevVacation ru 5.png

DevVacation ru 6.png


Откройте снова вкладку «Граф», выберите правой кнопкой стартовый узел-действие “Подать заявку на отпуск”. В свойствах щёлкните поле Роль. В появившемся дополнительном списке выберите “Сотрудник”. Аналогично задайте роли во всех остальных узлах-действиях.

Создание переменных

Описание и инициализация переменных

В бизнес-процессе используются следующие переменные:
Переменная
Формат
Описание
Дата начала отпуска Дата Дата начала отпуска
Дата окончания отпуска Дата Дата окончания отпуска
Причина Строка Причина
Комментарий Текст Комментарий
Комментарий руководителя Текст Комментарий руководителя
bossDecision Boolean Решение руководителя
Комментарий HR Текст Комментарий сотрудника отдела кадров
humanResourceInspectorCheckResult Boolean Результат проверки заявки сотрудником отдела кадров
Номер приказа Строка Номер приказа
Дата приказа Дата Дата приказа

Переменные

  • Дата начала отпуска
  • Дата Окончания отпуска
  • Причина
  • Комментарий

должны быть проинициализированы значениями в стартовом узле-действии “Подать заявку на отпуск”.

Переменные

  • Комментарий руководителя
  • bossDecision

должны быть проинициализированы значениями в узле “Принять решение по заявке”.

Переменные

  • Комментарий HR
  • humanResourceInspectorCheckResult

должны быть проинициализированы в узле “Проверить правила и технологии”.

Переменные

  • Номер приказа
  • Дата приказа

должны быть проинициализированы в узле “Подготовить и подписать приказ”.

Создание переменных

Щёлкните вкладку «Переменные». Щёлкните кнопку «Создать»

DevVacation ru 7.png


Введите название переменной – "Дата начала отпуска", в качестве формата выберите Дата.

DevVacation ru 8 1.png

DevVacation ru 8 2.png


Аналогично заведите все остальные переменные бизнес-процесса.

Задание формулы для элемента «Исключающий шлюз»

Описание формулы

В данном процессе используются Исключающие шлюзы “Is approved?” и “ Is correct?” - эти названия можно увидеть внизу в свойствах, выделив конкретный шлюз, для которых необходимо составить формулы.

Шлюз “Is approved?”: В случае, если значение переменной bossDecision (решение Руководителя) - «истина», точка управления должна перейти в узел-действие «Проверка правил и технологии». В противном случае точка управления должна перейти в узел-действие «Ознакомиться с сообщением об отклонении».

Шлюз “ Is correct?”: В случае, если значение переменной humanResourceInspectorCheckResult (результат проверки на корректность) - «истина», точка управления должна перейти в параллельный шлюз (одновременное разделение на задания “Представить в отдел кадров заявление на отпуск” и “Получить подписанное заявление на отпуск”). В противном случае точка управления должна перейти в узел-действие «Принять решение по заявке».

Создание формулы

Выберите закладку «Граф», щёлкните узел «Is approved?» правой клавишей мыши и выберите пункт “Изменить”.

В появившейся форме для перехода "rejected" выберите переменную bossDecision, установите операцию сравнения «равно» и значение «false». В поле “Путь по умолчанию” выберите "approved":

DevVacation ru 9.png


Щёлкните «OK».

Замечание: На вкладке "Скрипт" можно посмотреть полученный код формулы, при этом он доступен для редактирования.

DevVacation ru 10.png


Аналогичным образом создаётся формула для исключающего шлюза “Is correct?”.

Создание графических форм

В процессе Vacation будем использовать шаблонные и произвольные формы (для изучения) с использованием компонентов ввода и отображения переменных.

Подать заявку на отпуск

Щёлкните на стартовый узел «Подать заявку на отпуск» графа бизнес-процесса правой кнопкой мыши и выберите команду «Форма» > «Создать форму» (левой кнопкой мыши):

DevVacation ru 11.png


В появившимся выпадающем списке выберите тип формы «Шаблонная форма»:

DevVacation ru 12.png


В открывшемся окне щёлкните ссылку "Редактировать", выберите переменные для ввода.

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

DevVacation ru 14.png


Щёлкнув на "Просмотр", можно увидеть, как будет выглядеть форма:

DevVacation ru 15 1.png


Для узла-действия, где "Руководитель" должен принять решение, создадим "Произвольную форму" с помощью конструктора форм - вкладка "Дизайн".

Принять решение по заявке

DevVacation ru 16 1.png


Замечание: На форме, представленной выше, для выбора решения используется элемент false/true. По умолчанию null. Исходя из этого и был задан скрипт исключающего шлюза "Is approved?". На форме этот элемент выглядит как checkbox, где надо поставить галочку при одобрении.

На вкладке "Код" будет следующий код формы.

DevVacation ru 16 2.png


Проверить правила и технологии

Щёлкните правой кнопкой мыши на узле "Проверить правила и технологии", выберите "Форма / Создать форму на основе существующей" - выберите форму узла "Принять решение по заявке" - это будет тоже произвольная форма.

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

  • замените название задачи на "Проверьте правила и технологии"
  • отображение переменной "Комментарий HR" замените на переменную "Комментарий руководителя", а также замените префиксирующий комментарий к ней
  • ввод переменной "Комментарий руководителя" замените на переменную "Комментарий HR"
  • замените переменную, по которой будет выбран путь для продолжения процесса, с bossDecision на humanResourceInspectorCheckResult, а также замените префиксирующий её комментарий на "Технологии и правила верны"
  • комментарий "* При одобрении необходимо поставить галочку" замените на "* В случае верности правил и технологий поставьте галочку".

DevVacation ru 17 1.png


На вкладке "Код" формы будет следующий код.

DevVacation ru 17 2.png


Ознакомиться с отклонением заявки

Эта форма может быть создана на основе уже существующей формы "Подать заявку на отпуск". Она и последующая формы будут шаблонными:

DevVacation ru 18 1.png


Представить в отдел кадров заявление на отпуск

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

DevVacation ru 19 1.png


Получить подписанное заявление на отпуск

Следующую форму можно создать на основе предыдущей, заменив её название:

DevVacation ru 20 1.png


Подготовить и подписать приказ

Следующую форму тоже можно создать на основании одной из 2-х предыдущих, добавив ввод "Номера приказа" и "Даты приказа":

DevVacation ru 21 1.png


Задание проверок значений, введенных в элементы форм (валидация)

Элементы форм могут быть обязательными или не обязательными для ввода. Также могут быть правила, относящиеся к нескольким элементам форм. Например - «дата с» не может быть позже, чем «дата по». Кроме того, могут быть специфические для форматов ограничения: для чисел – меньше или больше какого-то числа, для строк – ограничение на длину строки и т.д..

Для задания проверки значения полей щёлкните узел правой кнопкой мыши, в выпавшем списке выберите "Форма > Проверка переменных формы":

DevVacation ru 22.png


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

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

DevVacation ru 22 1.png


При щелчке на конкретную проверку в нижнем окне можно будет посмотреть и отредактировать параметры этой проверки.

Если требуется установить более сложные проверки на совместное использование значений нескольких полей, перейдите на вкладку "Глобальные валидаторы". В появившейся форме при помощи «Конструктора» и средств редактирования формул можно установить совместные проверки значений полей. Например, для стартовой формы целесообразно задать проверку, что "Дата начала отпуска" не должна быть позже "Даты окончания отпуска".

В поле "Сообщение об ошибке" введите выдаваемое при обнаружении ошибки сообщение "Дата начала отпуска не может быть позднее даты окончания отпуска". Эта строка отразится выше в списке заданных вами глобальных валидаторов:

DevVacation ru 23.png


После этого щёлкните по ссылке "Конструктор" для задания проверочного условия:

DevVacation ru 23 1.png


Выбором кнопки "ОК" завершаем работу в конструкторе и можем увидеть результат:

DevVacation ru 23 2.png


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

Не забудьте сохранить текущий результат разработки.


Загрузка разработанного бизнес-процесса в систему

Для загрузки процесса непосредственно на сервер можно воспользоваться функцией “Экспорт процесса” с установленной опцией “Экспорт на сервер”:

DemoVacation create ru pic17.png


Необходимо предварительно настроить соединение. Для этого выберите ссылку “Настройка” и введите параметры, необходимые для подключения к серверу. После ввода необходимо убедиться в успешности установки. Для этого выберите кнопку "Проверить соединение".

DemoVacation create ru pic17 1.png


Если все параметры подключения введены правильно, то можно приступить непосредственно к экспорту. Для этого выберите кнопку “Готово” - процесс будет загружен на сервер. При этом отпадает необходимость первоначального сохранения процесса в файл.


Создание процесса с подпроцессом

Проиллюстрируем механизм работы подпроцессов, создадим графы процессов MainProcess (слева) и Subprocess (справа):

DevSub ru 1.png


На графе основного процесса присутствует узел “Подпроцесс1”, отмеченный "+". Это отображение узла-подпроцесса. Для создания такого узла на графе используйте элемент инструментальной палитры «Подпроцесс».

Переменные основного процесса и подпроцесса:

DevSub ru 1 var.png


Роли основного процесса и подпроцесса:

DevSub ru 1 role.png


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

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

Один и тот же процесс может выступать подпроцессом в нескольких разных родительских процессах.

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

Для привязки к родительскому процессу конкретного подпроцесса и настройки передачи переменных необходимо на графе родительского процесса с помощью правой клавиши мыши открыть меню на узле-подпроцессе и выбрать пункт «Использовать подпроцесс». Откроется диалог настройки подпроцесса:

DevSub ru 2.png


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

Необходимо также выбрать характер использования передаваемых параметров:

  • Если выбрано "Чтение" (read), то значение переменной родительского процесса будет записано в переменную подпроцесса и после завершения выполнения подпроцесса в родительский процесс это значение передано не будет.
  • Если выбрана "Запись" (write), то после завершения подпроцесса значение из переменной подпроцесса будет записано в соответствующую переменную родительского процесса.
  • Если выбрана "Синхронизация", то:
  1. Если подпроцесс закончился и после этого в родительском процессе произойдёт изменение переменной, то и в завершившемся подпроцессе соответствующая переменная будет при этом изменена
  2. Изменение переменной в выполняющемся подпроцессе сопровождается немедленным изменением соответствующей переменной в родительском процессе на "подпроцессное" значение.

Для наглядного примера надо создать формы во всех узлах процессов (MainProcess и Subprocess) с вводом переменных:

DevSub ru 1 form.png


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

# Создание процесса с мультиподпроцессом

# Выбор типа привязки мультиподпроцесса

Демо-процесс MultiProcessMain (слева) и его подпроцесс MultiProcessSub (справа) созданы для иллюстрации работы с мультиподпроцессом в общих чертах.

Для настройки связи между родительским процессом MultiProcessMain и подпроцессом MultiProcessSub необходимо выбрать пункт “Использовать подпроцесс” контекстного меню, выпадающего по щелчку правой кнопки на узле-мультиподпроцессе.

DevMultiSub ru2.png


При этом отобразится окно конфигурации. В поле “Название подпроцесса” необходимо записать имя используемого подпроцесса:

DevMultiSub ru3.png


Когда процесс MultiProcessMain доходит до узла-мультиподпроцесса, то запускается несколько подпроцессов MultiProcessSub. Количество запускаемых подпроцессов определяется динамически в соответствии с тем, сколько элементов содержит объект, выбранный в группе полей "Множественные экземпляры" в окне конфигурации мультиподпроцесса (см.выше).


Сначала необходимо выбрать тип привязки мультиподпроцесса:

  • По переменной
  • По группе
  • По отношению.

Каждому из перечисленных вариантов соответствует одна из представленных вкладок. Далее заполняется список соответствия переменных. Для этого необходимо нажать кнопку “Добавить” и выбрать переменные процесса и подпроцесса для их связи:

Тут же настраивается тип использования переменных:

  • Если выбрано "Чтение", то значение переменной родительского процесса будет записано в переменную подпроцесса и после завершения выполнения подпроцесса в родительский процесс это значение передано не будет.
  • Если выбрана "Запись", то после завершения подпроцесса значение из переменной подпроцесса будет записано в соответствующую переменную родительского процесса.
  • Если выбрана "Синхронизация", то:
  1. Если подпроцесс закончился и после этого в родительском процессе произойдёт изменение переменной, то и в завершившемся подпроцессе соответствующая переменная будет при этом изменена
  2. Изменение переменной в выполняющемся подпроцессе сопровождается немедленным изменением соответствующей переменной в родительском процессе на "подпроцессное" значение.

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

Добавленные соответствия переменных отображаются в списке в виде таблицы. Для управления соответствиями используются кнопки, расположенные рядом с таблицей: “Добавить”, “Изменить”, “Удалить”.

 

# Мультиподпроцесс по переменной формата "Список"

Демо-процесс MultiOnVariable (слева) и его подпроцесс MultiOnVariableSub (справа) созданы для иллюстрации работы с мультиподпроцессом в общих чертах.

DevMultiSub ru3 varGraf.png


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

DevMultiSub ru3 varMain.png


DevMultiSub ru3 varMulti.png


Например, для демо-процесса MultiOnVariable это выглядит так:

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

DevMultiSub ru3 varLink.png


Замечание: При исполнении процесса на сервере для перехода к свойствам экземпляра подпроцесса необходимо щёлкнуть по квадратику с цифрой на графе экземпляра родительского процесса. Количество квадратиков совпадает с количеством подпроцессов:

DevMultiSub ru4.png


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

 

# Мультиподпроцесс по группе

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

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

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

Рассмотрим пример мультиподпроцесса по группе:

Создаём бизнес-процесс MultiOnGroup и связанный с ним подпроцесс MultiOnGroupSub следующего вида (в данном случае используем нотацию BPMN):

DevMultiSub ru5.png


В основном процессе MultiOnGroup создаем Роль - "Инициатор", без инициализации (роль будет проинициализирована исполнителем, запустившим процесс), и переменные:

DevMultiSub ru6 1.png

  • Str – переменная формата "Строка"
  • Arr - переменная формата "Список(Строка)"
  • Group – переменная формата "Группа".


В узле-действии "Действие до МультиПп" создаем произвольную форму следующего вида:

DevMultiSub ru7 1.png


Для переменных Str, Arr, Group используем компонент форм "Ввод переменной":

DevMultiSub ru8.png


В подпроцессе MultiOnGroupSub создайте роль "РольПп", без инициализации, и строковые переменные:

DevMultiSub ru10.png

  • Msg - сообщение, переданное из основного процесса
  • Return - первоначально содержит значение переданного из основного процесса элемента списка (Arr), доступна для редактирования на форме в подпроцессе, по окончании работы экземпляра подпроцесса значение данной переменной будет скопировано в соответствующий элемент передаваемого из основного процесса списка.

Создаём форму подпроцесса, на которой отображаем значение переменной Msg, а также добавляем компонент формы "Ввод переменной" для переменной Return:

DevMultiSub ru11 1.png


DevMultiSub ru12.png


Сохраняем все изменения и возвращаемся к основному процессу MultiOnGroup.

Выделяем узел мультиподпроцесса, вызываем пункт контекстного меню “Использовать подпроцесс”. В качестве подпроцесса выбираем MultiOnGroupSub. Далее устанавливаем тип привязки мультиподпрцесса - "По группе" и настраиваем соответствие переменных:

DevMultiSub ru13.png


Используется группа (переменная Group), передаётся строковый параметр Str и список Arr. При этом предполагается возврат значений из экземпляров подпроцессов в соответствующих элементах списка Arr и для этого выбран тип использования переменных "запись".

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


Для проверки правильности разработки процесса MultiOnGroup выполним его.

Ход выполнения данного бизнес-процесса:

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

DevMultiSub ru14.png


  • для каждого исполнителя из выбранной группы создаётся экземпляр подпроцесса, в который передаётся сообщение формата "Строка" и соответствующий элемент списка

DevMultiSub ru15.png


  • из рисунка можно видеть, что было запущено 9 подпроцессов по числу арифметических заданий, введённых при запуске процесса в список Arr, что означает, что выбранная группа "all" содержит не менее 9 исполнителей
  • в каждом экземпляре подпроцесса на форме отображаются переданные параметры
  • каждый исполнитель редактирует текстовую область, тем самым изменяя значение переменной Return

DevMultiSub ru16.png


  • при завершении экземпляров подпроцесса все изменения переписываются в соответствующие элементы списка Arr и возвращаются в основной процесс

DevMultiSub ru17.png


  • обновление значений списка Arr также можно проконтролировать при выполнении задания узла-действия "Действие после МультиПп"
  • выполнение процесса с мультиподпроцессом на этом полностью завершено.

 

# Мультиподпроцесс по отношению

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

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

Рассмотрим применение мультиподпроцесса по отношению.

Cоздадим бизнес-процесс MultiOnRelation на основе процесса, рассмотренного в предыдущем примере (MultiOnGroup), и отредактируем его следующим образом:

  • в конфигурации мультиподпроцесса выбираем вкладку "По отношению"
  • в поле “Название отношения” вводим константу “Boss”
  • в поле “Параметр отношения” выбираем переменную "Group"
  • галка "Использовать обратное отношение" должна быть сброшена
  • имя переменной в подпроцессе - "РольПп"; эта переменная будет содержать одно из значений левой части отношения, свое для каждого подпроцесса.

DevMultiSub ru19.png

В качестве параметров передаются те же переменные, что и в предыдущем примере.

Для проверки правильности разработки такого процесса экспортируем его, а потом выполним.

Перед началом выплнения добавим в отношение "Boss" следующие пары:

DevMultiSub ru18.png

Пользователи attila и cleopatra являются руководителями пользователей, входящих в группу “all”.

Запускаем процесс, в форме узла "Действие до МультиПп" вводим передаваемые в подпроцесс параметры, в выпадающем списке выбираем группу "all":

DevMultiSub ru20.png

Т.к. множество пользователей, удовлетворяющих параметрам отношения, будет равно 2, то и список формируем из 2-х элементов (большее количество элементов будет проигнорировано). Выполняем задание:

DevMultiSub ru21.png


Как видно, было создано 2 экземпляра подпроцесса, что соответствует выбранным параметрам по отношению. Выполним задания подпроцессов под пользователями attila и cleopatra, при этом отредактируем параметр "Return". После завершения выполнения проверим возврат параметров в основной процесс:

DevMultiSub ru22.png

Как видно, отредактированные параметры вернулись в соответствующих элементах списка "Arr".

 

# Создание процесса с мультидействием

Мультидействие – специальный вид дополнительного узла.

DevMultiTask r1 1.png


Аналогичен "Действию", однако, в отличие от "Действия", порождает сразу множество задач.

Если выбран режим "Все задания должны быть выполнены", то управление переходит к следующему узлу по исходящему переходу только после того, как все порождённые задания "Мультидействия" будут выполнены. Также можно выбрать режим "Отменить остальные задания после выполнения первого".

DevMultiTask r1 2.png


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

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

DevMultiTask r1 3.png

Способ порждения множественности заданий можно задать через тип привязки мультидействия:

  • По переменной
  • По группе
  • По отношению.


# Множественные экземпляры, определенные по переменной

Множественные экземпляры мультидействия могут быть определены переменной формата "Список", при этом доступны два варианта назначения задач:

  • одному исполнителю
  • исполнителям из выбранного списка.


Задача назначена одному исполнителю

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

Также есть возможность задать условие (используется синтаксис groovy) создания задания.

DevMultiTask r1 5.png


В условии можно использовать индекс (index) элемента списка или значение (item) элемента списка.


На рисунке выше используем условие index<=3, т.е. будут созданы задачи по элементам списка, индекс которых в списке (переменная "Список") не превышает 3-х (отсчёт индекса начинается с 1). Выбран режим назначения задач одному исполнителю роли "Роль2":

DevMultiTask r1 6.png


Или пример с условием создания задач item!=3, т.е. будут созданы задачи по элементам списка, значение которых не равно 3-м:

DevMultiTask r1 7.png


Задача назначена исполнителям из выбранного списка

В этом случае переменная должна быть формата "Список(Исполнитель)", задачи создаются безусловно:

DevMultiTask r1 4.png


Например,

DevMultiTask r1 8.png

# Множественные экземпляры, определенные по группе

Необходимо выбрать переменную, содержащую группу или ее название (допускается выбор переменных формата Исполнитель, Группа, Строка). Также название можно задать вручную.

DevMultiTask r1 9.png


Задачи создаются безусловно и будут назначены всем членам группы.

DevMultiTask r1 10.png

# Множественные экземпляры, определенные по отношению

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

В качестве параметра отношения можно использовать переменную формата Группа, Пользователь, Исполнитель, Строка (переменная в этом случае должна содержать имя исполнителя):

DevMultiTask r1 11.png


Например, запустим мультидействие по обратному отношению "Преподаватель" с параметром "Исполнитель", проинициализированным исполнителем "Бабочкин":

DevMultiTask r1 12.png


DevMultiTask r1 13.png

# Сопоставление переменных

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

Например, элемент списка переменной "Список" сопоставлен с переменной "Элемент списка":

DevMultiTask r1 14.png


который используется в форме в компоненте "Ввод переменной":

DevMultiTask r1 15.png


Запущено два экземпляра мультидействия:

DevMultiTask r1 16.png


Задание получили Мотыльков и Мухин.

Формы заданий с соответствующими переменными:

DevMultiTask r1 17.png


DevMultiTask r1 18.png


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

# Генерация текстовых регламентов

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

Для генерации регламента надо в среде разработки (DS) в меню "Cвойства/Настройки - Общие" включить радиобатон "Элементы меню для работы с регламентом".

MenuDSsettings.png

MenuDSallReglament.png


  • Щёлкните правой кнопкой мыши по белому полю графа процесса, появится контекстное меню.
  • Щёлкните пункт "Сгенерировать данные для регламента выполнения".

Замечание: Пункт по созданию регламента доступен только в случае, если процесс не содержит ошибок.


Пример генерации регламента. Сгенерировать данные.png


  • Повторно вызовите меню.
  • Щёлкните пункт "Создать регламент выполнения".

Замечание: Если регламент уже был создан и процесс не менялся, появится пункт "Создать регламент выполнения".


Пример генерации регламента. Создать регламент выполнения.png


Будет открыта новая вкладка, содержащая текстовое описание графа следующей структуры:


  • Название бизнес-процесса
  • Краткое описание бизнес-процесса (присутствует в документе, только если краткое описание заполнено)
  • Подробное описание бизнес-процесса (присутствует в документе, только если подробное описание заполнено).


Пример генерации регламента. Описание процесса.png


  • Список ролей бизнес-процесса
  • Список переменных бизнес-процесса.


Пример генерации регламента. Описание ролей и переменных.png


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


Пример генерации регламента. Описание шагов процесса.png

Работа с обработчиками (ActionHandler)

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

О том, как добавить в Среду разработки имена классов для инициализаторов ролей-дорожек, форматов переменных, обработчиков для узлов-выбора и элементов ActionHandler - смотрите на страницах:


Для использования обработчиков в процессе на языке JPDL в Среде разработки необходимо выполнить следующее:

1. Убедиться, что в меню «Свойства» выбрана опция «Показать обработчики», при этом в палитре будет присутствовать элемент “обработчик”.

2. Выбрать «обработчик» в палитре.

3. Поместить элемент на граф. При этом имеется возможность располагать обработчик как на переходах, так и непосредственно в узлах.

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

GpdActionHandler ru1.png

4. Выберите в палитре элемент Select. Щёлкните по созданному обработчику и перейдите в его свойства, где нужно выбрать соответствующий ActionHandler-класс.

5. Далее необходимо задать конфигурацию обработчика в соответствующем свойстве данного элемента. Кроме этого, в случае, если обработчик был добавлен в узел, а не на переход, то имеется возможность выбрать событие, по которому будет срабатывать ActionHandler. Для этого имеется свойство “Событие”. Можно выбрать один из вариантов:

  • При создании задачи
  • При запуске задачи
  • При назначении задачи
  • При окончании задачи.

GpdActionHandler ru2.PNG

В случае использования процесса на языке BPMN в палитре имеется элемент “Задача сценария”:

GpdActionHandler ru3.PNG

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

См. "Руководство по работе с обработчиками".

Задание инициализаторов для ролей-дорожек

Первый пример

В качестве примера задания инициализатора при создании новой роли рассмотрим создание роли «Инспектор кадровой службы» для демо-процесса «Vacation».

На вкладке «Роли» щёлкните «Создать». В появившейся форме введите «Инспектор кадровой службы» в качестве названия роли-дорожки. Выберите кнопку «ОК».


Process-editor User guide ru 50.png


Щёлкните по роли, нажмите кнопку «Изменить». В появившемся окне на вкладке «Код» выберите инициализатор «Исполнитель по имени» и в качестве параметра введите имя группы "human resource", содержащей сотрудников – инспекторов кадровой службы.


Process-editor User guide ru 51.png


Выберите кнопку «ОК». Инициализатор новой роли при этом будет определен.

Второй пример

Приведем пример задания инициализатора роли-дорожки, параметром которого является значение переменной бизнес-процесса.


Рассмотрим создание роли «Руководитель» для демо-процесса «Vacation».

На закладке «Роли» выберите кнопку «Создать». В появившейся форме введите «Руководитель» в качестве названия роли-дорожки. Выберите кнопку «ОК».

Щёлкните по роли, нажмите кнопку «Изменить». В появившемся окне на вкладке «Код» выберите инициализатор "Руководитель (демо)" (руководитель сотрудника в случае демо-процессов). В качестве параметра введите строку «${Сотрудник}» - значение переменной Сотрудник.


Process-editor User guide ru 52.png


Выберите кнопку «ОК». Инициализатор новой роли при этом будет определен.

Замечание: Для задания в качестве параметра значения переменной надо ввести в окно ввода параметра выражение: ${имя_переменной}.

Замещение имен java-классов русскоязычными названиями

В Среде разработки можно заменить англоязычные названия java-классов русскоязычными названиями. Для этого надо сделать следующее:

1. Загрузите java-классы в Среду разработки:

Поместите .jar-файлы, содержащие соответствующие классы, в подкаталог /plugins/org.jbpm.core_3.0.1/lib каталога, содержащего Среду разработки.

2. Запустите Среду разработки, откройте пункт меню "Свойства/Мапинг":

Process-editor User guide ru 53.png


3. В появившейся форме щёлкните по ссылке «Проверить новые jar'ы».

4. «Снимите» галочки у тех классов, которые не должны присутствовать в Среде разработки.

5. Для замещения имени класса выделите строку и выберите кнопку «Редактировать».

Process-editor User guide ru 54.png


6. В появившейся форме введите название для класса и выберите кнопку «OK».

Process-editor User guide ru 55.png


  1. Выберите кнопку «OK» на форме «Мапинг названий java классов».

Замечание 1: Файлы, в которых хранится структура замещения, находятся в папке:

${RunaGPD}\workspace\.metadata\.plugins\org.jbpm.ui, рядом с dialog_settings.xml


Замечание 2: Файлы, из которых выбираются классы, находятся в папке:

${RunaGPD}\plugins\org.jbpm.core_3.0.1\lib

Выбор языка графа процесса, отображение роли на графе в случае BPMN

При создании нового процесса, предлагается выбрать язык: JPDL или BPMN.

Gpd guide ru 9.png


В случае выбора JPDL роль будет отображаться в элементах графа, в случае же выбора BPMN будет предоставлен выбор варианта отображения Роли:

Gpd guide ru 10.png


Если выбрать “Нет”, то роль будет отображаться непосредственно в элементах графа, т.е. также как и в JPDL:

Gpd guide ru 11.png


Для выбора роли можно воспользоваться как контекстным меню, вызванным на графическом элементе, так и полем Роль в свойствах процесса.

Также имеется возможность отображения Роли на графе процесса, для этого предоставляется варианты “По горизонтали” и “По вертикали”. В этом случае нет необходимости создавать роль вручную. Необходимо лишь расположить графический элемент Роль на графе, при этом Роль будет создана автоматически. Будет отображена либо вертикальная, либо горизонтальная область, в зависимости от варианта, выбранного на этапе создания процесса.

Gpd guide ru 12.png


Gpd guide ru 13.png


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

Gpd guide ru 14.png


Gpd guide ru 15.png


Начиная с версии 4.0, изменить нотацию созданного процесса уже нельзя.

Проблемы при работе со Средой разработки

Редактор форм представляет собой встроенный браузер (IE для Windows), активно использующий JavaScript.

В Windows

Рекурсивное появление диалоговых окон с сообщением об ошибке

Решается путем отключения отладки JavaScript в свойствах обозревателя IE.

Панель инструментов скрыта (пустое окно в режиме Дизайн)

Это связано с настройками безопасности обозревателя IE.

Нужно запустить Среду разработки, открыть форму, затем запустить IE и перейти по адресу http://localhost:48780/fckeditor.html (в случае CKEditor 3: http://localhost:48780/ckeditor.html). Содержимое страницы должно быть идентично. Теперь необходимо изменить настройки обозревателя IE так, чтобы страница грузилась корректно. Причин может быть несколько (отключен JavaScript, не разрешено исполнение JavaScript в данной зоне и т.п.). После этого редактор форм должен заработать и в Среде разработки.


В Linux

Некоторые ответы есть на форуме:

# Соединение с WFE-сервером

Из Среды разработки можно выполнить некоторые операции:

  • импорт и экспорт процессов
  • импорт и экспорт ботов
  • импорт пользователей и групп для использования в инициализаторе роли
  • импорт отношений для использования в инициализаторе роли.

Для всех операций используется единая настройка соединения с сервером (Настройки -> Интеграция -> RunaWFE сервер).

В зависимости от типа коннектора значения настроек немного отличаются.

Jboss4 по протоколу RMI (Соединяется с сервером RunaWFE, развернутом на сервере приложений Jboss4) Jboss4 используя веб сервисы (Соединяется с сервером RunaWFE, развернутом на сервере приложений Jboss4) Jboss7 используя веб сервисы (Соединяется с сервером RunaWFE, развернутом на сервере приложений Jboss7) Wildfly используя веб сервисы (Соединяется с сервером RunaWFE, развернутом на сервере приложений Wildfly)
Имя компьютера IP адрес или название компьютера
Порт Порт RMI (по умолчанию настроен 10099) Порт HTTP (по умолчанию настроен 8080)
Версия сервера Не используется Используется для формирования WSDL URL
Режим аутентификации
Логин
Пароль

Замечание: WSDL URL для Jboss4 используя веб сервисы: http://Имя компьютера:Порт/runawfe-wfe-service-Версия сервера/НазваниеСлужбыServiceBean?wsdl .

Замечание: WSDL URL для Jboss7, Wildfly используя веб сервисы: http://Имя компьютера:Порт/wfe-service-Версия сервера/НазваниеСлужбыWebService/НазваниеСлужбыAPI?wsdl .