Структура файл-архива бизнес-процесса RunaWFE на языке BPMN

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

Файл бизнес-процесса RunaWFE представляет собой ZIP архив с алгоритмом сжатия без потерь DEFLATE, с расширением *.par

В состав архива могут входить следующие файлы.

Описание графа бизнес-процесса и исполнителей (перспектива потока управления и перспектива ресурсов).

  • processdefinition.xml
  • gpd.xml

Файл переменных и их типов

  • variables.xml

Общий файл с js скриптами, и таблица стилей css

  • form.js
  • form.css

Файл с историей изменения БП

  • comments.xml

Файл содержащий список соответствующих узлам-действиям форм

  • forms.xml

Файлы форм узлов-действий, представляющие собой смесь языка freemarker и разметки HTML — произвольные формы, а также шаблонные формы Quick, файлы валидации переменных, и js скрипты

  • ID*.ftl
  • ID*.validation.xml
  • ID*.js
  • ID*.quick
  • *.ftl.template

Графическое представление графа бизнес-процесса

  • processimage.png

Изображение запуска бизнес-процесса

  • start.png

Подробное описание бизнес-процесса

  • index.html

Файл с описание задач ботов, используемых в бизнес-процессе

  • bots.xml

Шаблонные файлы обработчиков, например docx файл для обработчика «Формирование документа DOCX используя шаблон» или xlsx файл дли обработчика «Excel: Сохранить данные в файл»

  • ID*.template.docx, ID*.template.xlsx и т.п.

Файлы регламента бизнес-процесса

  • regulations.xml
  • regulations.html

Если в бизнес-процессе используется композиция, то архив дополнительно содержит файлы данной композиции, например

  • sub1.processdefinition.xml
  • sub1.gpd.xml
  • sub1.forms.xml
  • sub1.processimage.png
  • sub1.comments.xml
  • sub1.ID*.ftl
  • sub1.ID*.validation.xml

где «sub1» — это имя композиции, в остальном файлы имеют тот же формат что и соответствующие файлы основного процесса

Версии бизнес-процессов

Механизм версий бизнес-процессов RunaWFE основан на следующих принципах:

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

Описание графа бизнес-процесса и исполнителей

В файле processdefinition.xml описаны элементы графа бизнес-процесса и исполнители (перспектива потока управления и перспектива ресурсов), в файле gpd.xml описаны координаты расположения элементов на графе.

Файл «processdefinition.xml»

Файл представляет собой XML-документ. В корневом теге process задано имя процесса, и его свойства: showSwimlane, accessType, version, documentation

  • showSwimlane — отображение ролей на графе (обязательный элемент), возможные значения

none (не отображать)

vertical (располагать вертикально)

horizontal (располагать горизонтально)

  • accessType — использование БП (обязательный элемент), как отдельного (Process) или внешнего (OnlySubprocess) процесса
  • version — версия Developer Studio, в которой разрабатывался бизнес-процесс (обязательный элемент)
  • documentation — краткое описание бизнес-процесса (не обязательный элемент)

Например,

laneSet

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

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

В теге lane используются атрибуты: ID элемента на графе и имя роли.

В свойствах задан класс обработчика инициализатора «ru.runa.wfe.extension.assign.DefaultAssignmentHandler», который может иметь необязательную конфигурацию, заданную в секции CDATA.

На примере выше видно, что в БП используются три роли.

«Роль1» — не имеет инициализатора (секция CDATA в свойстве config — пустая),

«Роль2» — задана с помощью оргфункции «Исполнитель по имени», с конфигурацией  ru.runa.wfe.extension.orgfunction.ExecutorByNameFunction(Administrator). 

«Роль3» — инициализирована ботом по имени UniversalBot

Далее в файле processdefinition.xml располагаются теги, соответствующие узлам графа бизнес-процесса.

startEvent

Соответствует стартовому узлу «Начало» —  точке старта процесса. В описании бизнес процесса этот элемент должен присутствовать в единственном экземпляре.

Имеет атрибуты: ID элемента на графе и имя узла. И свойство lane, значением параметра является имя роли-Дорожки, которая будет инициализирована ID пользователя запустившего бизнес-процесс.

Элемент может иметь необязательные свойства:

  • documentation — описание элемента, заключенное в секции CDATA
  • asyncExecution — транзакция для выполнения По умолчанию (не задано), Отдельная (new), Существующая (shared)

sequenceFlow

Элемент определяет переход между узлами бизнес-процесса.

Имеет атрибуты:

  • id — ID элемента на графе
  • name — имя перехода
  • sourceRef — id элемента из которого выполняется переход
  • targetRef — id элемента в который выполняется переход

Дополнительно может содержать необязательное свойство «color», отвечающее за цвет перехода (кнопки в интерфейсе). Доступны 3 цвета красный (red), зеленый (green), желтый (yellow).

Как правило используется:

  • зелёный — кнопки для обычного маршрута с успешным исходом;
  • жёлтый  — для отправки задачи на доработку;
  • красными — для отмены или отказа;

Кроме того, на переходе может быть расположен обработчик actionHandler

actionHandler

Элемент actionHandler определяет java код, который будет выполнен ядром WF-системы в случае возникновения тех или иных событий (events) во время выполнения бизнес-процесса. В данном случае (на переходе) обработчик будет выполнен при выполнении перехода по маршруту «Продолжить»

 

Имеющий атрибуты ID и name, описание (необязательное) — заключенное в секции CDATA тега «documentation«, а также свойства

  • eventType — тип события (в случае расположения на переходе value соответствует «transition»)
  • class — класс обработчика (список доступных обработчиков см. в пункте с описание тега scriptTask)
  • config — конфигурация обработчика, заключенная в секцию CDATA

На примере выше, представлен обработчик DocxHandler выполняющий формирование DOCX документа на основе шаблона.

Обработчик может также располагаться в узлах-действиях (элемент будет рассмотрен ниже в соответствующем пункте)

endEvent

Узел окончания. В зависимости от наличия свойства «token» может являться элементом завершения процесса (Окончание) или завершением потока.

  • «Завершение потока» — близким аналогом в BPMN является None End Event, соответствует точке завершения исполнения потока управления бизнес-процесса.
  • «Окончание» — близким аналогом в BPMN является “terminate” End Event, при попадании управления в «Окончание» останавливаются все потоки этого процесса, а также все его синхронные подпроцессы.

Элемент может иметь необязательные свойства:

  • documentation — описание элемента, заключенное в секции CDATA
  • asyncExecution — транзакция для выполнения По умолчанию (не задано), Отдельная (new), Существующая (shared)

userTask

Элемент userTask соответствует узлу-Действию

Имеет атрибуты: ID элемента на графе и имя узла.

А также свойства

  • lane — имя роли-Дорожки, соответствующей данному узлу
  • reassign — переинициализация роли, по умолчанию false
  • reassignSwimlaneToTaskPerformer — доинициализация роль, по умолчанию true

Подробнее о ролях и инициализации — в документе Роли и задания. Замещение исполнителей. Эскалация заданий

Действие может быть асинхронным. За это отвечает свойство «async»

с возможностью выбора режима завершения «asyncCompletionMode»

  • при окончании процесса (ON_PROCESS_END)
  • при окончании главного процесса (ON_MAIN_PROCESS_END)
  • не завершать действие (NEVER)

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

<runa:property name=»taskDeadline» value=»5 minutes»/> 

или переменная формата Дата/Дата со временем, например

<runa:property name=»taskDeadline» value=»#{Переменная1} + 5 minutes»/>

Единицами измерения могут быть: минуты (minutes), рабочие минуты (business minutes), часы (hours), рабочие часы, дни (days), рабочие дни, недели (weeks), рабочие недели, месяцы (months), рабочие месяцы, года (years), рабочие года, секунды (seconds)

В узел-действие может быть добавлен элемент actionHandler.

Формат блока с обработчиком был рассмотрен ранее при описании переходов (sequenceFlow), отличие только в свойстве eventType — событие по которому будет выполнен код обработчика

  • При создании задачи (value=»task-create»)
  • При назначении задачи (value=»task-assign»)
  • При окончании задачи (value=»task-end»)

Узел-Действие также как и другие элементы графа может иметь описание и настройку транзакции:

  • documentation — описание элемента, заключенное в секции CDATA
  • asyncExecution — транзакция для выполнения По умолчанию (не задано), Отдельная (new), Существующая (shared)

Узел-действие может иметь форму, представляющую собой смесь языка freemarker и разметки HTML, файлы валидации переменных используемых на данной форме, а также js скрипты. Подробнее об этих файлах в соответствующих пунктах настоящей документации.

exclusiveGateway

Исключающий шлюз. Соответствует BPMN. Может иметь несколько входящих и несколько исходящих переходов. Используется для разделения потока операций на N альтернативных маршрутов.

Имеет атрибуты: ID элемента на графе и имя узла.

В свойствах заданы класс «ru.runa.wfe.extension.decision.GroovyDecisionHandler» и конфигурация определяющая по какому маршруту будет выполнено перемещение точки управления. В этом узле для каждой пришедшей в него точки управления делается выбор, по какому из исходящих ребер она будет перемещена далее. Может быть выбран лишь один из предложенных маршрутов.

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

Исключающий шлюз также может иметь необязательные свойства:

  • documentation — описание элемента, заключенное в секции CDATA
  • asyncExecution — транзакция для выполнения По умолчанию (не задано), Отдельная (new), Существующая (shared)

parallelGateway

Параллельный шлюз. Соответствует наложению слияния (альтернативного варианта) на разделение (альтернативный вариант). Может иметь несколько входящих и несколько исходящих переходов.

Имеет атрибуты ID элемента на графе и имя узла, а также может иметь необязательные свойства documentation и asyncExecution.

scriptTask

Задача сценария. Определяет java код, который будет выполнен ядром WF-системы при переходе к данному узлу.

Имеет атрибуты ID элемента на графе и имя узла.

Свойства:

  • class — класс обработчика
  • config — конфигурация обработчика, заключенная в секцию CDATA

Возможные классы обработчиков:

  • ru.runa.wfe.office.excel.handler.ExcelReadHandler — «Excel: Прочесть данные из файла»
  • ru.runa.wfe.office.doc.MergeDocxHandler — «Excel: Сохранить данные в файл»
  • ru.runa.wfe.office.excel.handler.ExcelFormulaHandler — «Excel: Выполнить формулы»
  • ru.runa.wfe.office.excel.handler.ExcelSaveHandler — «Word: Копирование нескольких документов DOCX в один»
  • ru.runa.wfe.office.doc.DocxHandler — «Word: Формирование документа DOCX используя шаблон»
  • ru.runa.wfe.office.storage.handler.ExternalStorageHandler — «Внешнее хранилище данных»
  • ru.runa.wfe.extension.handler.var.MapAggregateFunctionActionHandler — «Агрегатная функция над картой»
  • ru.runa.wfe.extension.handler.var.ListAggregateFunctionActionHandler- «Агрегатная функция над списком»
  • ru.runa.wfe.extension.handler.file.SaveFileToFileSystemHandler — «Выгрузить файл в файловую систему»
  • ru.runa.wfe.extension.handler.JavaScriptActionHandler — «Выполнить код JavaScript»
  • ru.runa.wfe.extension.handler.var.FormulaActionHandler — «Выполнить формулу»
  • ru.runa.wfe.extension.handler.DebugHandler — «Дебаг (выводит текст)»
  • ru.runa.wfe.extension.handler.SQLActionHandler — «Выполнить запросы SQL»
  • ru.runa.wfe.extension.handler.GroovyActionHandler — «Выполнить код Groovy»
  • ru.runa.wfe.service.handler.BotInvokerActionHandler — «Вызвать бот станцию»
  • ru.runa.wfe.extension.handler.var.AddObjectToListActionHandler — «Добавить объект в список»
  • ru.runa.wfe.extension.handler.process.AddReadProcessPermissionsHandler — «Добавить права на чтение процесса»
  • ru.runa.wfe.extension.handler.var.ClearVariableActionHandler — «Обнулить переменную»
  • ru.runa.wfe.extension.handler.var.MergeMapsActionHandler — «Объединить карты»
  • ru.runa.wf.logic.bot.StopProcessHandler — «Остановить процесс»
  • ru.runa.wfe.extension.handler.file.LoadFileVariableFromFileSystemHandler — «Загрузить файл из файловой системы»
  • ru.runa.wfe.extension.handler.user.AssignSwimlaneActionHandler — «Назначить роль»
  • ru.runa.wfe.extension.handler.task.EndAsyncTasksHandler — «Завершить асинхронные задания»
  • ru.runa.wfe.extension.handler.SendEmailActionHandler — «Отправить email»
  • ru.runa.wfe.extension.handler.var.ConvertMapValuesToListActionHandler — «Перевести значения карты в список»
  • ru.runa.wfe.extension.handler.user.GetTaskPerformerHandler — «Получить исполнителя задания»
  • ru.runa.wfe.extension.handler.user.GetExecutorInfoHandler — «Получить информацию об исполнителе»
  • ru.runa.wfe.extension.handler.var.ConvertMapKeysToListActionHandler — «Перевести ключи карты в список»
  • ru.runa.wfe.extension.handler.var.ConvertMapsToListsHandler — «Перевести значения карт в списки»
  • ru.runa.wfe.extension.handler.var.PutObjectToMapActionHandler — «Положить элемент в карту»
  • ru.runa.wfe.extension.handler.user.GetExecutorByRelationHandler — «Получить исполнителя по отношению»
  • ru.runa.wfe.extension.handler.ExecutorsListFromGroupHandler — «Получить список исполнителей группы»
  • ru.runa.wfe.extension.handler.var.GetObjectFromListActionHandler — «Получить элемент списка»
  • ru.runa.wfe.extension.handler.report.ReportHandler — «Создать отчет»
  • ru.runa.wfe.extension.handler.var.SortListActionHandler — «Сортировка списка»
  • ru.runa.wfe.extension.handler.EmailTaskNotifierActionHandler — «Уведомление о невыполненных заданиях»
  • ru.runa.wfe.extension.handler.user.ConvertGroupsToUsersHandler — «Развернуть группы (преобразовать в пользователей)»
  • ru.runa.wfe.extension.handler.user.GetExecutorsByRelationHandler — «Получить список исполнителей по отношению»
  • ru.runa.wfe.extension.handler.CreateOptionActionHandler — «Создать опцию для выбора»
  • ru.runa.wfe.extension.handler.var.GetObjectFromMapActionHandler — «Получить элемент карты»
  • ru.runa.wfe.extension.handler.var.RemoveObjectFromListActionHandler — «Удалить объект из списка»
  • ru.runa.wfe.extension.handler.var.TargetProcessSetDateVariableHandler — «Установить переменную даты в другом БП»
  • ru.runa.wfe.extension.handler.var.SetObjectToListActionHandler — «Установить элемент списка»
  • ru.runa.wfe.extension.handler.EscalationActionHandler — «Эскалация»
  • ru.runa.wfe.extension.handler.var.RemoveObjectFromMapActionHandler — «Удалить элемент из карты»
  • ru.runa.wfe.extension.handler.var.SetDateVariableHandler — «Установить переменную даты»

multiTask

Мультидействие – специальный вид дополнительного узла. Аналогичен узлу-Действию (userTask), однако в отличие от Действия порождает сразу N задач, назначенных одному или разным исполнителям (в зависимости от настройки).

Имеет атрибуты ID элемента на графе и имя узла.

Также как и userTask имеет свойства lane, reassign, reassignSwimlaneToTaskPerformer, async, asyncCompletionMode, taskDeadline, documentation, asyncExecution. На элемент может быть добавлен actionHandler (см. userTask)

Секция varables (может отсутствовать, если не задан маппинг переменных).

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

  • name — имя переменной процесса формата Список(), элементы которого будут доступны на формах экземпляров действий
  • mappedName — имя переменной под которым соответствующий элемент Списка будет доступен на форме экземпляра действия
  • usage — использование переменных, соответствует значению «multiinstancelink,write,read«

Свойства multiTaskCreationMode и discriminatorUsage определяют режим создания экземпляров задачи.

  • multiTaskCreationMode BY_DISCRIMINATOR, discriminatorUsage = «multiinstancelink,variable» — по переменной типа «Список» заданной в свойстве discriminatorValue, задания будут назначены одному исполнителю, используется роль заданная в свойстве lane.

В этом режиме в свойстве discriminatorCondition может быть groovy условие создания экземпляров,

например

  • multiTaskCreationMode BY_EXECUTORSdiscriminatorUsage = «multiinstancelink,variable» — по переменной типа «Список» заданной в свойстве discriminatorValue, задания будут назначены исполнителям из выбранного списка
  • multiTaskCreationMode BY_EXECUTORSdiscriminatorUsage = «multiinstancelink,group» — по переменной содержащую группу или ее название заданной в свойстве discriminatorValue, задания будут назначены каждому пользователю из группы.
  • multiTaskCreationMode BY_EXECUTORSdiscriminatorUsage = «multiinstancelink,group,text» — по группе, название которой задано в свойстве discriminatorValue, задания будут назначены каждому пользователю из группы.
  • multiTaskCreationMode BY_EXECUTORSdiscriminatorUsage = «multiinstancelink,relation,text» — по отношению с параметром, заданным в свойстве discriminatorValue, задания будут назначены каждому пользователю выбранному по отношению.

На примере выше используется отношение Boss, при этом установлен признак обратного отношения (символ !).

Свойство multiTaskSynchronizationMode определяет режимы завершения заданий.

  • LAST — все задания должны быть выполнены
  • FIRST — отменить остальные задания после выполнения первого

Мультидействие может иметь форму, файлы валидации переменных используемых на данной форме, а также js скрипты.

subProcess

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

Подпроцесс

Атрибуты тега subProcess

  • id — ID элемента на графе
  • name — Имя элемента подпроцесс
  • process — название бизнес-процесса используемого в качестве подпроцесса

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

Соответствие переменных задано в секции «variables«, где

  • name — имя переменной в основном процессе
  • mappaedName — имя переменной в подпроцессе
  • usage — режимы использования переменной

(read — при запуске подпроцесса cзначение переменной копируется в подпроцесс; write — при завершении подпроцесса значение переменной копируется в родительский БП; sync — при изменении значения переменной в подпроцессе оно будет изменено как в подпроцессе, так и в базовом БП)

Композиция

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

Файлы композиции (свои processdefinition.xml, gpd.xml, файлы форм, валидации и т.д.) входят в состав файл-архива основного процесса и имеют ту же структуру что и основной процесс, за исключением отсутствия секций связанных с  ролями и их инициализаторами, а также переменными.

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

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

 

В случае наличия свойства multiInstance со значением true тег subProcess описывает элемент мультиподпроцесс.

В секции variables описаны сопоставления переменных процесса и подпроцесса, а также режим запуска.

Запуск мультиподпроцесса по элементам переменной типа «Список» (usage=»multiinstancelink,variable»)

Запуск мультиподпроцесса по переменной содержащей группу или ее название  (usage=»multiinstancelink,group»)

Группа может быть задана непосредственно в виде константы (без использования переменной) (usage=»multiinstancelink,group,text»)

Запуск мультиподпроцесса по отношению (usage=»multiinstancelink,relation,text»)

subProcess может иметь необязательные свойства documentationasyncExecutionasync, asyncCompletionMode (см. в ранее описанных элементах)

textAnnotation

Текстовая аннотация.

Имеет атрибут id, а также текстовое описания заключенное в секцию CDATA

intermediateCatchEvent

Данный тег описывает элементы графа «Таймер» и «Обработка события». Имеет стандартные атрибуты id и name

Таймер

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

Таймер описан в секции timerEventDefinition

В свойстве timerDuration задано время срабатывания таймера в виде задержки относительно базовой даты.

В качестве базовой даты может быть использована «Дата прихода управления в состояние», в этом случае в timerDuration пишется только задержка  <timeDuration>1 minutes</timeDuration>

или же возможно применение переменной формата «Дата», в таком случае timerDuration будет в виде <timeDuration>#{Переменная} + 1 minutes</timeDuration>

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

где

  • class — класс обработчика (см. список возможных обработчиков в описании тега scriptTask)
  • config — конфигурация обработчика, заключенная в секцию CDATA
  • repeat — задержка между повторами

Кроме того, «Таймер» может быть присоединен к элементам: «Действие», «Мультидействие», «Обработка события». Данная возможность описана в теге boundaryEvent

Обработка события

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

В зависимости от атрибута type различают следующий тип события

  • message — сообщение
  • signal — сигнал
  • cancel — отмена
  • error — ошибка

В секции variables заданы свойства маршрутизации (атрибут usage со значением «selector«) и сопоставление названий переменных в процессе и сообщении  (атрибут usage со значением «read«)

Кроме того, элемент «Обработка события» может быть присоединен к элементам: «Действие», «Мультидействие», «Таймер». Данная возможность описана в теге boundaryEvent

intermediateThrowEvent

Данный тег описывает элемент «Генерация события». В момент прихода управления в «Генерация события» отправляется специальное сообщение (сигнал) элементу «Обработка события», после чего точка управления «идет» дальше.

Имеет атрибуты

  • id — ID элемента на графе
  • name — название элемента
  • timeDuration — время жизни сообщения (в качестве базовой даты может использоваться переменная формата «Дата», см. свойство timeDuration в элементе «Таймер»)
  • type — тип события (message — сообщение, signal — сигнал, cancel — отмена, error — ошибка)

В секции variables заданы свойства маршрутизации (атрибут usage со значением «selector«) и сопоставление названий переменных в процессе и сообщении  (атрибут usage со значением «read«)

boundaryEvent

Данный тег описывает элементы «Таймер» и «Обработка события» присоединенные к другим элементам.

Таймер может быть присоединен к элементам: «Действие», «Мультидействие», «Обработка события»

«Обработка события» может быть присоединена к элементам: «Действие», «Мультидействие», «Таймер»

В атрибуте attachedToRef задан ID элемента к которому выполнено присоединение. Атрибут cancelActivity определяет будет ли прервано выполнение узла к которому выполнено присоединение.

Файл «gpd.xml»

Файл представляет собой XML-документ, в котором описаны координаты расположения элементов графа бизнес-процесса.

Корневой тег process-diagram имеет следующие атрибуты:

  • name — имя бизнес-процесса
  • notation — нотация (bpmn, uml) в которой выполнена диаграмма бизнес-процесса
  • rendered — в случае нотации bpmn принимает значение «graphiti» (в случае uml — данный атрибут отсутствует)
  • showActions — включение отображения обработчиков
  • showGrid —  включение отображения сетки
  • width — ширина диаграммы
  • height — высота диаграммы

Далее следует описание всех элементов графа с помощью тегов «node» со следующими атрибутами

  • name — уникальное имя элемента на графе (ID)
  • x,y — начальные координаты расположения элемента на графе
  • width, height — размеры элемента
  • minimizedView — необязательный параметр, определяет компактное отображение элемента на графе (доступен для элементов: «Действие», «Мультидействие», «Композиция», «Подпроцесс», «Мультиподпроцесс»)

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

Например,

 

Тег transition

Узел «Начало» (ID1) имеет один исходящий переход (transition),  его название задано в атрибуте name.

Узел «Действие 1» (ID2) имеет 3 исходящих перехода, при этом два из них заданы в виде кривой. Относительные координаты точек по которым построена кривая перехода задаются в тегах bendpoint. Если переход представляется собой прямую, то bendpoint отсутствует.

Кроме того, переход имеет название которое отображается на графе в виде метки (label). Если позиция отображения названия перехода была изменена пользователем, то координаты метки записываются в атрибуты x,y тега label

Такие элементы как «Аннотация», «Окончание», «Завершение потока» не имеют исходящих переходов.

Тег textDecoration

Элементы «Начало», «Окончание», «Завершение потока» на диаграмме отображаются вместе с названием, которое в xml описано как textDecoration с координатами заданными в атрибутах x,y

Графическое изображение диаграммы бизнес-процесса представлено в файле «processimage.png»

Файл переменных и пользовательских типов «variables.xml»

Файл представляет собой XML-документ.

Корневой тег — variables, в котором описаны пользовательские типы данных («usertype«), а также переменные («variable«)

Тег «usertype«, в name задано название пользовательского типа (на примере выше — «Заявка» и «Карточка»).

Тег variable описывает переменную (а также роль) или поля пользовательской переменной (если находится в секции usertype).

variable имеет атрибуты

  • name — имя переменной (или поля пользовательской переменной)
  • sriptingName — имя под которым переменная доступна в скриптах (например в groovy обработчике)
  • format — тип переменной (если переменная пользовательского типа, то данный атрибут отсутствует, вместо него используется usertype)
  • usertype — пользовательский тип
  • swimlane — если переменная является ролью
  • defaultValue — значение по умолчанию

Допускается использование вложенных пользовательских типов. На примере выше «Заявка» имеет поле «Объект» с типом «Карточка», который в свою очередь тоже является пользовательским типом.

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

  • «ru.runa.wfe.var.format.ExecutorFormat» (при условии swimlane=»true») — Роль
  • «ru.runa.wfe.var.format.TimeFormat» — время
  • «ru.runa.wfe.var.format.DateFormat» — дата
  • «ru.runa.wfe.var.format.DateTimeFormat» — дата со временем
  • «ru.runa.wfe.var.format.GroupFormat» — группа
  • «ru.runa.wfe.var.format.ActorFormat» — пользователь
  • «ru.runa.wfe.var.format.ExecutorFormat» — исполнитель
  • «ru.runa.wfe.var.format.MapFormat(ru.runa.wfe.var.format.StringFormat, ru.runa.wfe.var.format.StringFormat)» — Карта(Тип ключа, Тип значения)
  • «ru.runa.wfe.var.format.HiddenFormat» — скрытое поле
  • «ru.runa.wfe.var.format.ListFormat(ru.runa.wfe.var.format.StringFormat)» — Список(Тип)
  • «ru.runa.wfe.var.format.ProcessIdFormat» — ссылка на процесс
  • «ru.runa.wfe.var.format.StringFormat» — строка
  • «ru.runa.wfe.var.format.TextFormat» — текст
  • «ru.runa.wfe.var.format.FormattedTextFormat» — форматированный текст
  • «ru.runa.wfe.var.format.FileFormat» — файл
  • «ru.runa.wfe.var.format.BooleanFormat» — флаг
  • «ru.runa.wfe.var.format.LongFormat» — целое число
  • «ru.runa.wfe.var.format.DoubleFormat» — дробное число
  • «ru.runa.wfe.var.format.BigDecimalFormat» — число повышенной точности

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

Например, значение для переменной пользовательского типа «UserType1», имеющего атрибут «Field1» пользовательского типа «UserType2», в свою очередь имеющего атрибуты «Строка1» и «Целое1»

что в xml соответствует

Тег validator

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

Файл задач ботов «bots.xml»

Файл с описание задач ботов, используемых в бизнес-процессе.

Корневой тег — bottasks

Каждая задача бота, используемая в бизнес-процессе описана тегом task, имеющим следующие атрибуты

  • id — ID узла на графе к которому привязана задача бота
  • class — класс обработчика задачи бота
  • botTaskName — название задачи бота

далее следует секция config с описанием входных (input) и выходных (output) параметров задачи бота. Где name — название параметра, variable — переменная бизнес-процесса связанная с данным параметром.

Набор параметров определен в конфигурации задачи бота.

Файлы форм

В RunaWFE существует два вида форм:

  • шаблонные формы Quick
  • произвольные формы

Форма может быть создана в узлах «Начало», «Действие», «Мультидействие». Представляет собой смесь языка freemarker и разметки HTML.  В случае произвольных форм, пользователь сам строит разметку HTML (+ Freemarker) и ему доступно большое количество компонентов для работы с данными. Для форм Quick — используются предопределенные шаблоны и только два компонента — «Ввод переменной», «Отображение переменной»

Файл «forms.xml»

Корневой тег — «forms«. Здесь описаны все формы бизнес-процесса.

Каждая форма оформлена в виде тега «form» с атрибутами:

  • state — ID узла в котором создана форма
  • file — файл содержащий код формы, для произвольных форм имеет расширение *.ftl, для шаблонных — *.quick
  • type — тип формы, ftl — произвольная, quick — шаблонная
  • validationFile — файл валидации переменных формы
  • jsValidation — использовать ли JavaScript для проверки формы
  • scriptFile — скрипт формы на языке JavaScript
  • templateFileName — шаблон quick формы (доступные шаблоны: table2ColumnsProcessLayout.ftl.template, table2ColumnsLayout.ftl.template, divContainerLayout.ftl.template)

Файлы произвольных форм «ID*.ftl»

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

Список доступных компонентов форм:

  • InputVariable — ввод переменной
  • DisplayVariable — отобразить переменную
  • GroupMembers — выбор из членов группы
  • ViewFile — просмотр файла
  • AjaxGroupMembers — выбор из членов группы (ajax)
  • ChooseActorByRelation — выбрать пользователя по отношению с параметром
  • ChooseExecutorByRelation — выбрать исполнителя по отношению с параметром
  • ChooseExecutorFromRelation — выбрать исполнителя по отношению
  • EditLinkedLists — редактировать связанные списки
  • DisplayLinkedLists — отобразить связанные списки
  • DisplayLinkedMaps — отобразить связанные карты
  • DisplayListElement — отобразить элемент списка
  • DisplayMapElement — отобразить элемент карты
  • MultipleSelectFromList — множественный выбор значений из списка
  • CheckboxSelectFromVariableList — выбор значения из списка вариантов
  • OptionSelectFromVariableList — выбор значения из списка опций
  • TreeviewSupport — поддержка иерархических справочников
  • DisplayUserTypeList — отобразить список пользовательских переменных
  • MultipleSelectFromUserTypeList — множественный выбор из списка пользовательских переменных
  • EditUserTypeList — редактирование списка множественных переменных
  • ChooseRelationName — выбрать название отношения
  • DisplayMultipleSelectInList — отобразить множественный выбор значений из списка
  • SelectFromValueList — выбрать значение из списка значений

Файлы Quick форм «ID*.quick», «*.ftl.template»

Данные файлы относятся к quick формам. В *.ftl.template находятся предопределенные шаблоны.

  • table2ColumnsProcessLayout.ftl.template — «Таблица с двумя колонками: название переменной (с описанием) = значение» ,
  • table2ColumnsLayout.ftl.template —  «Таблица с двумя колонками: название переменной  = значение»
  • divContainerLayout.ftl.template — «Шаблон для демо-процессов»

Пример шаблона (table2ColumnsProcessLayout.ftl.template)

Файл ID*.quick представляет собой XML документ с секциями tags и properties.

В отличие от произвольной формы, в шаблонной доступны для использования только два компонента: InputVariable, DisplayVariable. Соответственно в секции tags описаны переменные, которые вводятся или отображаются на форме.

В секции «properties» описаны параметры, передаваемые в шаблон (имя процесса, заголовок и т.д.)


Файлы скриптов «ID*.js»

С каждой формой можно связать скрипт, который будет выполняться при её отображении. Такой скрипт хранится в js файле.

Файлы валидации «ID*.validation.xml»

Содержит валидаторы, которые делятся на валидаторы переменных формы и глобальные валидаторы.

Файл ID*.validation.xml представляет собой XML документ с корневым тегом «validators«.

Глобальные валидаторы.

Тег «validator» с атрибутом type=»expression» описывает глобальный валидатор.

  • тег message — сообщение выводимое пользователю, в случае неудовлетворения данных условиям проверки
  • тег expression — groovy скрипт валидатора (условия проверки)

Кроме того, тег validator может содержать секцию «transition-context«, в которой описаны в контексте каких переходов будет выполняться проверка данных на удовлетворение условиям. В «on» заданы названия переходов, заключенные в конструкцию <![CDATA[…]]>

Количество глобальных валидаторов может быть более одного.

Например,

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

Валидаторы переменных формы.

Проверяемые переменные формы описаны с помощью тега «field«, в атрибуте «name» задано имя переменной.

Тег «field-validator» отвечает за валидатор переменной. Переменная может иметь более одного валидатора.

В атрибуте «type» задан тип валидатора. Валидатор может иметь параметры (тег «param» с атрибутом «name«), а также сообщение об ошибке (в теге «message«). Список доступных для переменной валидаторов зависит от ее типа.

Валидаторы:

1). stringlength — ограничитель длины строки (проверка длины строки)

Параметры:

  • doTrim — без учета граничных пробелов (true/false)
  • minLength — минимальная длина
  • maxLength — максимальная длина

2). regex — регулярное выражение (проверка принадлежности строки указанному регулярному выражению)

Параметры:

  • expression — регулярное выражение
  • trim — без учета граничных пробелов (true/false)
  • caseSensitive — с учетом регистра (true/false)

3). required — «Обязательное поле» (проверка обязательности ввода), не имеет параметров

4).email — «Валидатор email» (проверка корректного email адреса), не имеет параметров

5). url — «URL» (проверка корректного идентификатора ресурсов), не имеет параметров

6). time — «Ограничитель времени» (проверка принадлежности времени указанному диапазону)

Параметры:

  • min — минимум (HH:MM)
  • max — максимум (HH:MM)

7). date — «Диапазон даты» (проверка принадлежности даты указанному диапазону)

Параметры:

  • min — минимум (dd.MM.yyyy)
  • max — максимум (dd.MM.yyyy)

8). dateInThisMonth — «Дата в этом месяце» (проверка выбора даты в текущем месяце), не имеет параметров

9). dateRelativeToCurrent — «Диапазон даты относительно текущей» (проверка принадлежности даты относительному диапазону)

Параметры:

  • min — сдвиг в прошлое (в днях)
  • ignoreTime — игнорировать время (true/false)
  • max — сдвиг в будущее (в днях)
  • useBusinessCalendar — рабочее время (true/false)

10). dateInThisYear — «Дата в этом году» (проверка выбора даты в текущем году), не имеет параметров

11). number — «Диапазон числа» (проверка принадлежности числа указанному диапазону)

Параметры:

  • inclusive — включительно (true/false)
  • min — минимальное значение
  • max — максимальное значение

12). containerSize — «Размер контейнера» (проверка принадлежности размера коллекции указанному диапазону)

Параметры:

  • minLength — минимальный размер
  • maxLength — максимальный размер

13). containerElementsRequired — «Значения контейнера обязательны» (проверка обязательности ввода каждого элемента коллекции), не имеет параметров

14). listElementsAreUnique — «Значения списка уникальны» (проверка уникальности элементов коллекции), не имеет параметров

15). fileSize — «Ограничитель размера файла» (проверка принадлежности размера файла указанному диапазону)

Параметры:

  • minLength — минимальный размер файла (в байтах)
  • maxLength — максимальный размер файла (в байтах)

16). fileExtension — «Ограничитель по расширению файла» (проверка принадлежности типа файла указанным расширениям)

Параметры:

  • extension — расширения файлов

17). fileContentType — «Тип содержимого файла» (проверка принадлежности типа содержимого файла указанному диапазону)

Параметры:

  • contentType — ожидаемый тип

Файлы регламента бизнес-процесса

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

Регламент может быть сгенерирован автоматически, в этом случае документ представляет собой HTML файл — regulations.html (пример выше), или с помощью задания свойств регламента (включения/исключение элементов графа в регламент, ввод описания элементов и т.д.).

Во втором случае регламент сохраняется в файле — regulations.xml, являющийся XML документом с корневым тегом — «settings»

Тегом «node» описаны все узлы графа бизнес-процесса, где

  • id — ID узла графа
  • enabled — определяет, включен ли элемент в регламент (true/false)
  • previous — предыдущий элемент графа
  • next — следующий элемент графа
  • description — описание элемента для пользователя в виде html разметки, заключенной в секцию CDATA