DesignerUserGuide
Среда разработки. Руководство пользователя
Версия 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 в следующих вариантах:
- В виде специализированных дистрибутивов для конкретных операционных систем
- В виде исполнимых файлов java-машины
- В исходных кодах.
Подробно процесс установки и запуска описан в "Руководстве администратора".
По умолчанию используется язык (локаль) по умолчанию на компьютере.
Если нужно использовать другой язык - то можно написать -Dosgi.nl=eng, например, для английского, отдельной строчкой после -vmargs в runa-gpd.ini .
Создание нового проекта процессов
- Выберите пункт меню Файл > Создать > Новый проект - появится интерфейс заведения нового проекта процессов:
2. Введите имя проекта “HelloWorldProject”.
Будет создан проект HelloWorldProject.
Создание процесса HelloWorld
Процесс состоит только из двух узлов: Start-state и Stop-state.
Сценарий
- При запуске процесса появляется стартовая форма HelloWorld
- После щелчка по команде “Запустить” процесс запускается и тут же переходит в состояние завершения.
Разработка графа процесса
Откройте контекстное меню правой кнопкой мыши, щёлкнув ею проект HelloWorldProject, затем щёлкните по пункту «Новый процесс».
Введите "HelloWorldProcess" в качестве имени процесса.
В качестве языка доступны JPDL и BPMN, выберем JPDL.
Щёлкните «Готово». Будет создан процесс HelloWorldProcess.
Щёлкните двойным щелчком процесс HelloWorldProcess. Откроется диаграмма процесса:
Щёлкните пункт "Вид/Показать сетку", появится сетка. Щёлкните элемент “Начало” палитры, затем щёлкните курсором мыши на окне диаграммы. В окне диаграммы процесса появится стартовый узел. Аналогично поместите на диаграмму завершающий узел процесса “Окончание”, щёлкните элемент “Переход” и соедините узлы «Начало» и «Окончание».
Выберите пункт меню "Вид/Показать сетку" – сетка исчезнет. В соответствующих полях свойств введите краткое описание процесса (не обязательно) и пиктограмму изображения процесса (не обязательно). Граф процесса готов. Сохраните его.
Создание ролей
Роли в стартовом узле
Swimlanes (ролевые дорожки) соответствуют ролям бизнес-процесса. Начальный узел процесса (Start-state) имеет отличное от остальных узлов поведение в части инициализации ролей: cтартовый узел не использует инициализатор роли - роль, указанная в стартовом узле, инициализируется пользователем, запустившим бизнес-процесс.
Задание роли для процесса HelloWorld
Процесс состоит только из двух узлов: Начало и Окончание. Для состояния окончания процесса роль не нужна. Поэтому в процессе будет только одна роль.
Выберите вкладку «Роли». Появится следующая форма:
Щёлкните кнопку “Создать”. В появившейся форме введите “requester”.
Щёлкните кнопку "ОК". На символы в именах ролей и переменных существуют ограничения (про ограничения на имена переменных и ролей смотрите на странице https://runawfe.ru/BPMNImplementation).
Щёлкните по закладке «Граф». На графе процесса щёлкните по узлу «Начало», в таблице свойств узла щёлкните по полю, находящемуся на пересечении "Роль-Значение", откройте появившийся список и выберите в нем строку requester.
Или щёлкните правой кнопкой мыши на узле «Начало» и выберите роль в выпадающем меню:
Имя роли появится в круглых скобках над названием узла процесса:
Создание графической формы
Формы
Узлам-действиям, исполнителями заданий в которых являются сотрудники (не боты), должны быть поставлены в соответствие формы. Начиная с версии Среды разработки 4.0, можно создавать формы только вида HTML-страницы с расширением в виде FreeMarker тегов (FTL-тегов).
Расширения используются для отображения специфических элементов и отображения значений переменных бизнес-процесса в формах.
Описание FreeMarker можно найти, например, по данной ссылке - http://ru.wikipedia.org/wiki/FreeMarker .
HTML-cтраницы с расширением в виде дополнительного тега <customtag> поддерживаются для обратной совместимости бизнес-процессов, новые формы данного типа создавать нельзя.
При попытке создания такой формы будет выдано сообщение об ошибке:
У тега <customtag> есть следующие атрибуты:
- var – имя переменной бизнес-процесса
- delegation – имя Java класса, использующегося для работы с переменной.
Создание формы
У процесса HelloWorld нет переменных и есть только одна форма – стартовая форма. Щёлкните узел «Начало» графа бизнес-процесса правой кнопкой мыши и выберите команду «Форма» > «Создать форму» (левой кнопкой мыши):
В появившимся выпадающем списке выберите тип формы "Произвольная форма":
После появления окна редактирования щёлкните по вкладке дизайн.
В окне конструктора форм введите "Hello World!".
Выберите соответствующие шрифт, размер, положение на странице:
Замечание: Перейдя на вкладку «Код», можно увидеть страницу в виде HTML:
Закройте вкладку формы, подтвердив ее сохранение в диалоге.
Создание файла-архива бизнес-процесса
Выберите правой кнопкой HelloWorldProcess, выполните команду "Файл/Экспорт процесса", чтобы создать файл ".par" с архивом процесса:
Экспорт возможно выполнить как в файл, так и непосредственно на сервер WFE. В данном случае выполним экспорт в файл, второй вариант будет рассмотрен в дальнейших разделах этого документа.
Итак, в появившемся окне выберите экспорт в файл, нажмите кнопку «Выбрать», укажите каталог и введите имя файла архива бизнес-процесса:
Выполните “Готово”. В файловой системе будет сформирован файл-архив бизнес-процесса HelloWorldProcess: HelloWorldProcess.par.
Загрузка бизнес-процесса в систему управления бизнес-процессами
Войдите в систему управления бизнес-процессами RunaWFE как Administrator (по умолчанию при установке пароль пользователя Administrator - «wf», см. "Рукводство по установке" RunaWFE).
Войдите в меню «Запустить процесс».
Выберите ссылку «Загрузить определение процесса».
Замечание: Для того, чтобы загрузить определение бизнес-процесса в систему, у вас должны быть права «Загружать определение процесса» (могут быть выданы пользователем Administrator в меню "Система").
В появившемся диалоге выберите в файловой системе сформированный в Среде разработки файл-архив бизнес-процесса - HelloWorldProcess.par, впишите тип процесса - «демо» и выберите кнопку «Загрузить определение процесса».
Процесс HelloWorldProcess будет загружен в систему:
Выполнение процесса
Щёлкните по имени процесса. Вы увидите стартовую форму:
Выберите команду «Запустить». Процесс будет запущен и тут же завершится. Можно будет посмотреть экземпляр процесса в меню «Запущенные процессы»:
Щёлкните по экземпляру процесса – вы увидите свойства процесса:
Создание процесса «Overtime Work»
Сценарий процесса
Руководитель предлагает сотруднику выйти на сверхурочную работу. Сотрудник соглашается или отказывается. Далее руководитель знакомится с решением сотрудника.
Предполагается, что руководитель является членом группы “manager”, а сотрудник является членом группы “staff”.
Разработка графа бизнес-процесса
Создайте новый проект "NewBPMN", затем щёлкните левой кнопкой мыши команду «Новый процесс». Введите в появившемся диалоге “Overtime Work” в качестве имени процесса. Данный демо-процесс разработаем с использованием языка BPMN, для этого необходимо в поле "Язык" выбрать BPMN. "Показывать роли на графе" – Нет (отображение роли на графе будет рассмотрено в последующих разделах данного документа). "Шаблон для форм (CSS)" - не задавать.
Сделайте двойной щелчок на появившемся имени процесса «Overtime Work». В области редактирования появится поле графа бизнес-процесса. Выбирая элементы палитры, расположенной справа, нарисуйте следующий граф бизнес-процесса:
Для задания подписи элемента, отличной от подписи по умолчанию, выделите элемент, щёлкнув по нему правой кнопкой мыши, перейдите в свойства и измените название.
Для переходов, выходящих из узла «Принять решение», в их свойствах задайте явные имена «Принять» и «Отклонить».
Создание ролей
Роли в узлах-действиях
Поведение ролей в начальном состоянии бизнес-процесса было описано в предыдущем разделе. В других состояниях при помощи ролей определяются исполнители заданий.
Роль может быть инициализирована пользователем или группой пользователей в любой момент выполнения бизнес-процесса. К моменту перехода управления в некоторый узел - роль, связанная с этим узлом, должна быть инициализирована. Если роль инициализирована пользователем, то после прихода управления в этот узел только этот пользователь получит задание. Если роль инициализирована группой пользователей, то после прихода управления в этот узел все члены группы получат задание. Однако выполнить задание сможет только один член группы - тот, который первым выберет мышью кнопку «Выполнить». После этого будет произведена доинициализация роли этим пользователем и далее роль будет инициализирована уже не группой, а данным пользователем.
Для автоматической инициализации роли в момент прихода управления в узел-действие служит специальный механизм инициализации, основанный на функциях над организационной структурой, которые возвращают пользователя или группу пользователей, которому будет направлено задание. В системе можно определить набор таких функций. Эти функции также могут зависеть от параметра.
Кроме того можно явно инициализировать роль некоторым значением, например присвоить значение роли как переменной бизнес-процесса через графическую форму.
«Внутри» бизнес-процесса функции над организационной структурой (далее - оргфункции) должны быть определены в соответствии с используемым языком. Для работы с оргфункциями в Среде разработки разработаны соответствующие наборы форм.
Если параметрами оргфункций являются значения переменных бизнес-процесса, то имена этих переменных должны быть «окружены» следующей конструкцией: ${<имя переменной>}.
Задание ролей для процесса «Overtime Work»
В бизнес-процессе есть две роли:
- manager
- staffrole
Описание ролей: |
Роль | Описание |
manager | Руководитель, который запускает процесс |
staffrole | Сотрудник, которого руководитель выбирает в стартовой форме и которому система направит предложение о сверхурочной работе |
Связь узлов графа бизнес-процесса и ролей: |
Узел | Роль |
Offer an overtime work (предложить сверхурочные работы) | manager |
Make a decision (принять решение) | staffrole |
Notify for declining (ознакомиться с сообщением об отклонении) | manager |
Notify for acceptance (ознакомиться с сообщением о согласии) | manager |
Создание ролей
Щёлкните вкладку «Роли».
На появившейся странице выберите кнопку «Создать».
В появившейся форме введите название роли «manager» и щёлкните по кнопке «ОК», т.к данная роль-дорожка будет использована в стартовом состоянии – т.е. инициализирована пользователем, запустившим процесс. Поэтому для роли-дорожки manager не требуется инициализатор.
Аналогично добавьте роль «staffrole».
Замечание: Примеры задания инициализаторов будут отдельно рассмотрены далее в данном документе.
Откройте опять вкладку «Граф», выберите стартовый узел-действие “Предложить сотруднику выйти на сверхурочную работу”. На подвальной вкладке "Свойства" щёлкните по правой части поля "Роль/Значение". В появившемся списке выберите “manager”. Кроме того, можно воспользоваться пунктом "Роль" контекстного меню, вызванного на элементе, где в списке выбрать необходимую роль.
Аналогично задайте роли во всех остальных узлах-действиях.
Создание переменных
Описание и инициализация переменных
В бизнес-процессе используются следующие переменные: |
Переменная | Тип | Описание |
since | Дата-время | Дата-время начала сверхурочных |
till | Дата-время | Дата-время окончания сверхурочных |
reason | Строка | Причина |
comment | Текст | Комментарий |
staff_person_comment | Текст | Комментарий сотрудника |
Переменные
- since
- till
- reason
- comment
должны быть проинициализированы значениями в стартовом узле-действии “Offer an overtime work”.
Переменная
- staff_person_comment
должна быть проинициализирована в узле “Make a decision”.
Создание переменных
Щёкните по вкладке «Переменные». Выберите кнопку «Создать»:
Введите название переменной – since, нажмите «Далее» и в качестве формата выберите "Дата со временем".
Выберите кнопку «Готово».
Аналогично заведите все остальные переменные бизнес-процесса.
Создание графических форм
Описание форм RunaWFE
Узлам-действиям, исполнителями заданий в которых являются сотрудники (не боты) должны быть поставлены в соответствие формы. Каждая форма записывается в отдельном файле.
В редакторе можно выбрать Шаблонные или Произвольные формы.
Шаблонные формы предоставляют только Ввод/вывод информации (переменных).
Произвольные формы предоставляют широкий спектр компонентов.
В процессе Overtime Work используются Произвольные формы.
С помощью таблицы стилей можно придать форме желаемый вид.
Основную разметку можно просто произвести на вкладке дизайн.
В процессе Overtime Work используются следующие компоненты: |
Freemarker тег | Description |
---|---|
Выбор из членов группы, GroupMembers | Показывает список членов группы. Имя группы может быть задано как с помощью переменной бизнес-процесса, так и в виде значения. Также задаётся роль, в которую будет возвращен ID выбранного члена группы. В процессе Overtime Work используется группа “staff”, заданная в виде значения. Результат выполнения возвращается в роль “staffrole” |
Ввод переменной, InputVariable | Создается поле для ввода значения переменной на основе ее типа |
Вывод переменной, DisplayVariable | Выводит значение переменной (показывается в режиме «только чтение») |
Создание графических форм при помощи конструкторов форм
Перейдите на вкладку "Граф", щёлкните правой кнопкой мыши по стартовому узлу «Предложить сотруднику выйти на сверхурочную работу» графа бизнес-процесса и выберите команду «Форма» > «Создать форму» (левой кнопкой мыши):
В появившимся выпадающем списке выберите тип формы «Произвольная форма»:
Появится следующий интерфейс редактирования формы:
Задайте разметку страницы на вкладке “Код”:
Для добавления стилей формы необходимо щёлкнуть правой кнопкой по “пустой” области графа разрабатываемого процесса и выбрать пункт “CSS для форм”:
В появившемся окне будет открыт для редактирования файл form.css. Задайте необходимые стили, например:
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 строк:
В первой ячейке созданной таблицы введите текст "Выбрать сотрудника", переведите курсор в ячейку напротив, внизу на подвальной вкладке "Компоненты форм" найдите компонент "Выбор из членов группы" и щёлкните по нему. Компонент появится в ячейке.
Дважды щёлкните по нему и задайте конфигурацию: в поле "Пользователь" вводим роль staffrole, а группу задаем в виде значения staff (название группы):
Выберите кнопку «ОК». На форме запомнится сконфигурированный элемент «Выбор из членов группы» (щёлкнув по нему, можно посмотреть/сменить конфигурацию):
Создайте элементы для ввода других переменных бизнес-процесса, используя компонент “Ввод переменной”:
- since
- till
- reason
- comment.
Замечание: Перейдя на вкладку «Код», можно увидеть страницу в виде HTML и в случае необходимости поправить тег <div> так, чтобы открывающий тег был первым на странице, а закрывающий последним:
<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" для ввода. Выберите кнопку "Готово".
Для узла «Ознакомиться с отказом» создайте "Шаблонную форму", дважды щёлкнув по нему левой кнопкой мыши.
Введите внизу заголовок задания "Ознакомьтесь с отказом сотрудника выйти сверхурочно".
Выберите все переменные для отображения:
Форма для узла «Ознакомьтесь с согласием»:
Создайте форму этого узла, щёлкнув по нему правой кнопкой мыши и выбрав "Форма / Создать форму на основе существующей" и выбрав из списка предлагаемых прототипов форму "Ознакомиться с отказом".
Измените название задания внизу на "Ознакомьтесь с согласием сотрудника выйти сверхурочно". Форма готова, сохраните её.
Задание проверок значений, введенных в элементы форм (валидация)
Элементы форм могут быть обязательными или не обязательными для ввода. Также могут быть правила, относящиеся к нескольким элементам форм. Например - «дата с» не может быть позже, чем «дата по». Кроме того, могут быть специфические ограничения на размер хранимых данных для разных типов переменных: для чисел – меньше или больше какого-то числа, для строк – ограничение на длину строки и т.д..
Для задания проверки значения полей начальной формы щёлкните узел правой кнопкой мыши, в появившейся меню выберите «Формы / Проверка переменных формы»:
В появившейся форме будут отображены все использующиеся в бизнес-процессе переменные. Все использующиеся в текущей форме на ввод переменные будут помечены галочкой. Если галочку снять, то переменная не будет проинициализирована на этом этапе бизнес процесса.
Для выбранного поля в окне «Валидаторы» будут находиться доступные типы проверок поля. При щелчке по конкретной проверке в нижнем окне можно будет посмотреть и отредактировать параметры этой проверки:
Например, в данном случае для проверки «Ограничитель длины строки» установлена максимальная длина 100 символов, в качестве сообщения об ошибке использовано «Длина не может превышать 100 символов».
Если требуется установить проверки на совместные значения нескольких полей, после установки всех проверок на одно поле перейдите на вкладку «Глобальные валидаторы».
В появившейся форме при помощи «мастера» можно установить совместные проверки значений полей. Например, что Дата Till не должна быть позже даты since:
Замечание: Если в правилах валидации (проверки формы) найдены ошибки - то процесс не экспортируется. Если в правилах валидации есть только замечания – то процесс экспортируется.
Типы ошибок при работе с формами:
- отсутствие файла валидации при наличии формы - error
- отсутствие переменной формы в переменных процесса - error
- отсутствие переменной формы в файле валидации - warning.
Создание файла-архива бизнес-процесса и загрузка его в систему
Последовательность действий полностью повторяет последовательность, описанную для процесса разработки бизнес-процесса «HelloWorldProcess».
Замечание: Для выполнения процесса «Overtime Work» необходимо создать в Workflow системе группы пользователей:
- manager
- staff
- all,
завести конкретных пользователей этих групп и раздать соответствующие права.
Создание процесса «Vacation»
Сценарий процесса
Сотрудник подает заявку на отпуск. Непосредственный руководитель сотрудника подтверждает или отклоняет заявку. В случае если заявка отклонена - сотрудник получает об этом уведомление. Если же заявка подтверждена, то далее формируется задание в кадровую службу, где сотрудник данной службы проводит проверку правил и технологий. По результатам проверки – заявка либо снова направляется на рассмотрение руководителю, либо, если выполнены все правила и технологии – бизнес-процесс переходит к оформлению официального заявления и подписанию приказа. Сотрудник получает задание «Представить в отдел кадров заявление на отпуск». Одновременно работнику отдела кадров направляется задание «Получить подписанное заявление на отпуск». После завершения этого задания работник отдела кадров получает задание «Подготовить и подписать приказ». После выполнения всех этих заданий бизнес-процесс завершается.
Разработка графа бизнес-процесса
Создайте новый проект "HR", затем щёлкните правой кнопкой мыши по названию процесса и выберите команду «Новый процесс». Введите в появившемся диалоге “Vacation” в качестве имени процесса. Данный демо-процесс будем разрабатывать с использованием языка BPMN, для этого в поле язык необходимо выбрать BPMN.
Сделайте двойной щелчок на появившейся строке «Vacation» в навигаторе процессов. Появится окно диаграммы бизнес-процесса. Используя элементы палитры, нарисуйте следующий граф бизнес-процесса:
Используйте элементы: исключающие шлюзы, узлы действия, параллельные шлюзы, начало и окончание.
Для задания подписи элемента, отличной от подписи по умолчанию, щёлкните его правой кнопкой и измените название, доступное в свойствах элемента. Для переходов, выходящих из исключающих шлюзов, задайте имена «approved»/«rejected» и «not correct»/«correct».
Создание ролей
Задание ролей для процесса «Vacation»
В данном бизнес-процессе используются три роли:
- Сотрудник
- Руководитель
- Инспектор кадровой службы.
Описание ролей: |
Сотрудник | Сотрудник, подающий заявку на отпуск |
Руководитель | Непосредственный руководитель сотрудника, запустившего процесс |
Инспектор кадровой службы | Один из сотрудников отдела кадров (группа "human resource"), который проводит проверку правил и технологий заявки, а также подготавливает и подписывает приказ |
Связь узлов графа бизнес-процесса и ролей: |
Подать заявку на отпуск | Сотрудник |
Принять решение по заявке | Руководитель |
Ознакомиться с сообщением об отклонении | Сотрудник |
Проверка правил и технологий | Инспектор кадровой службы |
Представить в отдел кадров заявление на отпуск | Сотрудник |
Получить подписанное заявление на отпуск | Инспектор кадровой службы |
Подготовить и подписать приказ | Инспектор кадровой службы |
Создание ролей
Щёлкните вкладку «роли».
На появившейся странице щёлкните кнопку «Создать».
Введите название роли «Сотрудник» и щёлкните кнопку «ОК». Т.к. данная роль-дорожка будет использована в стартовом состоянии – т.е. автоматически инициализирована пользователем, запустившим процесс, то для роли "Сотрудник" не требуется инициализатор.
Далее добавляем роль «Руководитель», для которой уже необходимо использовать инициализатор. Поэтому позиционируем горизонтальный курсор на этой роли, выбираем кнопку "Изменить" и на вкладке "Код" используем функцию над оргструктурой DemoChiefFunction с параметрами "Тип" = “Руководитель (демо)”, "Пользователь" = "Сотрудник".
Аналогично создаем роль "Инспектор кадровой службы". В качестве инициализатора задаём функцию ExecutorByNameFunction с параметрами "Тип" = “Исполнитель по имени”, “Имя группы или пользователя” = “human resource”.
Откройте снова вкладку «Граф», выберите правой кнопкой стартовый узел-действие “Подать заявку на отпуск”. В свойствах щёлкните поле Роль. В появившемся дополнительном списке выберите “Сотрудник”.
Аналогично задайте роли во всех остальных узлах-действиях.
Создание переменных
Описание и инициализация переменных
В бизнес-процессе используются следующие переменные: |
Дата начала отпуска | Дата | Дата начала отпуска |
Дата окончания отпуска | Дата | Дата окончания отпуска |
Причина | Строка | Причина |
Комментарий | Текст | Комментарий |
Комментарий руководителя | Текст | Комментарий руководителя |
bossDecision | Boolean | Решение руководителя |
Комментарий HR | Текст | Комментарий сотрудника отдела кадров |
humanResourceInspectorCheckResult | Boolean | Результат проверки заявки сотрудником отдела кадров |
Номер приказа | Строка | Номер приказа |
Дата приказа | Дата | Дата приказа |
Переменные
- Дата начала отпуска
- Дата Окончания отпуска
- Причина
- Комментарий
должны быть проинициализированы значениями в стартовом узле-действии “Подать заявку на отпуск”.
Переменные
- Комментарий руководителя
- bossDecision
должны быть проинициализированы значениями в узле “Принять решение по заявке”.
Переменные
- Комментарий HR
- humanResourceInspectorCheckResult
должны быть проинициализированы в узле “Проверить правила и технологии”.
Переменные
- Номер приказа
- Дата приказа
должны быть проинициализированы в узле “Подготовить и подписать приказ”.
Создание переменных
Щёлкните вкладку «Переменные». Щёлкните кнопку «Создать»
Введите название переменной – "Дата начала отпуска", в качестве формата выберите Дата.
Аналогично заведите все остальные переменные бизнес-процесса.
Задание формулы для элемента «Исключающий шлюз»
Описание формулы
В данном процессе используются Исключающие шлюзы “Is approved?” и “ Is correct?” - эти названия можно увидеть внизу в свойствах, выделив конкретный шлюз, для которых необходимо составить формулы.
Шлюз “Is approved?”: В случае, если значение переменной bossDecision (решение Руководителя) - «истина», точка управления должна перейти в узел-действие «Проверка правил и технологии». В противном случае точка управления должна перейти в узел-действие «Ознакомиться с сообщением об отклонении».
Шлюз “ Is correct?”: В случае, если значение переменной humanResourceInspectorCheckResult (результат проверки на корректность) - «истина», точка управления должна перейти в параллельный шлюз (одновременное разделение на задания “Представить в отдел кадров заявление на отпуск” и “Получить подписанное заявление на отпуск”). В противном случае точка управления должна перейти в узел-действие «Принять решение по заявке».
Создание формулы
Выберите закладку «Граф», щёлкните узел «Is approved?» правой клавишей мыши и выберите пункт “Изменить”.
В появившейся форме для перехода "rejected" выберите переменную bossDecision, установите операцию сравнения «равно» и значение «false». В поле “Путь по умолчанию” выберите "approved":
Щёлкните «OK».
Замечание: На вкладке "Скрипт" можно посмотреть полученный код формулы, при этом он доступен для редактирования.
Аналогичным образом создаётся формула для исключающего шлюза “Is correct?”.
Создание графических форм
В процессе Vacation будем использовать шаблонные и произвольные формы (для изучения) с использованием компонентов ввода и отображения переменных.
Подать заявку на отпуск
Щёлкните на стартовый узел «Подать заявку на отпуск» графа бизнес-процесса правой кнопкой мыши и выберите команду «Форма» > «Создать форму» (левой кнопкой мыши):
В появившимся выпадающем списке выберите тип формы «Шаблонная форма»:
В открывшемся окне щёлкните ссылку "Редактировать", выберите переменные для ввода.
Выберите переменные, необходимые для заявки на отпуск, галочками и поменяйте компонент на "Ввод переменной":
Щёлкнув на "Просмотр", можно увидеть, как будет выглядеть форма:
Для узла-действия, где "Руководитель" должен принять решение, создадим "Произвольную форму" с помощью конструктора форм - вкладка "Дизайн".
Принять решение по заявке
Замечание: На форме, представленной выше, для выбора решения используется элемент false/true. По умолчанию null. Исходя из этого и был задан скрипт исключающего шлюза "Is approved?". На форме этот элемент выглядит как checkbox, где надо поставить галочку при одобрении.
На вкладке "Код" будет следующий код формы.
Проверить правила и технологии
Щёлкните правой кнопкой мыши на узле "Проверить правила и технологии", выберите "Форма / Создать форму на основе существующей" - выберите форму узла "Принять решение по заявке" - это будет тоже произвольная форма.
Внесите в форму следующие преобразования:
- замените название задачи на "Проверьте правила и технологии"
- отображение переменной "Комментарий HR" замените на переменную "Комментарий руководителя", а также замените префиксирующий комментарий к ней
- ввод переменной "Комментарий руководителя" замените на переменную "Комментарий HR"
- замените переменную, по которой будет выбран путь для продолжения процесса, с bossDecision на humanResourceInspectorCheckResult, а также замените префиксирующий её комментарий на "Технологии и правила верны"
- комментарий "* При одобрении необходимо поставить галочку" замените на "* В случае верности правил и технологий поставьте галочку".
На вкладке "Код" формы будет следующий код.
Ознакомиться с отклонением заявки
Эта форма может быть создана на основе уже существующей формы "Подать заявку на отпуск". Она и последующая формы будут шаблонными:
Представить в отдел кадров заявление на отпуск
Следующую форму можно создать на основании предыдущей, добавив отображение решения Руководителя:
Получить подписанное заявление на отпуск
Следующую форму можно создать на основе предыдущей, заменив её название:
Подготовить и подписать приказ
Следующую форму тоже можно создать на основании одной из 2-х предыдущих, добавив ввод "Номера приказа" и "Даты приказа":
Задание проверок значений, введенных в элементы форм (валидация)
Элементы форм могут быть обязательными или не обязательными для ввода. Также могут быть правила, относящиеся к нескольким элементам форм. Например - «дата с» не может быть позже, чем «дата по». Кроме того, могут быть специфические для форматов ограничения: для чисел – меньше или больше какого-то числа, для строк – ограничение на длину строки и т.д..
Для задания проверки значения полей щёлкните узел правой кнопкой мыши, в выпавшем списке выберите "Форма > Проверка переменных формы":
Второй способ - открыть нужную форму и перейти на вкладку "Валидаторы переменных форм" (внизу).
В появившейся форме будут отображены все использующиеся в бизнес-процессе переменные. Все использующиеся в текущей форме переменные будут помечены галочкой. Если галочку снять, то переменная не будет проинициализирована на этом этапе бизнес процесса. Для выбранного поля в окне «Валидаторы» будут находиться доступные типы проверок поля.
При щелчке на конкретную проверку в нижнем окне можно будет посмотреть и отредактировать параметры этой проверки.
Если требуется установить более сложные проверки на совместное использование значений нескольких полей, перейдите на вкладку "Глобальные валидаторы". В появившейся форме при помощи «Конструктора» и средств редактирования формул можно установить совместные проверки значений полей. Например, для стартовой формы целесообразно задать проверку, что "Дата начала отпуска" не должна быть позже "Даты окончания отпуска".
В поле "Сообщение об ошибке" введите выдаваемое при обнаружении ошибки сообщение "Дата начала отпуска не может быть позднее даты окончания отпуска". Эта строка отразится выше в списке заданных вами глобальных валидаторов:
После этого щёлкните по ссылке "Конструктор" для задания проверочного условия:
Выбором кнопки "ОК" завершаем работу в конструкторе и можем увидеть результат:
При необходимости, используя ряд ссылок, следующих за ссылкой "Конструктор", также можно составить более сложное выражение для контроля ввода.
Не забудьте сохранить текущий результат разработки.
Загрузка разработанного бизнес-процесса в систему
Для загрузки процесса непосредственно на сервер можно воспользоваться функцией “Экспорт процесса” с установленной опцией “Экспорт на сервер”:
Необходимо предварительно настроить соединение. Для этого выберите ссылку “Настройка” и введите параметры, необходимые для подключения к серверу. После ввода необходимо убедиться в успешности установки. Для этого выберите кнопку "Проверить соединение".
Если все параметры подключения введены правильно, то можно приступить непосредственно к экспорту. Для этого выберите кнопку “Готово” - процесс будет загружен на сервер. При этом отпадает необходимость первоначального сохранения процесса в файл.
Создание процесса с подпроцессом
Проиллюстрируем механизм работы подпроцессов, создадим графы процессов MainProcess (слева) и Subprocess (справа):
На графе основного процесса присутствует узел “Подпроцесс1”, отмеченный "+". Это отображение узла-подпроцесса. Для создания такого узла на графе используйте элемент инструментальной палитры «Подпроцесс».
Переменные основного процесса и подпроцесса:
Роли основного процесса и подпроцесса:
Для настройки связи между процессом и подпроцессом сначала рекомендуется полностью определить подпроцесс, чтобы иметь готовый список переменных подпроцесса.
Сам подпроцесс ничем не отличается от обычного процесса. Он может быть как независимым, который можно запускать сам по себе, так и процессом, который имеет смысл только в рамках родительского процесса.
Один и тот же процесс может выступать подпроцессом в нескольких разных родительских процессах.
Когда управление доходит до узла подпроцесса, то запускается новый экземпляр подпроцесса. При этом его стартовая форма не показывается, а вместо этого в подпроцесс передаются значения переменных родительского процесса.
Для привязки к родительскому процессу конкретного подпроцесса и настройки передачи переменных необходимо на графе родительского процесса с помощью правой клавиши мыши открыть меню на узле-подпроцессе и выбрать пункт «Использовать подпроцесс». Откроется диалог настройки подпроцесса:
Для начала необходимо выбрать название подпроцесса из выпадающего списка. Затем нужно задать соответствия между переменными родительского процесса и переменными, используемыми в подпроцессе. В качестве передаваемых параметров могут использоваться как переменные, так и роли.
Необходимо также выбрать характер использования передаваемых параметров:
- Если выбрано "Чтение" (read), то значение переменной родительского процесса будет записано в переменную подпроцесса и после завершения выполнения подпроцесса в родительский процесс это значение передано не будет.
- Если выбрана "Запись" (write), то после завершения подпроцесса значение из переменной подпроцесса будет записано в соответствующую переменную родительского процесса.
- Если выбрана "Синхронизация", то:
- Если подпроцесс закончился и после этого в родительском процессе произойдёт изменение переменной, то и в завершившемся подпроцессе соответствующая переменная будет при этом изменена
- Изменение переменной в выполняющемся подпроцессе сопровождается немедленным изменением соответствующей переменной в родительском процессе на "подпроцессное" значение.
Для наглядного примера надо создать формы во всех узлах процессов (MainProcess и Subprocess) с вводом переменных:
Затем экспортировать процесс на сервер и проверить вышеописанное поведение значений переменных в различные моменты прохождения процесса.
# Создание процесса с мультиподпроцессом
# Выбор типа привязки мультиподпроцесса
Демо-процесс MultiProcessMain (слева) и его подпроцесс MultiProcessSub (справа) созданы для иллюстрации работы с мультиподпроцессом в общих чертах.
Для настройки связи между родительским процессом MultiProcessMain и подпроцессом MultiProcessSub необходимо выбрать пункт “Использовать подпроцесс” контекстного меню, выпадающего по щелчку правой кнопки на узле-мультиподпроцессе.
При этом отобразится окно конфигурации. В поле “Название подпроцесса” необходимо записать имя используемого подпроцесса:
Когда процесс MultiProcessMain доходит до узла-мультиподпроцесса, то запускается несколько подпроцессов MultiProcessSub. Количество запускаемых подпроцессов определяется динамически в соответствии с тем, сколько элементов содержит объект, выбранный в группе полей "Множественные экземпляры" в окне конфигурации мультиподпроцесса (см.выше).
Сначала необходимо выбрать тип привязки мультиподпроцесса:
- По переменной
- По группе
- По отношению.
Каждому из перечисленных вариантов соответствует одна из представленных вкладок. Далее заполняется список соответствия переменных. Для этого необходимо нажать кнопку “Добавить” и выбрать переменные процесса и подпроцесса для их связи:
Тут же настраивается тип использования переменных:
- Если выбрано "Чтение", то значение переменной родительского процесса будет записано в переменную подпроцесса и после завершения выполнения подпроцесса в родительский процесс это значение передано не будет.
- Если выбрана "Запись", то после завершения подпроцесса значение из переменной подпроцесса будет записано в соответствующую переменную родительского процесса.
- Если выбрана "Синхронизация", то:
- Если подпроцесс закончился и после этого в родительском процессе произойдёт изменение переменной, то и в завершившемся подпроцессе соответствующая переменная будет при этом изменена
- Изменение переменной в выполняющемся подпроцессе сопровождается немедленным изменением соответствующей переменной в родительском процессе на "подпроцессное" значение.
Если при настройке выбран тип использования «Запись», то после завершения подпроцессов значения соответствующих переменных будут записаны в соответствующий им список.
Добавленные соответствия переменных отображаются в списке в виде таблицы. Для управления соответствиями используются кнопки, расположенные рядом с таблицей: “Добавить”, “Изменить”, “Удалить”.
# Мультиподпроцесс по переменной формата "Список"
Демо-процесс MultiOnVariable (слева) и его подпроцесс MultiOnVariableSub (справа) созданы для иллюстрации работы с мультиподпроцессом в общих чертах.
При такой привязке мультиподпроцесса в соответствие передаваемой в мультиподпроцесс переменной родительского процесса (имеющей формат "Список(тип)", где "тип" не может иметь формат "Список") ставится переменная подпроцесса (формата "тип"), в которую будет записано значение одного элемента списка при создании каждого из экземпляров подпроцесса. Таким образом у каждого экземпляра подпроцесса значение будет своё. Кроме того, могут передаваться и обычные переменные родительского процесса, при этом они просто дублируются в соответствующие переменные для каждого экземпляра подпроцесса.
Например, для демо-процесса MultiOnVariable это выглядит так:
"Адреса" - переменная мультидействия, имеющая формат "Список(Строка))", в подпроцессе ей соответствует переменная "Адрес", имеющая формат "Строка". При запуске подпроцессов в узле «Мультиподпроцесс1» будет запущено столько процессов, сколько адресов в списке "Адреса". В каждом процессе будет свое значение переменной "Адрес". Переменная "Дата" будет продублирована для каждого созданного экземпляра подпроцесса. Роль "РольПп" так же будет для всех созданных экземпляров иметь единое значение.
Замечание: При исполнении процесса на сервере для перехода к свойствам экземпляра подпроцесса необходимо щёлкнуть по квадратику с цифрой на графе экземпляра родительского процесса. Количество квадратиков совпадает с количеством подпроцессов:
Возвращение к свойствам родительского экземпляра такое же, как и для обычных подпроцессов.
# Мультиподпроцесс по группе
Если необходимо, чтобы в момент прихода управления в узел-мультиподпроцесс для каждого пользователя, являющегося членом группы, создался и запустился свой экземпляр подпроцесса, то используется мультиподпроцесс по группе. Для этого на вкладке "По группе" нужно задать имя группы. Можно использовать как константу, так и переменную (формата "Строка" или "Группа"), в которой во время выполнения бизнес-процесса будет содержаться имя группы. Данный параметр необходимо связать с переменной в подпроцессе.
Также возможно добавить в список соответствий и другие переменные, передаваемые в подпроцесс. В случае использования переменной формата "Список" используется следующее правило: если количество элементов списка не будет совпадать с полученным количеством экземпляров подпроцесса, то в данном случае либо будут не использованы лишние элементы, либо переменные подпроцесса, на которые не хватило элементов, не будут проинициализированы.
В момент завершения экземпляров подпроцесса заполняются и возвращаются в родительский процесс все параметры-списки, у которых стоит галочка в свойстве "запись".
Рассмотрим пример мультиподпроцесса по группе:
Создаём бизнес-процесс MultiOnGroup и связанный с ним подпроцесс MultiOnGroupSub следующего вида (в данном случае используем нотацию BPMN):
В основном процессе MultiOnGroup создаем Роль - "Инициатор", без инициализации (роль будет проинициализирована исполнителем, запустившим процесс), и переменные:
- Str – переменная формата "Строка"
- Arr - переменная формата "Список(Строка)"
- Group – переменная формата "Группа".
В узле-действии "Действие до МультиПп" создаем произвольную форму следующего вида:
Для переменных Str, Arr, Group используем компонент форм "Ввод переменной":
В подпроцессе MultiOnGroupSub создайте роль "РольПп", без инициализации, и строковые переменные:
- Msg - сообщение, переданное из основного процесса
- Return - первоначально содержит значение переданного из основного процесса элемента списка (Arr), доступна для редактирования на форме в подпроцессе, по окончании работы экземпляра подпроцесса значение данной переменной будет скопировано в соответствующий элемент передаваемого из основного процесса списка.
Создаём форму подпроцесса, на которой отображаем значение переменной Msg, а также добавляем компонент формы "Ввод переменной" для переменной Return:
Сохраняем все изменения и возвращаемся к основному процессу MultiOnGroup.
Выделяем узел мультиподпроцесса, вызываем пункт контекстного меню “Использовать подпроцесс”. В качестве подпроцесса выбираем MultiOnGroupSub. Далее устанавливаем тип привязки мультиподпрцесса - "По группе" и настраиваем соответствие переменных:
Используется группа (переменная Group), передаётся строковый параметр Str и список Arr. При этом предполагается возврат значений из экземпляров подпроцессов в соответствующих элементах списка Arr и для этого выбран тип использования переменных "запись".
Для контроля изменения значений списка Arr создадим для узла "Действие после МультиПп" форму, используя в качестве прототипа форму "Действие до МультиПп" и заменив ввод переменных на их отображение.
Для проверки правильности разработки процесса MultiOnGroup выполним его.
Ход выполнения данного бизнес-процесса:
- исполнитель, запустивший основной процесс, вводит значения параметров для передачи в подпроцессы (сообщение, а также список)
- исполнитель выбирает группу пользователей
- для каждого исполнителя из выбранной группы создаётся экземпляр подпроцесса, в который передаётся сообщение формата "Строка" и соответствующий элемент списка
- из рисунка можно видеть, что было запущено 9 подпроцессов по числу арифметических заданий, введённых при запуске процесса в список Arr, что означает, что выбранная группа "all" содержит не менее 9 исполнителей
- в каждом экземпляре подпроцесса на форме отображаются переданные параметры
- каждый исполнитель редактирует текстовую область, тем самым изменяя значение переменной Return
- при завершении экземпляров подпроцесса все изменения переписываются в соответствующие элементы списка Arr и возвращаются в основной процесс
- обновление значений списка Arr также можно проконтролировать при выполнении задания узла-действия "Действие после МультиПп"
- выполнение процесса с мультиподпроцессом на этом полностью завершено.
# Мультиподпроцесс по отношению
При инициализации мультиподпроцесса по отношению создается столько экземпляров подпроцесса, сколько элементов в левой части отношения с заданными параметрами. Параметрами отношения являются название отношения и его правая часть. Можно задавать как переменные, содержащие необходимые значения, так и константы.
В момент завершения всех подпроцессов будут переинициализированы и возвращены в родительский процесс все переменные, у которых стоит галочка в свойстве "запись". Активное свойство "запись" в случае мультидействия подразумевает, что форматом переменной в родительском процессе является список.
Рассмотрим применение мультиподпроцесса по отношению.
Cоздадим бизнес-процесс MultiOnRelation на основе процесса, рассмотренного в предыдущем примере (MultiOnGroup), и отредактируем его следующим образом:
- в конфигурации мультиподпроцесса выбираем вкладку "По отношению"
- в поле “Название отношения” вводим константу “Boss”
- в поле “Параметр отношения” выбираем переменную "Group"
- галка "Использовать обратное отношение" должна быть сброшена
- имя переменной в подпроцессе - "РольПп"; эта переменная будет содержать одно из значений левой части отношения, свое для каждого подпроцесса.
В качестве параметров передаются те же переменные, что и в предыдущем примере.
Для проверки правильности разработки такого процесса экспортируем его, а потом выполним.
Перед началом выплнения добавим в отношение "Boss" следующие пары:
Пользователи attila и cleopatra являются руководителями пользователей, входящих в группу “all”.
Запускаем процесс, в форме узла "Действие до МультиПп" вводим передаваемые в подпроцесс параметры, в выпадающем списке выбираем группу "all":
Т.к. множество пользователей, удовлетворяющих параметрам отношения, будет равно 2, то и список формируем из 2-х элементов (большее количество элементов будет проигнорировано). Выполняем задание:
Как видно, было создано 2 экземпляра подпроцесса, что соответствует выбранным параметрам по отношению.
Выполним задания подпроцессов под пользователями attila и cleopatra, при этом отредактируем параметр "Return".
После завершения выполнения проверим возврат параметров в основной процесс:
Как видно, отредактированные параметры вернулись в соответствующих элементах списка "Arr".
# Создание процесса с мультидействием
Мультидействие – специальный вид дополнительного узла.
Аналогичен "Действию", однако, в отличие от "Действия", порождает сразу множество задач.
Если выбран режим "Все задания должны быть выполнены", то управление переходит к следующему узлу по исходящему переходу только после того, как все порождённые задания "Мультидействия" будут выполнены. Также можно выбрать режим "Отменить остальные задания после выполнения первого".
Выбор режима доступен в контекстном меню, вызванном щелчком правой кнопки на элементе.
Задания в зависимости от параметров могут быть назначены одному или нескольким исполнителям. Окно настроек множественных экземпляров вызывается из контекстного меню, вызванного на элементе.
Способ порждения множественности заданий можно задать через тип привязки мультидействия:
- По переменной
- По группе
- По отношению.
# Множественные экземпляры, определенные по переменной
Множественные экземпляры мультидействия могут быть определены переменной формата "Список", при этом доступны два варианта назначения задач:
- одному исполнителю
- исполнителям из выбранного списка.
Задача назначена одному исполнителю
В данном случае необходимо обязательно задать роль, исполнителю которой будут назначены экземпляры задания, а также выбрать переменную формата "Список" с любым типом элементов, по элементам которой будут запущены экземпляры.
Также есть возможность задать условие (используется синтаксис groovy) создания задания.
В условии можно использовать индекс (index) элемента списка или значение (item) элемента списка.
На рисунке выше используем условие index<=3, т.е. будут созданы задачи по элементам списка, индекс которых в списке (переменная "Список") не превышает 3-х (отсчёт индекса начинается с 1). Выбран режим назначения задач одному исполнителю роли "Роль2":
Или пример с условием создания задач item!=3, т.е. будут созданы задачи по элементам списка, значение которых не равно 3-м:
Задача назначена исполнителям из выбранного списка
В этом случае переменная должна быть формата "Список(Исполнитель)", задачи создаются безусловно:
Например,
# Множественные экземпляры, определенные по группе
Необходимо выбрать переменную, содержащую группу или ее название (допускается выбор переменных формата Исполнитель, Группа, Строка). Также название можно задать вручную.
Задачи создаются безусловно и будут назначены всем членам группы.
# Множественные экземпляры, определенные по отношению
По умолчанию в мультидействии по отношению выбирается обратное отношение, т.е. создается столько экземпляров действия, сколько элементов в правой части отношения с заданными параметрами. Параметрами отношения являются название отношения и его левая часть. Но также можно использовать и не обратное отношение, для этого потребуется снять галочку с опции "Обратное отношение".
В качестве параметра отношения можно использовать переменную формата Группа, Пользователь, Исполнитель, Строка (переменная в этом случае должна содержать имя исполнителя):
Например, запустим мультидействие по обратному отношению "Преподаватель" с параметром "Исполнитель", проинициализированным исполнителем "Бабочкин":
# Сопоставление переменных
В разделе "Сопоставление переменных процесса и подпроцесса" можно определить название передаваемого в экземпляр мультидействия элемента массива. Под этим названием переменная может быть использована на файлах формы.
Например, элемент списка переменной "Список" сопоставлен с переменной "Элемент списка":
который используется в форме в компоненте "Ввод переменной":
Запущено два экземпляра мультидействия:
Задание получили Мотыльков и Мухин.
Формы заданий с соответствующими переменными:
Введенные значения переменных автоматически будут записаны в соответствующий элемент массива переменной "Список".
# Генерация текстовых регламентов
Регламент - это один из способов описания бизнес-процесса в виде официального документа.
Для генерации регламента надо в среде разработки (DS) в меню "Cвойства/Настройки - Общие" включить радиобатон "Элементы меню для работы с регламентом".
- Щёлкните правой кнопкой мыши по белому полю графа процесса, появится контекстное меню.
- Щёлкните пункт "Сгенерировать данные для регламента выполнения".
Замечание: Пункт по созданию регламента доступен только в случае, если процесс не содержит ошибок.
- Повторно вызовите меню.
- Щёлкните пункт "Создать регламент выполнения".
Замечание: Если регламент уже был создан и процесс не менялся, появится пункт "Создать регламент выполнения".
Будет открыта новая вкладка, содержащая текстовое описание графа следующей структуры:
- Название бизнес-процесса
- Краткое описание бизнес-процесса (присутствует в документе, только если краткое описание заполнено)
- Подробное описание бизнес-процесса (присутствует в документе, только если подробное описание заполнено).
- Список ролей бизнес-процесса
- Список переменных бизнес-процесса.
Описание действий бизнес-процесса, выводятся в порядке, в котором они были добавлены на диаграмму (за исключением элементов "Начало" и "Окончание"). На рисунке ниже представлена часть полученного регламента по шагам.
Работа с обработчиками (ActionHandler)
В системе есть возможность вызвать выполнение java-кода при наступлении определенных событий в бизнес-процессе, например, проход точки управления по определенному переходу. Java код должен быть реализован в методе execute() класса, реализующего интерфейс ActionHandler. Этот класс должен быть загружен в систему.
О том, как добавить в Среду разработки имена классов для инициализаторов ролей-дорожек, форматов переменных, обработчиков для узлов-выбора и элементов ActionHandler - смотрите на страницах:
- https://runawfe.ru/ServerDeveloperGuide
- https://runawfe.ru/Handlers
- https://runawfe.ru/DocxXlsxExample .
Для использования обработчиков в процессе на языке JPDL в Среде разработки необходимо выполнить следующее:
1. Убедиться, что в меню «Свойства» выбрана опция «Показать обработчики», при этом в палитре будет присутствовать элемент “обработчик”.
2. Выбрать «обработчик» в палитре.
3. Поместить элемент на граф. При этом имеется возможность располагать обработчик как на переходах, так и непосредственно в узлах.
Наведите стрелку на нужный переход или узел и нажмите левую кнопку мышки. Появится иконка в виде кружка, отображающая обработчик.
4. Выберите в палитре элемент Select. Щёлкните по созданному обработчику и перейдите в его свойства, где нужно выбрать соответствующий ActionHandler-класс.
5. Далее необходимо задать конфигурацию обработчика в соответствующем свойстве данного элемента. Кроме этого, в случае, если обработчик был добавлен в узел, а не на переход, то имеется возможность выбрать событие, по которому будет срабатывать ActionHandler. Для этого имеется свойство “Событие”. Можно выбрать один из вариантов:
- При создании задачи
- При запуске задачи
- При назначении задачи
- При окончании задачи.
В случае использования процесса на языке BPMN в палитре имеется элемент “Задача сценария”:
В свойствах данного элемента также имеются поля его конфигурации и поле "Класс обработчика", которые используются аналогично обработчикам в JPDL.
См. "Руководство по работе с обработчиками".
Задание инициализаторов для ролей-дорожек
Первый пример
В качестве примера задания инициализатора при создании новой роли рассмотрим создание роли «Инспектор кадровой службы» для демо-процесса «Vacation».
На вкладке «Роли» щёлкните «Создать». В появившейся форме введите «Инспектор кадровой службы» в качестве названия роли-дорожки. Выберите кнопку «ОК».
Щёлкните по роли, нажмите кнопку «Изменить». В появившемся окне на вкладке «Код» выберите инициализатор «Исполнитель по имени» и в качестве параметра введите имя группы "human resource", содержащей сотрудников – инспекторов кадровой службы.
Выберите кнопку «ОК». Инициализатор новой роли при этом будет определен.
Второй пример
Приведем пример задания инициализатора роли-дорожки, параметром которого является значение переменной бизнес-процесса.
Рассмотрим создание роли «Руководитель» для демо-процесса «Vacation».
На закладке «Роли» выберите кнопку «Создать». В появившейся форме введите «Руководитель» в качестве названия роли-дорожки. Выберите кнопку «ОК».
Щёлкните по роли, нажмите кнопку «Изменить». В появившемся окне на вкладке «Код» выберите инициализатор "Руководитель (демо)" (руководитель сотрудника в случае демо-процессов). В качестве параметра введите строку «${Сотрудник}» - значение переменной Сотрудник.
Выберите кнопку «ОК». Инициализатор новой роли при этом будет определен.
Замечание: Для задания в качестве параметра значения переменной надо ввести в окно ввода параметра выражение: ${имя_переменной}.
Замещение имен java-классов русскоязычными названиями
В Среде разработки можно заменить англоязычные названия java-классов русскоязычными названиями. Для этого надо сделать следующее:
1. Загрузите java-классы в Среду разработки:
Поместите .jar-файлы, содержащие соответствующие классы, в подкаталог /plugins/org.jbpm.core_3.0.1/lib каталога, содержащего Среду разработки.
2. Запустите Среду разработки, откройте пункт меню "Свойства/Мапинг":
3. В появившейся форме щёлкните по ссылке «Проверить новые jar'ы».
4. «Снимите» галочки у тех классов, которые не должны присутствовать в Среде разработки.
5. Для замещения имени класса выделите строку и выберите кнопку «Редактировать».
6. В появившейся форме введите название для класса и выберите кнопку «OK».
- Выберите кнопку «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.
В случае выбора JPDL роль будет отображаться в элементах графа, в случае же выбора BPMN будет предоставлен выбор варианта отображения Роли:
Если выбрать “Нет”, то роль будет отображаться непосредственно в элементах графа, т.е. также как и в JPDL:
Для выбора роли можно воспользоваться как контекстным меню, вызванным на графическом элементе, так и полем Роль в свойствах процесса.
Также имеется возможность отображения Роли на графе процесса, для этого предоставляется варианты “По горизонтали” и “По вертикали”. В этом случае нет необходимости создавать роль вручную. Необходимо лишь расположить графический элемент Роль на графе, при этом Роль будет создана автоматически. Будет отображена либо вертикальная, либо горизонтальная область, в зависимости от варианта, выбранного на этапе создания процесса.
В данных областях необходимо располагать графические элементы процесса, при этом Роль будет выбрана автоматически.
Начиная с версии 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 .