Введение
Developer Studio – это «Среда разработки» для открытой системы управления бизнес-процессами RunaWFE. «Среда разработки» является частью открытого проекта RunaWFE, свободно распространяется под LGPL лицензией. «Среда разработки» может выполняться на различных платформах (Linux, Windows и т.д.).
Среду разработки можно свободно загрузить вместе с исходными кодами с https://github.com/processtech/runawfe-devstudio
В настоящем документе описывается как разрабатывать бизнес-процессы в Среде разработки.
Установка и запуск
Среда разработки распространяется как часть системы RunaWFE в следующих вариантах:
-
- В виде специализированных дистрибутивов для конкретных операционных систем
- В виде исполнимых файлов java-машины.
- В исходных кодах.
Подробно процесс установки и запуска описан в руководстве администратора.
Создание нового проекта процессов
-
-
- Выберите пункт меню Файл > Создать > Новый проект — появится wizard заведения нового проекта процессов.
-
2. Введите имя проекта “HelloWorldProject”.
Будет создан проект HelloWorldProject.
Создание процесса HelloWorld
Процесс состоит только из двух узлов: Start-state и Stop-state
Сценарий
-
-
- При запуске процесса появляется стартовая форма HelloWorld.
- После клика на команду “запустить” процесс запускается и тут же переходит в состояние завершения.
-
Разработка графа процесса
Откройте контекстное меню правой кнопкой мыши, кликнув на HelloWorldProject, затем кликните на «Новый процесс».
Введите HelloWorldProcess в качестве имени процесса. В качестве языка доступны JPDL и BPMN, выберем JPDL.
и кликните «Finish». Будет создан процесс HelloWorldProcess.
Щелкните двойным кликом на HelloWorldProcess. Откроется диаграмма процесса:
Кликните на свойства/показать сетку, появится сетка. Кликните на элементе “Начало” палитры, затем кликните на окне диаграммы. Стартовый узел процесса появится в окне диаграммы. Аналогично поместите на диаграмму завершающий узел процесса “Окончание”, кликните на элемент “Переход” и соедините узлы «Начало» и «Окончание».
Кликните на свойства/показать сетку – сетка исчезнет, в соответствующих полях свойств введите краткое описание процесса (не обязательно) и пиктограмму изображения процесса (не обязательно). — Граф процесса готов.
Создание ролей
Роли в стартовом узле
Swimlanes (роли) соответствуют ролям бизнес-процесса. Начальный узел процесса (start state) имеет отличное от остальных узлов поведение в части инициализации ролей: Стартовый узел не использует инициализатор — роль, указанная в стартовом узле, инициализируется пользователем, запустившим бизнес-процесс.
Задание роли для процесса HelloWorld
Процесс состоит только из двух узлов: Начало и Окончание. Для состояния окончания процесса роль не нужна. Поэтому в процессе будет только одна роль.
Выберите вкладку «Роли». Появится следующая форма:
Кликните на кнопке “Создать”. В появившейся форме введите“requester”.
Кликните на ОК. На символы в именах ролей и переменных существуют ограничения (см. ограничения на имена переменных и ролей в конце документа.)
Кликните на закладке «Граф». На графе процесса кликните на узле «Начало», в свойствах узла кликните на поле, находящееся на пересечении Роль-Value, откройте появившейся список и выберите в нем строку requester:
Имя роли появится в круглых скобках над названием узла процесса:
Создание графической формы
Формы
Узлам-действиям, исполнителями заданий в которых являются сотрудники (не боты), должны быть поставлены в соответствие формы. Начиная с версии среды разработки 4.0, можно создавать формы только вида HTML-страницы с расширением в виде freemarker тегов (FTL — тегов).
Расширения используются для отображения специфических элементов и отображения значений переменных бизнес-процесса в формах.
Описание FreeMarker можно найти, например, по данной ссылке — http://ru.wikipedia.org/wiki/FreeMarker
HTML-cтраницы с расширением в виде дополнительного тега: <customtag> поддерживаются для обратной совместимости бизнес-процессов, новые формы данного типа создавать нельзя.
При попытке создания такой формы будет выдано сообщение об ошибке:
У тега <customtag> есть следующие атрибуты:
-
-
- var – имя переменной бизнес-процесса
- delegation – имя Java класса, использующегося для работы с переменной
-
Создание формы
У процесса HelloWorld нет переменных и есть только одна форма – стартовая форма. Кликните на узел «start» графа бизнес-процесса правой кнопкой мыши и выберите команду «Форма» > «Создать форму» (левой кнопкой мыши):
В появившимся выпадающем списке выберите тип формы «HTML форма + freemarker теги».
После появления окна редактирования кликните на вкладку дизайн:
В окне конструктора форм введите Hello World!
Выберите соответствующие шрифт, размер, положение на странице:
Замечание. Перейдя на вкладку «Код», можно увидеть страницу в виде HTML:
Закройте вкладку формы, подтвердив ее сохранение в диалоге.
Создание файла-архива бизнес-процесса
Выберите HelloWorldProcess, выполните команду Файл/Экспорт чтобы создать файл .par с архивом процесса.
Экспорт возможно выполнить как в файл, так и непосредственно на сервер WFE. В данном случае выполним экспорт в файл, второй вариант будет рассмотрен в дальнейших разделах этого документа.
Итак, в появившемся окне выберите экспорт в файл, нажмите кнопку «Browse…», укажите каталог и введите имя файла архива бизнес-процесса:
Выполните “finish”. В файловой системе будет сформирован файл-архив бизнес-процесса HelloWorldProcess: HelloWorldProcess.par.
Загрузка бизнес-процесса в систему управления бизнес-процессами
Войдите в систему управления бизнес-процессами RunaWFE как Administrator (Пароль администратора по умолчанию — «wf», см. инструкцию по установке RunaWFE).
Войдите в меню «Запустить процесс».
Кликните на ссылку «Загрузить определение процесса»
Замечание:Для того, чтобы загрузить определение бизнес-процесса в систему в вас должны быть права «Загружать определение процесса» (могут быть даны в меню система).
В появившемся диалоге выберите в файловой системе сформированный в «Среде разработки» файл-архив бизнес-процесса — HelloWorldProcess.par, впишите тип процесса — «демо» и нажмите «Загрузить определение процесса».
Процесс HelloWorldProcess будет загружен в систему:
Выполнение процесса
Кликните на имя процесса. Вы увидите стартовую форму:
Кликните на команду «Запустить». Процесс будет запущен и тут же завершится. Можно будет посмотреть экземпляр процесса в меню «Запущенные процессы»:
Кликните на экземпляр процесса – вы увидите свойства процесса:
Создание процесса «Overtime Work»
Сценарий процесса
Руководитель предлагает сотруднику выйти на сверхурочную работу. Сотрудник соглашается или отказывается. Далее руководитель знакомится с решением сотрудника.
Предполагается, что руководитель является членом группы “manager”, а сотрудник является членом группы “staff”.
Разработка графа бизнес-процесса
Создайте новый проект, затем кликните левой кнопкой мыши на команду «Новый процесс». Введите в появившемся диалоге “Overtime Work” в качестве имени процесса. Данный демо-процесс разработаем с использованием языка BPMN, для этого необходимо в поле язык выбрать bpmn. Показывать роли на графе – Нет (отображение роли на графе будет рассмотрено в последующих разделах данного документа).
Сделайте двойной клик на появившейся строке «Overtime Work». Появится окно диаграммы бизнес-процесса. Выбирая элементы палитры, расположенной справа, нарисуйте следующий граф бизнес-процесса:
Для задания подписи элемента отличной от подписи по-умолчанию, выделите элемент кликнув на него, перейдите в свойства и измените название.
Для переходов, выходящих из узла «Make a decision» в их свойствах задайте явные имена «accepted» и «rejected».
Создание ролей
Роли в узлах-действиях
Поведение ролей в начальном состоянии бизнес-процесса было описано в предыдущем разделе. В других состояниях при помощи ролей определяются исполнители заданий.
Роль может быть инициализирована пользователем или группой пользователей в любой момент выполнения бизнес-процесса. К моменту перехода управления в некоторый узел роль, связанная с этим узлом, должна быть инициализирована. Если роль инициализирована пользователем, то после прихода управления в этот узел только этот пользователь получит задание. Если роль инициализирована группой пользователей, то после прихода управления в этот узел все члены группы получат задание. Однако выполнить задание сможет только один член группы, — тот, который первым кликнет на «выполнить». После этого будет произведена доинициализация роли этим пользователем и далее роль будет инициализирована уже не группой, а данным пользователем.
Для автоматической инициализации роли в момент прихода управление в узел-действие служит специальный механизм инициализации, основанный на функциях над организационной структурой, которые возвращают пользователя или группу пользователей, которому будет направлено задание. В системе можно определить набор таких функций. Эти функции также могут зависеть от параметра.
Кроме того можно явно инициализировать роль некоторым значением, например присвоить значение роли как переменной бизнес-процесса через графическую форму.
«Внутри» бизнес-процесса функции над организационной структурой (далее — оргфункции) должны быть определены в соответствии с используемым языком. Для работы с оргфункциями в «Среде разработки» разработаны соответствующие наборы форм.
Если параметрами оргфункций являются значения переменных бизнес-процесса, то имена этих переменных должны быть «окружены» следующей конструкцией: ${<имя переменной>}.
Задание ролей для процесса «over time work demo»
В бизнес-процессе есть две роли:
-
-
- manager
- staffrole
-
Описание ролей: |
Роль | Описание |
manager | Руководитель, который запускает процесс |
staffrole | Сотрудник, которого руководитель выбирает в стартовой форме и которому направляется предложение о сверхурочной работе |
Связь узлов графа бизнес-процесса и ролей: |
Узел | Роль |
Offer an overtime work (предложить сверхурочные работы) | manager |
Make a decision (принять решение) | staffrole |
Notify for declining (ознакомиться с сообщением об отклонении) | manager |
Notify for acceptance (ознакомиться с сообщением о согласии) | manager |
Создание ролей
Кликните на вкладку «роли».
На появившейся странице кликните на кнопку «Создать».
В появившейся форме введите название роли «manager» и кликните на «ОК», т.к данная роль-дорожка будет использована в стартовом состоянии – т.е. инициализирована пользователем, запустившим процесс. Поэтому роли-дорожке manager не требуется инициализатор.
Аналогично добавьте роль «staffrole».
Замечание. Примеры задания инициализаторов будут отдельно рассмотрены далее в данном документе.
Откройте опять вкладку «Граф», выберите стартовый узел-действие “Offer an overtime work”. В свойствах кликните на правую часть поля Роль/Value. В появившемся списке выберите “manager”. Кроме того, можно воспользоваться пунктом Роль контекстного меню, вызванного на элементе, где в списке выбрать необходимую роль.
Аналогично задайте роли во всех остальных узлах-действиях.
Создание переменных
Описание и инициализация переменных
В бизнес-процесе используются следующие переменные: |
Переменная | Тип | Описание |
since | Дата-время | Дата-время начала сверхурочных |
till | Дата-время | Дата-время окончания сверхурочных |
reason | Строка | Причина |
comment | Текст | Комментарий |
staff_person_comment | Текст | Комментарий сотрудника |
Переменные
-
-
- since
- till
- reason
- comment
-
должны быть проинициализированы значениями в стартовом узле-действии “Offer an overtime work”.
Переменные
-
-
- staff_person_comment
-
должны быть проинициализированы в узле “Make a decision”
Создание переменных
Кликните на вкладке «Переменные». Кликните на кнопке «Создать»
Введите название переменной – since, нажмите NEXT и в качестве формата выберите «Дата со временем».
Аналогично заведите все остальные переменные бизнес-процесса.
Создание графических форм
Описание форм RunaWFE
Узлам-действиям, исполнителями заданий в которых являются сотрудники (не боты) должны быть поставлены в соответствие формы. Каждая форма записывается в отдельном файле. Можно использовать формы вида HTML-cтраницы с расширением в виде FreeMarker тегов (или FTL-тегов). Новые HTML-cтраницы с расширением в виде дополнительного тега <customtag> начиная с версии «Среды разработки» 4.0 создавать нельзя.
Расширения используются для отображения специфических элементов и отображения значений переменных бизнес-процесса в формах.
В процессе Overtime Work используются HTML страницы с расширением в виде FreeMarker тегов (FTL).
В процессе Overtime Work используются следующие теги: |
Freemarker тег | Description |
---|---|
Выбор из членов группы, GroupMembers | Показывает список членов группы. Имя группы может быть задано как с помощью переменной бизнес-процесса, так и в виде значения. Также задаётся роль, в которую будет возвращен ID выбранного члена группы. В процессе Overtime Work используется группа “staff”, заданная в виде значения. Результат выполнения возвращается в роль “staffrole”. |
Ввод переменной, InputVariable | Создается поле для ввода значения переменной на основе ее типа |
Вывод переменной, DisplayVariable | Выводит значение переменной (показывается в режиме «только чтение»). |
Создание графических форм при помощи конструктора форм
Кликните на стартовый узел «Offer an overtime work» графа бизнес-процесса правой кнопкой мыши и выберите команду «Форма» > «Создать форму» (левой кнопкой мыши):
В появившимся выпадающем списке выберите тип формы «HTML форма + freemarker теги»:
Появится следующий интерфейс:
Задайте разметку страницы на вкладке “Код”
Для добавления стилей формы, необходимо кликнуть на “пустой” области разрабатываемого процесса, и вызвать “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; }
Далее на странице вкладки “Дизайн” введите текст «Offer an overtime work»,
на следующей строке введите «Employee *» и кликните на элемент . В появившейся форме в качестве тега выберете «Выбор из членов группы», в поле Актор вводим Роль staffrole, а группу задаем в виде значения staff (название группы):
Кликните на «ОК». На форме появится элемент «ФИО СОТРУДНИКА»:
Аналогичным образом, используя тег “Ввод переменной”, создайте элементы для ввода других переменных бизнес-процесса:
-
-
- since
- till
- reason
- comment
-
Замечание. Перейдя на вкладку «Код», можно увидеть страницу в виде HTML:
Аналогично создаются остальные формы для остальных узлов-действий
-
-
- Make a decision
- Notify of rejection
- Notify of acceptance
-
Форма для узла «Make a decision»:
Форма для узла «Notify of rejection»:
Форма для узла «Notify of acceptance»:
Задание проверок значений, введенных в элементы форм (валидация)
Элементы форм могут быть обязательными или не обязательными для ввода. Также могут быть правила, относящиеся к нескольким элементам форм. Например — «дата с» не может быть позже, чем «дата по». Кроме того, могут быть специфические для типов ограничения: для чисел – меньше или больше какого-то числа, для строк – ограничение на длину строки и т.д.
Для задания проверки значения полей формы «Offer an overtime work» кликните на узле правой кнопкой мыши, в появившейся меню выберите «Формы / Проверка переменных формы»:
В появившейся форме будут отображены все использующиеся в бизнес-процессе переменные. Все использующиеся в текущей форме переменные будут помечены галочкой. Если галочку снять, то переменная не будет проинициализирована на этом этапе бизнес процесса.
Для выбранного поля в окне «Валидаторы» будут находиться доступные типы проверок поля. При клике на конкретную проверку в нижнем окне можно будет посмотреть и отредактировать параметры этой проверки:
Например, в данном случае для проверки «ограничитель длины строки» установлена максимальная длина 100 символов, в качестве сообщения об ошибке использовано «Длина не может превышать 100 символов»
Если требуется установить проверки на совместные значения нескольких полей, после установки всех проверок на одно поле кликните «Next».
В появившейся форме при помощи «мастера» можно установить совместные проверки значений полей. Например, что Дата Till не должна быть позже даты since:
Замечание. Если в правилах валидации (проверки формы) найдены ошибки — то процесс не экспортируеся. Если в правилах валидации есть только замечания – то процесс экспортируется.
Типы ошибок при работе с формами:
-
-
- отсутствие файла валидации при наличии формы — error
-
- отсутствие переменной формы в переменных процесса — error
-
- отсутствие переменной формы в файле валидации — warning
-
Создание файла-архива бизнес-процесса и загрузка его в систему
Последовательность действий полностью повторяет последовательность, описанную для процесса разработки бизнес-процесса «HelloWorldProcess».
Замечание. Для выполнения процесса «Overtime Work» необходимо создать в Workflow системе группы пользователей:
-
-
- manager
- staff
- all
-
завести конкретных пользователей этих групп и раздать соответствующие права.
Создание процесса «Vacation»
Сценарий процесса
Сотрудник подает заявку на отпуск. Непосредственный руководитель сотрудника подтверждает или отклоняет заявку. В случае если заявка отклонена — сотрудник получает об этом уведомление. Если же заявка подтверждена, то далее формируется задание в кадровую службу, где сотрудник данной службы проводит проверку правил и технологий. По результатам проверки – заявка либо снова направляется на рассмотрение руководителю, либо если выполнены все правила и технологии – бизнес-процесс переходит к оформлению официального заявления и подписанию приказа. Сотрудник получает задание «представить в отдел кадров заявление на отпуск» одновременно работнику отдела кадров направляется задание «получить подписанное заявление на отпуск», после завершения этого задания работник отдела кадров получает задание «подготовить и подписать приказ». После выполнения всех этих заданий бизнес-процесс завершается.
Разработка графа бизнес-процесса
Создайте новый проект, затем кликните левой кнопкой мыши на команду «Новый процесс». Введите в появившемся диалоге “Vacation” в качестве имени процесса. Данный демо-процесс будем разрабатывать с использованием языка BPMN, для этого в поле язык необходимо выбрать bpmn.
Сделайте двойной клик на появившейся строке «Vacation». Появится окно диаграммы бизнес-процесса. Выбирая элементы палитры, нарисуйте следующий граф бизнес-процесса:
Используйте элементы: исключающие шлюзы, узлы действия, параллельные шлюзы, начало и окончание.
Для задания подписи элемента отличной от подписи по-умолчанию, выделите элемент кликнув на него,и измените название доступное в свойствах элемента. Для переходов, выходящих из исключающих шлюзов, задайте имена «approved»/«rejected» и «not correct»/«correct»
Создание ролей
Задание ролей для процесса «Vacation»
В данном бизнес-процессе используются три роли:
-
-
- requester
- boss
- human resource inspector
-
Описание ролей: |
Роль | Описание |
requester | Сотрудник подающий заявку на отпуск |
boss | Непосредственный руководитель сотрудника запустившего процесс |
human resource inspector | Один из сотрудников отдела кадров (группа human resource), который проводит проверку правил и технологий заявки, а также подготавливает и подписывает приказ |
Связь узлов графа бизнес-процесса и ролей: |
Узел | Роль |
Request for a vacation (подать заявку на отпуск) | requester |
Evaluate a request (принять решение по заявке) | boss |
Notify of rejection (ознакомиться с сообщением об отклонении) | requester |
Check rules and technologies (проверка правил и технологий) | human resource inspector |
Submit a hardcopy request (представить в отдел кадров заявление на отпуск) | requester |
Receive a hardcopy request (получить подписанное заявление на отпуск) | human resource inspector |
Make an official order (подготовить и подписать приказ) | human resource inspector |
Создание ролей
Кликните на вкладку «роли».
На появившейся странице кликните на кнопку «Создать».
Введите название роли «requester» и кликните на «ОК», т.к данная роль-дорожка будет использована в стартовом состоянии – т.е. инициализирована пользователем, запустившим процесс, то для requester не требуется инициализатор.
Далее добавляем роль boss, для которой необходимо использовать инициализатор. Используем функцию над оргструктурой DemoChiefFunction – “Руководитель (демо)”, пользователь – requester.
Аналогично создаем роль human_resource_inspector. В качестве инициализатора задаём функцию ExecutorByNameFunction — “Исполнитель по имени”. Параметр “Имя группы или пользователя” – “human resource”.
Откройте снова вкладку «Граф», выберите стартовый узел-действие “Request for a vacation”. В свойствах кликните на правую часть поля Роль/Value. В появившемся списке выберите “requester”. Аналогично задайте роли во всех остальных узлах-действиях.
Создание переменных
Описание и инициализация переменных
В бизнес-процесе используются следующие переменные: |
Переменная | Тип | Описание |
since | Дата | Дата начала отпуска |
till | Дата | Дата окончания отпуска |
reason | Строка | Причина |
comment | Текст | Комментарий |
boss_comment | Текст | Комментарий руководителя |
bossDecision | Boolean | Решение руководителя |
human_resource_inspector_comment | Текст | Комментарий сотрудника отделов кадра |
humanResourceInspectorCheckResult | Boolean | Результат проверки заявки сотрудником отдела кадров |
official_order_number | Строка | Номер приказа |
official_order_date | Дата | Дата приказа |
Переменные
-
-
- since
- till
- reason
- comment
-
должны быть проинициализированы значениями в стартовом узле-действии “ Request for a vacation”.
Переменные
-
-
- boss_comment
- bossDecision
-
должны быть проинициализированы значениями в узле “ Evaluate a request ”
Переменные
-
-
- human_resource_inspector_comment
- humanResourceInspectorCheckResult
-
должны быть проинициализированы в узле “ Check rules and technologies”
Переменные
-
-
- official_order_number
- official_order_date
-
должны быть проинициализированы в узле “ Make an official order ”
Создание переменных
Кликните на вкладке «Переменные». Кликните на кнопке «Создать»
Введите название переменной – since, в качестве формата выберите Дата.
Аналогично заведите все остальные переменные бизнес-процесса.
Задание формулы для элемента «Исключающий шлюз»
Описание формулы
В данном процессе используются Исключающие шлюзы “Is approved?” и “ Is correct?”, для которых необходимо составить формулы.
Шлюз “Is approved?”: В случае, если значение переменной bossDecision (решение Руководителя) — «истина», точка управления должна перейти в узел-действие «Check rules and technologies» (проверка правил и технологии). В противном случае точка управления должна перейти в узел-действие «Notify of rejection» (ознакомиться с сообщением об отклонении).
Шлюз “ Is correct?”: В случае, если значение переменной humanResourceInspectorCheckResult (результат проверки на корректность) — «истина», точка управления должна перейти в параллельный шлюз (одновременное разделение на задания “ Submit a hardcopy request” и “ Receive a hardcopy request”). В противном случае точка управления должна перейти в узел-действие «Evaluate a request».
Создание формулы
Выберите закладку «Граф», кликните на узел «Is approved?» правой клавишей мыши, и выберите пункт “Изменить”.
В появившейся форме для перехода rejected выберите переменную bossDecision, установите операцию сравнения «равно» и значение «false». В поле “Путь по умолчанию” выберите approved:
Кликните «OK».
Замечание. На вкладке Скрипт можно посмотреть полученный код формулы, при этом он доступен для редактирования.
Аналогичным образом создаётся формула для исключающего шлюза “Is correct?”
Создание графических форм
Описание форм RunaWFE
В процессе Vacation используются HTML страницы с расширением в виде FreeMarker тегов (FTL).
Теги: |
Freemarker тег | Description |
---|---|
Ввод переменной, InputVariable | Создается поле для ввода даты-времени |
Отобразить переменную, DisplayVariable | Выводит значение переменной типа строка или число (показывается в режиме «только чтение»). |
Создание графических форм при помощи конструктора форм
Кликните на стартовый узел «Request for a vacation» графа бизнес-процесса правой кнопкой мыши и выберите команду «Форма» > «Создать форму» (левой кнопкой мыши):
В появившимся выпадающем списке выберите тип формы «HTML форма + freemarker теги»:
Задайте разметку страницы на вкладке “Код”
Замечание: здесь также используется form.css, процесс подключения которого был рассмотрен ранее, в пункте разработки графических форм для процесса Overtime Work.
Далее на странице вкладки “Дизайн” введите текст «Request for a vacation», на следующей строке введите «since *» и кликните на элемент “Freemarker тег”. В появившейся форме в качестве тега выберете «Ввод переменной», в поле Название переменной выбираем since:
Аналогичным образом создайте элементы для ввода других переменных бизнес-процесса:
-
-
- till
- reason
- comment
-
Замечание. Перейдя на вкладку «Код», можно просмотреть и отредактировать код формы:
Аналогично создаются остальные формы для остальных узлов-действий
-
-
- Evaluate a request
-
Замечание: На форме выше, для выбора решения, используется элемент RadioButton
-
-
- Check rules and technologies
-
-
-
- Notify of rejection
-
-
-
- Submit a hardcopy request
-
-
-
- Receive a hardcopy request
-
-
-
- Make an official order
-
Задание проверок значений, введенных в элементы форм (валидация)
Элементы форм могут быть обязательными или не обязательными для ввода. Также могут быть правила, относящиеся к нескольким элементам форм. Например — «дата с» не может быть позже, чем «дата по». Кроме того, могут быть специфические для типов ограничения: для чисел – меньше или больше какого-то числа, для строк – ограничение на длину строки и т.д.
Для задания проверки значения полей стартовой формы «Request for a vacation» кликните на узле правой кнопкой мыши, в появившейся форме выберите «Переменные формы (валидация)»:
В появившейся форме будут отображены все использующиеся в бизнес-процессе переменные. Все использующиеся в текущей форме переменные будут помечены галочкой. Если галочку снять, то переменная не будет проинициализирована на этом этапе бизнес процесса. Для выбранного поля в окне «Валидаторы» будут находиться доступные типы проверок поля. При клике на конкретную проверку в нижнем окне можно будет посмотреть и отредактировать параметры этой проверки.
Если требуется установить проверки на совместные значения нескольких полей, после установки всех проверок на одно поле кликните «Next». В появившейся форме при помощи «мастера» можно установить совместные проверки значений полей. Например, что Дата Till не должна быть позже даты since:
Загрузка разработанного бизнес-процесса в систему
Для загрузки процесса непосредственно на сервер можно воспользоваться функцией “Экспорт архива процесса” с установленной опцией “Экспорт на WFE сервер”:
При этом необходимо настроить соединение, для этого выберите “Настройка соединения”, и введите параметры необходимые для подключения к серверу. После ввода, необходимо убедиться в успешности установки, для этого нажмите кнопку «Проверить соединение»
Если все параметры подключения введены правильно, то можно приступить непосредственно к экспорту, для этого нажмите кнопку “Готово”, процесс будет загружен на сервер, при этом отпадает необходимость первоначального сохранения процесса в файл.
Создание процесса с подпроцессом
Для иллюстрации механизма работы подпроцессов созданы MainProcess и SubProcess.
Графы процессов (MainProcess слева, SubProcess справа):
На графе основного процесса присутствует узел “process-state”, отмеченный специальным символом в нижнем углу элемента. Это отображения узла-подпроцесса. Для создания такого узла на графе используйте элемент «подпроцесс».
Для настройки связи между процессом и подпроцессом, сначала рекомендуется создать подпроцесс, чтобы иметь готовый список переменных подпроцесса.
Сам подпроцесс ничем не отличается от обычного процесса. Он может быть как независимым, который можно запускать сам по себе, так и процессом, который имеет смысл только в рамках родительского процесса.
Один и тот же процесс может выступать подпроцессом в нескольких разных родительских процессах.
Когда управление доходит до узла подпроцесса, то запускается новый экземпляр подпроцесса, но его стартовая форма не показывается. Вместо этого в подпроцесс передаются значения переменных родительского процесса.
Для настройки передачи переменных необходимо с помощью правой клавиши мыши вызвать меню на узле подпроцесса и выбрать пункт «подпроцесс». Откроется диалог настройки подпроцесса:
Для начала необходимо выбрать название подпроцесса из выпадающего списка. Затем нужно задать соответствия между переменными родительского процесса и переменными используемыми в подпроцессе, а так же выбрать варианты их использования.
В качестве передаваемых параметров могут как переменные так роли.
Если выбрано использование для чтения (read), то значение переменной родительского процесса будет записано в переменную подпроцесса.
Если выбрано запись (write), то после завершения подпроцесса значение из переменной подпроцесса будет записано в переменную родительского процесса.
Создание процесса с мультиподпроцессом
Демо-процесс MainMultiProcess и его подпроцесс SubMultiProcess созданы для иллюстрации работы с мультиподпроцессом. Графы процессов (MainMultiProcess слева, SubMultiProcess справа):
Когда процесс MainMultiProcess доходит до узла мультиподпроцесс, то запускается несколько подпроцессов SubMultiProcess. Количество запускаемых подпроцессов определяется динамически.
Для настройки связи между родительским процессом MainMultiProcess и подпроцессом SubMultiProcess необходимо выбрать пункт контекстного меню “Подпроцесс” вызываемого на узле мультиподпроцесс, при этом в поле “Название подпроцесса” необходимо записать имя используемого подпроцеса:
При этом отобразится окно конфигурации:
Сначала необходимо выбрать тип мультидействия:
-
-
- по переменной массиву;
-
- по группе;
-
- по отношению;
-
Каждому из перечисленных вариантов соответствует одна из представленных вкладок. Далее заполняется список соответствий переменных, для этого необходимо нажать кнопку “Добавить”, и выбрать переменные процесса и подпроцесса для связи:
Тут же настраивается “Использование” переменных:
-
-
- чтение;
-
- запись;
-
Если при настройке выбран тип использования «запись», то после завершения подпроцессов значения соответствующих переменных будут записаны в массив переменной мультидействия. Добавленные соответствия переменных отображаются в списке в виде таблицы. Для управления соответствиями используются кнопки “Добавить”, “Редактировать”, “Удалить”
Выбор типа мультиподпроцесса
Установим выбранный тип мультидействия, для этого нажимаем кнопку “Установить тип мультидействия”
Мультиподпроцесс по переменной списка
В соответствие переменной мультидействия родительского процесса (имеющей тип Список(тип)) ставится переменная подпроцесса (обычного типа, не массив) в которую будет записано значение элемента массива при создании подпроцесса. Таким образом у каждого подпроцесса значение будет своё. Кроме того могут передаваться и обычные переменные родительского процесса, при этом они просто дублируются.
Например для демо процесса MainMultiProcess:
addressArray — переменная мультидействия, в подпроцессе ей соответсвует address. При запуске подпроцессов в узле «start suborder routine» будет запущено столько процессов, сколько адресов в массиве addressArray. В каждом процессе будет свое значение переменной address. Переменная operator будет продублирована для каждого созданного экземпляра подпроцесса.
Замечание: для перехода к свойствам экземпляра подпроцесса необходимо кликнуть на квадратике с цифрой на графе экземпляра родительского процесса. Количество квадратиков совпадает с количеством подпроцессов.
Возвращение к свойствам родительского экземпляра такое же, как и для обычных подпроцессов.
Мультиподпроцесс по группе
Если необходимо, чтобы в момент прихода управления в элемент-«мультиподпроцесс» для каждого пользователя — члена группы создался и запустился свой экземпляр подпроцесса, то используется мультиподпроцесс по группе. Для этого на вкладке «по группе» нужно задать имя группы. Можно использовать как константу, так и переменную (формата Строка или Группа), в которой во время выполнения бизнес-процесса будет содержаться имя группы. Данный параметр необходимо связать с переменной в подпроцессе.
Также возможно добавить в список соответствий и другие переменные передаваемые в подпроцесс. В случае использования переменной формата «Список», используется следующее правило: если количество элементов списка не будет совпадать с полученным количеством экземпляров подпроцессов, то в данном случае либо будут не использованы лишние элементы, либо переменные подпроцесса, на которые не хватило элементов не будут проинициализированными.
В момент завершения подпроцессов заполняются и возвращаются в родительский процесс все параметры-списки, у которых стоит галочка в свойстве «запись».
Рассмотрим пример мультиподпроцесса по группе:
Создаём бизнесс-процесс MuliOnGroup следующего вида (в данном случае используем язык BPMN):
Создаем Роль — «requester», без инициализатора (будет проинициализирована исполнителем запустившим процесс)
Переменные:
-
-
- Str – строковая переменная
- Arr — список(строка)
- Group – переменная формата Группа
-
В узле действии «input data» создаем форму следующего вида:
Используем теги «Ввод переменной», для переменных Str, Arr, Group
Переходим к созданию подпроцесса MultiOnGroupSub:
Создаем Роль — «operator», без инициализатора
Строковые переменные:
-
-
- Msg — сообщение переданное из основного процесса
- Return — содержит значение переданного элемента списка (Arr) из основного процесса, доступна для редактирования на форме в подпроцессе (по окончании работы экземпляра подпроцесса, значение данной переменной будет скопировано в передаваемый из основного процесса элемент списка)
-
Создаём форму подпроцесса, на которой выводим значение переменной Msg, а также добавляем тег Ввод переменной для Return
Возвращаемся к основному процессу.
Выделяем узел мультиподпроцесса, вызываем пункт контекстного меню “Подпроцесс”. В качестве подпроцесса выбираем MultiOnGroupSub. Далее устанавливаем тип мультидействия — «По группе» и настраиваем соответствие переменных:
Используется группа (переменная Group), передаётся строковый параметр Str и список Arr. При этом предполагается возврат значений из экземпляров подпроцессов в соответствующих элементах массива Arr, для этого выбрано “использование” типа «запись».
Для проверки правильности разработки такого процесса, выполним его.
Ход выполнения данного бизнесс-процесса:
-исполнитель, запустивший основной процесс, вводит значения параметров для передачи в подпроцессы (сообщение, а также список)
-выбирает группу пользователей
-для каждого исполнителя из выбранной группы создаётся экземпляр подпроцесса, в который передаётся параметр строка и соответствующий элемент списка;
-в подпроцессе на форме отображаются переданные параметры;
-каждый исполнитель редактирует текстовую область, тем самым изменяет значение переменной Return;
-все изменения переписываются в соответствующие элементы списка Arr и возвращаются в основной процесс;
# Мультиподпроцесс по отношению
При инициализации по отношению создается столько экземпляров подпроцесса сколько элементов в левой части отношения с заданными параметрами. Параметрами отношения являются название отношения и его правая часть. Можно задавать как переменные, содержащие необходимые значения, так и константы.
В момент завершения всех подпроцессов будут переинициализированны и возвращены в родительский процесс все переменные, у которых стоит галочка в свойстве «запись». Активное свойство «запись» в случае мультидействия подразумевает, что типом переменной в родительском процессе является список.
Рассмотрим применение мультиподпроцесса по отношению.
Cоздадим бизнесс-процесс MultiOnRelation на основе процесса рассмотренного в предыдущем примере (MultiOnGroup), отредактируем его следующим образом:
В конфигурации мультиподпроцесса выбираем вкладку «по отношению», в поле “Название отношения” вводим константу “Boss”, в поле “Параметр отношения” выбираем переменную Group, имя переменной в подпроцессе — operator. Эта переменная будет содержать одно из значений левой части отношения, свое для каждого подпроцесса.
В качестве параметров передаются те же переменные, что и в предыдущем примере.
Для проверки правильности разработки такого процесса, экспортируем и выполним его.
Для начала добавим в отношение Boss следующие пары:
Т.е. пользователи attila и cleopatra являются руководителями пользователей входящих в группу “all”
Запускаем процесс, в форме узла «input data» вводим передаваемые в подпроцесс параметры, в выпадающем списке выбираем группу «all»
Т.к. множество пользователей удовлетворяющих параметрам отношения будет равно 2, то и список формируем из 2-х элементов. Выполняем задание.
Как видно было создано 2 экземпляра подпроцесса, что соответствует выбранным параметрам по отношению. Выполним задания подпроцессов под пользователями attila и cleopatra, при этом отредактируем параметр Return. После завершения выполнения проверим возврат параметров в основной процесс:
Как видно, отредактированные параметры вернулись в соответствующих элементах списка Arr.
Создание процесса с мультидействием
Мультидействие – специальный вид дополнительного узла.
Аналогичен «Действию», однако в отличие от «Действия» порождает сразу несколько задач.
Если выбран режим «Все задания должны быть выполнены», то управление переходит к следующему узлу по исходящему переходу только после того как все задания «Мультидействия» выполнены. Также можно выбрать режим «Отменить остальные задания после выполнения первого».
Выбор режима доступен в контекстном меню вызванном на элементе.
Задания в зависимости от параметров могут быть назначены одному или нескольким исполнителям. Окно настроек множественных экземпляров вызывается из контекстного меню вызванного на элементе.
Множественные экземпляры определенные по переменной
Множественные экземпляры мультидействия могут быть определены по переменной типа «Список», при этом доступны два варианта назначения задач:
- одному исполнителю
В данном случае необходимо обязательно задать роль, исполнителю которой будут назначены экземпляры задания, а также выбрать переменную список по элементам которой будут запущены экземпляры.
Также есть возможность задать условие (используется синтаксис groovy) создания задачи.
В условии можно использовать индекс (index) или значение (item) элемента списка.
Например, на рисунке выше используем условие index<3 т.е. будут созданы задачи по элементам списка, индекс которых в списке (переменная «Список») не превышает 3-х. Выбран режим назначения задач одному исполнителю роли «Роль2»
Или пример, с условием создания задач item!=3 т.е. будут созданы задачи по элементам списка, значение которых не равно 3-м
- исполнителям из выбранного списка, в этом случае переменная должна быть типа Список(Исполнитель), задачи создаются безусловно
Например,
Множественные экземпляры определенные по группе
Необходимо выбрать переменную содержащую группу или ее название (допускается выбор переменных типа Исполнитель, Группа, Строка, Роль). Также название можно задать вручную.
Задачи создаются безусловно и будут назначены всем членам группы.
Множественные экземпляры определенные по отношению
По умолчанию в мультидействии по отношению выбирается обратное отношение, т.е. создается столько экземпляров действия сколько элементов в правой части отношения с заданными параметрами. Параметрами отношения являются название отношения и его левая часть. Но также можно и использовать и не обратное отношение, для этого потребуется снять галочку с опции «Обратное отношение».
В качестве параметра отношения можно использовать переменную формата Группа, Пользователь, Исполнитель, а также Строка (переменная в этом случае должна содержать имя исполнителя)
Например, запустим мультидействие по обратному отношению «Преподаватель», с параметром «Исполнитель», проинициализированным исполнителем «Бабочкин»
Сопоставление переменных
В разделе «Сопоставление переменных процесса и подпроцесса» можно определить название передаваемого в экземпляр мультидействия элемента массива. Под этим названием переменная может быть использована на файлах формы.
Например, элемент списка переменной «Список» сопоставлен переменной «Элемент списка»
который используется на форме в компоненте «Ввод переменной»
запущено два экземпляра мультидействия
Задание получили Мотыльков и Мухин.
Формы заданий с соответствующими переменными
Введенные значения переменных автоматически будут записаны в соответствующий элемент массива переменной «Список».
Генерация текстовых регламентов 4.1.2+
Регламент — это один из способов описания бизнес-процесса в виде официального документа.
Для автоматической генерации текстового регламента вызовите контекстное меню и выберите действие «Create process regulation».
Замечание. Данный пункт доступен только в случае если процесс не содержит ошибок.
Будет открыта новая вкладка, содержащая текстовое описание графа следующей структуры:
-
-
- Название бизнес-процесса
-
- Краткое описание бизнес-процесса (присутствует в документе только, если краткое описание заполнено)
-
- Подробное описание бизнес-процесса (присутствует в документе только, если подробное описание заполнено)
-
-
-
- Список ролей бизнес-процесса
-
- Список переменных бизнес-процесса
-
-
-
- Описание действий бизнес-процесса, выводятся в порядке в котором они были добавлены на диаграмму (за исключением элементов Начало и Окончание)
-
Работа с обработчиками (ActionHandler)
В системе есть возможность вызвать выполнение java-кода при наступлении определенных событий в бизнес-процессе, например, проход точки управления по определенному переходу. Java код должен быть реализован в методе execute() класса, реализующего интерфейс ActionHandler. Этот класс должен быть загружен в систему. (См. «Как добавить в «среду разработки» имена классов для инициализаторов ролей-дорожек, форматов переменных, обработчиков для узлов-выбора и элементов ActionHandler.»)
Для использования обработчиков в процессе на языке JPDL, в среде разработки необходимо выполнить следующее:
1.Убедиться, что в меню «Свойства» выбрана опция «Показать обработчики», при этом в палитре будет присутствовать элемент “обработчик”
2.Выбрать «обработчик» в палитре.
3. Поместить элемент на граф. При этом имеется возможность располагать обработчик как на переходах, так и непосредственно в узлах.
Наведите стрелку на нужный переход или узел и нажмите левую кнопку мышки. Появится иконка в виде кружка, отображающая обработчик.
4.Выбрать в палитре элемент Select. Кликнуть на созданный обработчик и перейти в его свойства, где выбрать соответствующий ActionHandler-класс.
5. Далее необходимо задать конфигурацию обработчика, в соответствующем свойстве данного элемента. Кроме этого, в случае если обработчик был добавлен в узел, а не на переход, то имеется возможность выбрать событие по которому будет срабатывать ActionHandler. Для этого имеется свойство “Событие”. Можно выбрать один из вариантов:
-
-
- При создании задачи
- При запуске задачи
- При назначении задачи
- При окончании задачи
-
В случае использования процесса на языке BPMN, в палитре имеется элемент “Задача сценария”
В свойствах данного элемента, также имеются поля Класс обработчика и его конфигурация, которые используются аналогично обработчикам в jpdl.
См. подробное описание обработчиков.
Задание инициализаторов для ролей-дорожек.
Первый пример
В качестве примера задания инициализатора при создании новой роли рассмотрим создание роли «human resource inspector» для демо-процесса «Vacation».
На закладке «Роли» кликните «Создать». В появившейся форме введите «human resource inspector» в качестве названия роли-дорожки. Кликните «ОК».
Кликните по роли, нажмите кнопку «Изменить». В появившемся окне на вкладке «Код» выберите инициализатор «функция ExecutorByName» и в качестве параметра введите имя группы, содержащей сотрудников – инспекторов кадровой службы.
Кликните «ОК». Инициализатор новой роли при этом будет определен.
Второй пример
Приведем пример задания инициализатора роли-дорожки, параметром которого является значение переменной бизнес-процесса.
Рассмотрим создание роли «boss» (руководитель) для демо-процесса «Vacation».
На закладке «Роли» кликните «Создать». В появившейся форме введите «boss» в качестве названия роли-дорожки. Кликните «ОК».
Кликните по роли, нажмите кнопку «Изменить». В появившемся окне на вкладке «Код» выберите инициализатор DemoChiefFunction (руководитель сотрудника в случае демо-процессов). В качестве параметра введите строку «${requester}» — значение переменной requester.
Кликните «ОК». Инициализатор новой роли при этом будет определен.
Замечание. Для задания в качестве параметра значения переменной надо ввести в окно ввода параметра выражение: ${имя_переменной}.
Замещение имен 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
Некоторые ответы есть на форуме:
GPD HTML visual editor on Linux
Html form designer not loaded in Linux
# Соединение с WFE-сервером
Из Среды разработки можно выполнить некоторые операции:
-
-
- импорт и экспорт процессов
- импорт и экспорт ботов
- импорт пользователей и групп для использования в инициализаторе роли
- импорт отношений для использования в инициализаторе роли
-
Для всех операций используется единая настройка соединения с сервером (Настройки -> Интеграция -> RunaWFE сервер).
В зависимости от типа коннектора значения настроек немного отличаются. business.calendar.properties
Jboss4 по протоколу RMI (Соединяется с сервером RunaWFE, развернутом на сервере приложений Jboss4) | Jboss4 используя веб сервисы (Соединяется с сервером RunaWFE, развернутом на сервере приложений Jboss4) | Jboss7 используя веб сервисы (Соединяется с сервером RunaWFE, развернутом на сервере приложений Jboss7) | |
Имя компьютера | IP адрес или название компьютера | ||
Порт | порт RMI (по умолчанию настроен 10099) | порт HTTP (по умолчанию настроен 8080) | |
Версия сервера | не используется | используется для формирования WSDL URL | |
Режим аутентификации | |||
Логин | |||
Пароль |
Замечание. WSDL URL для Jboss4 используя веб сервисы: http://Имя компьютера:Порт/runawfe-wfe-service-Версия сервера/НазваниеСлужбыServiceBean?wsdl
Замечание. WSDL URL для Jboss7 используя веб сервисы: http://Имя компьютера:Порт/wfe-service-Версия сервера/НазваниеСлужбыWebService/НазваниеСлужбыAPI?wsdl