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

Увеличить
Далее для каждого элемента пользователь может выбрать одну из загруженных политик на вкладке "Properties".

Увеличить
Пример xml-файла моделей политик повторных вызовов:
Пример type=xml<?xml version="1.0" encoding="UTF-8" ?> <xs:retryPolicyModels xmlns:xs="http://.........." businessFamily="dul_family"> <xs:retryPolicyModel id="RetryPolicy" description="Политика Retry"> <!-- id модели используется для связи с тасками, для которых она будет применима --> <xs:retryPolicies> <xs:retryPolicy description="Политика для TransportTimeoutException"> <xs:exceptions> <!--Список исключений, на которые нужно реагировать--> <xs:exception>TransportTimeoutException </xs:exception> <xs:exception>TransportNoRouteException </xs:exception> <xs:exception>UnavailableServiceException </xs:exception> <xs:exception>TransportException </xs:exception> <xs:exception>CdmWrappedException </xs:exception> </xs:exceptions> <xs:retryStrategy> <xs:linear> <!-- задать количество повторных попыток и интервал --> <xs:count>3</xs:count> <xs:timeout>PT1M</xs:timeout> </xs:linear> </xs:retryStrategy> </xs:retryPolicy> </xs:retryPolicies> </xs:retryPolicyModel> </xs:retryPolicyModels>
Валидация политики повторного вызова
Валидация политики повторного вызова производится по аналогии с валидацией модели см. пункт Валидация модели ниже.
xsd-схема для валидации политики повторного вызова поставляется с дистрибутивом Designer.
Также пользователь может осуществить валидацию вручную используя любой редактор с поддержкой данной функции.
Среда разработки позволяет провести проверку модели на соответствие правилам описания процессов. В механизм валидации закладываются проверки по трем областям:
- Правила описания процессов, накладываемые нотацией BPMN0.
- Правила описания расширений, накладываемые средой исполнения (bpms-core-app).
- Правила описания расширений, накладываемые движком среды исполнения (activity)
- Правила валидации модели с точки зрения bpms-core-app и activity.
Нарушение этих правил при разработке модели приведет к невозможности использовать модель в среде исполнения!
Правила валидации модели с точки зрения bpms-core-app и activity
Перечень валидируемых полей в разрезе элементов модели:
Элемент модели | Вкладка | Поле | Обязательность | Ограничение | RegExp |
---|---|---|---|---|---|
Все элементы | Marker | BusinessObjectDetails → Process Variable | Да | Не использовать кириллические символы | ___ |
____ | Marker | Mark Details → Mark Name | Да | ___ | ___ |
____ | Execution Listeners | Execution Listener Details → Value | Да | Не использовать кириллические символы | ___ |
____ | Execution Listeners | Execution Listener Details → Delegate Expression | Да | Не использовать кириллические символы | ___ |
____ | Task Listeners | Task Listener Details → Value | Да | Не использовать кириллические символы | ___ |
____ | Extra Attributes | Extra Attribute Details → Process Var Name | Да | Не использовать кириллические символы | ___ |
____ | Extra Attributes | Extra Attribute Details → Extra Attribute Name | Да | ___ | ___ |
____ | Extra Attributes | Extra Attribute Details → Code | Да | Не использовать кириллические символы | ___ |
____ | <...> → Attributes | Marker Type | Автогенерация | ReadOnly | ___ |
____ | <...> → Attributes | Sbt Type | ____ | Автогенерация ReadOnly | ___ |
User Task | User Task | Candidate Groups | Да | Автоматически выбирается из Lane ReadOnly | ___ |
____ | ____ | Due Date | Да | ___ | ___ |
____ | ____ | Form Key | Да | Не использовать кириллические символы | ___ |
____ | ____ | Priority | Да | Справочник (?) | ___ |
____ | ____ | Assignee | ___ | Не использовать кириллические символы | ___ |
Script Task | Script Task | Attributes → Script Language | Да | Справочник (?) | ___ |
____ | Script Task | Attributes → Script | Да | ___ | ___ |
Service Task | Service Task | Attributes → Class | Да | Не использовать кириллические символы | ([a-z]{2,3}(\.[a-zA-Z][a-zA-Z_$0-9]*)*)\.([A-Z][a-zA-Z_$0-9]*) |
____ | ____ | Attributes → SkipExpression | ___ | Не использовать кириллические символы | ___ |
____ | Fields | Fields List → Name | Да | Не использовать кириллические символы | ___ |
____ | ____ | Fields List → Name | Да | Не использовать кириллические символы | ___ |
Send Task | ____ | Attributes → Class | Да | Не использовать кириллические символы | ([a-z]{2,3}(\.[a-zA-Z][a-zA-Z_$0-9]*)*)\.([A-Z][a-zA-Z_$0-9]*) |
____ | ____ | Attributes → SkipExpression | Да | Не использовать кириллические символы | ___ |
Call Activity | InPut/OutPut | In Out Details → Value | Да | Не использовать кириллические символы | ___ |
____ | ____ | In Out Details → Target | Да | Не использовать кириллические символы | ___ |
Intermediate Catch Event | Event | Timer Event Definition Details → Time\Date → Value | Да | ISO 8601 формат даты | ^(\d{4}((-)?(0[1-9]|1[0-2])((-)?(0[1-9]|[1-2][0-9]|3[0-1])(T(24:00(:00(\.[0]+)?)?|(([0-1][0-9]|2[0-3])(:)[0-5][0-9])((:)[0-5][0-9](\.[\d]+)?)?)((\+|-)(14:00|(0[0-9]|1[0-3])(:)[0-5][0-9])|Z))?)?)?)$ |
____ | ____ | Timer Event Definition Details → Duration → | Да | ISO 8601 формат длительности | ^P(([0-9]+([.,][0-9]*)?Y)?([0-9]+([.,][0-9]*)?M)?([0-9]+([.,][0-9]*)?D)?T?([0-9]+([.,][0-9]*)?H)?([0-9]+([.,][0-9]*)?M)?([0-9]+([.,][0-9]*)?S)?)|\d{4}-?(0[1-9]|11|12)-?(?:[0-2]\d|30|31)T((?:[0-1][0-9]|[2][0-3]):?(?:[0-5][0-9]):?(?:[0-5][0-9]|60)|2400|24:00)$ |
Валидация модели в СР
Начиная с версии 1.8 в среде разработки появился механизм валидации, позволяющий проверить исполняемую модель на соответствие "Перечню ограничений и допущений".
При валидации модели используется проверка xml файла модели. Следовательно, перед запуском валидации необходимо сохранить модель.
Для валидации модели необходимо:
-
В структуре проекта выберите файл модели (или несколько моделей, или папку с файлами), перейдите в контекстное меню (нажать правую кнопку мыши) и выберите пункт "Validate":
Увеличить
-
После завершения валидации, на экране появится сообщение, информирующее о количестве найденных ошибок (
Errors
) и/или предупреждений (Warnings
), а также о времени выполнения валидации:Увеличить
Увеличить
-
На вкладке "Markers" или "Problems" в нижней части экрана можно посмотреть результат проведенной валидации:
Увеличить
Увеличить
Для удобства исправления ошибок в таблицах вкладок "Markers" и "Problems" есть:- колонка "Description" с описанием ошибки;
- колонка "Resource" с именем файла модели;
- колонка "Location", в которой содержится номер строки bpmn-файла, в которой зафиксирована данная ошибка валидации.
Увеличить
-
Вкладки "Markers" и "Problems" могут содержать данные об ошибках и предупреждениях других или даже всех моделей из рабочей области. Поэтому, для просмотра данных валидации модели можно сделать одно из следующих действий:
-
Отсортировать модели по именам, нажав на название колонки "Resource" и найдя нужный файл:
Увеличить
-
Выделить ненужные строки (или сразу группировку строк) и удалить их. Можно удалить все и затем повторить пункты 1 - 3, чтобы увидеть ошибки валидации только выбранной модели или моделей.
Увеличить
-
Доступно для версии среды разработки 1.10 и выше.
Функционал позволяет визуально оценить отличия в разных версиях модели.
Для перехода в режим визуального сравнения выполните следующие действия:
-
Диаграмма, которую хотим сравнить, должна быть открыта в графическом виде:
Увеличить
Если она открывается в виде файла xml, то нажмите на нее правой кнопкой мыши и в появившемся контекстном меню выберитеOpen With
-Bpmn2 Diagram Editor
:Увеличить
-
Перейдите в главном меню в
Diagram
-Compare Models
:Увеличить
-
В открывшемся диалоговом окне в секции "Original model" нажмите пиктограмму "папка":
Увеличить
Выберите путь до модели, с которой необходимо произвести сравнение:Увеличить
Можно, при необходимости, перевыбрать файл в секции "Modified model". Затем нажмите "ОК". Эти модели для сравнения так названы потому, что предполагается, что измененная модель может быть сохранена под другим именем и, не закрывая оригинальную модель, можно вызывать процедуру сравнения отредактированной модели с оригиналом. -
В рабочей области появится вкладка "Models Compare" c визуальным сравнением обеих моделей:
Увеличить
Красным цветом выделены удаленные элементы, зеленым - добавленные, желтым - редактированные, а серым - не изменившиеся. Внизу будет вкладка "Sbt Models Compare", в которой представлено текстовое описание всех изменений:Увеличить
Все изменения, произведенные с моделями на вкладке "Models Compare", не будут сохранены!Изменение моделей после сравнения не будет отображаться на вкладке "Models Compare". Для сравнения новых изменений нужно заново произвести процедуру сравнения и получить новую вкладку "Models Compare".
Параметр "Business Family" нужен для присвоения процессу признака принадлежности некоторому семейству бизнес-процессов. Это поле используется для объединения моделей в группы по данному признаку при формировании отчетности.
Для указания "Business Family" процесса:
-
Перейдите в свойства процесса, нажав на пустую область модели и открыв вкладку "Properties".
-
Перейдите в раздел "Process" и заполнить в нем поле "Business Family":
Увеличить
-
Сохраните модель. Значение сохраняется в xml в элементе
bpmn2:process
в атрибутеsbt:businessFamily
:Увеличить
Для указания роли владельца процесса:
-
Перейдите в свойства процесса (вкладка "Properties"), нажав на пустую область модели:
Увеличить
-
Перейдите на вкладку "Process Owner":
Увеличить
-
Укажите роль. Существует два способа указания роли:
- Ручной ввод- самостоятельное описание процессной роли. Для ручного задания роли необходимо заполнить следующие поля:
Role Name
- наименование роли;Role Description
- описание роли;Role Code
- код роли (на латинице).
- Выбор из списка - выбор роли из файла ролевой модели. Файл ролевой модели подготавливает прикладная фабрика. Для выбора роли из файла ролевой модели необходимо нажать "Select Role":
Увеличить
- Ручной ввод- самостоятельное описание процессной роли. Для ручного задания роли необходимо заполнить следующие поля:
-
Если файл с ролями задан, то появится список ролей. Выберите нужную:
Увеличить
Для поиска ролей в списке можно использовать поле "Search Pattern". Это поле чувствительно к регистру. Нажмите кнопку "Select". Поля вкладки "Process Owner" будут заполнены автоматически:Увеличить
Сохраните изменения в модели. -
В случае, если файл ролевой модели еще не выбран, появится сообщение:
Увеличить
Нажмите "Yes". Откроется окно "Preferences", вкладка "SBT Config":Увеличить
Навжмите "Change" напротив поля "Path to file with roles". Далее необходимо указать путь до xml-файла ролевой модели и нажать кнопку "Apply and Close". Если нужно изменить путь расположения файла ролевой модели, то можно открыть это окно с помощью главного меню:Window
-Preferences
-SBT Config
. Далее проделать действия, описанные выше. -
В случае, если используется коллаборация, откройте настройки процесса можно, выбрав его на вкладке "Outline": снова выполните шаги 3 и 4.
Увеличить
Для задания роли владельца процесса проделываем шаги 2, 3 и 4.
XML-представление
<bpmn2:process id="ffd15e66-2c8d-4412-ae00-6804b3fed714" sbt:processOwner.roleName="role_name" sbt:processOwner.roleDescription="role_description" sbt:processOwner.roleCode="role_code" sbt:businessFamily="" sbt:externalVersion="" name="Process_947176493" isExecutable="true" processType="Public">
Обновление ID элементов
Согласно требованиям, в качестве ID элементов исполняемой модели используются только ID формата UUID.
Если модель содержит ID, не соответствующие этому формату, необходимо заменить их на корректные идентификаторы.
Чтобы произвести автообновление (не всех ID, а только используемых в среде исполнения), следует выполнить следующие шаги:
-
В списке файлов проекта вызовите контекстное меню на выбранной модели (нажать правую кнопку мыши, стоя на модели). Выберите "Sbt Modeler" и затем "Update Id":
Увеличить
-
Если появится сообщение ниже, то необходимо нажать "ОК" и закрыть диаграмму с моделью, которую надо обновить:
Увеличить
Затем повторите пункт 1. -
Появится предупреждение о том, что в модели будет выполнена замена ID:
Увеличить
Это действие является необратимым! Убедитесь в том, что вы хорошо понимаете, какие зависимости в вашем проекте потребуют редактирования, и что, при необходимости, вы сможете вернуть изменения. -
В случае успешного обновления будет получено сообщение о завершении операции. Нажмите "Ок". Подтвердите свое намерение нажатием кнопки "Yes".
Увеличить
Изменения в модели сохранятся автоматически. -
Откроется вкладка "Compare" с сравнением модели до и после обновления. Старые и новые ID будут выделены в обоих окнах:
Увеличить
Не забудьте обновить все зависимости, которые ссылаются на модель, проставив в них новые ID!
Обновление модели при обновлении версии СР
После выхода новой версии СР часто возникает потребность обновить модели, чтобы они соответствовали изменениям и корректно отображались в обновленном Эклипсе. Появление новых и/или рефакторинг старых фич обуславливает необходимость редактировать код модели: добавляются новые элементы и/или редактируются старые. Существует возможность обновить только одну модель или все модели выбранной папки.
Обновление всех моделей в проекте
Чтобы обновить все модели в проекте/папке:
-
Вызовите контекстное меню на корневом каталоге проекта или на нужной папке (нажать правую кнопку мыши). Выберите в меню
Sbt Modeler
-Update All BPMN Models
:Увеличить
-
Появится сообщение, что выбранные модели будут обновлены. Для подтверждения действия нажмите "Yes":
Увеличить
-
После завершения обновления на экране отобразится список моделей, к которым была применена операция, с указанием результата:
Увеличить
Могут быть обновлены только модели для которых корректно указан namespace
Обновление одной модели
Чтобы обновить одну модель:
-
Вызовите контекстное меню на файле модели (нажать правую кнопку мыши). Выберите в меню
Sbt Modeler
-Update Model
:Увеличить
-
Если выбранная модель открыта в графическом виде, то появится сообщение с просьбой закрыть ее:
Увеличить
Закройте диаграмму и повторите шаг 1. -
Появится сообщение, что выбранная модель будет обновлена. Для подтверждения действия нажмите
Увеличить
-
Может появиться сообщение о лишних тэгах в коде и вопрос, хотите ли вы их удалить:
Увеличить
Это связано с каким-то старым сбоем, в результате чего у элемента (в основном это элементPool
) модели нет соответствующего графического элемента и поэтому он не отображается на диаграмме. Это нарушение приводит к появлению предупреждения при валидации модели (на вкладках "Markers" и "Problems"). Для того чтобы убрать это предупреждение, то необходимо нажать "Yes". Вне зависимости от выбора "Yes" или "No", обновление модели будет выполнено. -
В случае успешного обновления вы получите сообщение о завершении операции. Нажмите "Ок".
Увеличить
Изменения в модели сохранятся автоматически. -
Откроется вкладка "Compare" с сравнением модели до и после обновления. Изменения будут выделены в обоих окнах:
Увеличить
Обновление модели при открытии
Когда открывается модель в графическом виде, автоматически выполняется проверка: нужно ли ее обновить до текущей версии моделера или нет. Если не нужно, то модель просто открывается. Иначе появится сообщение о необходимости обновить модель:

Увеличить
После подтверждения ("Yes") запускается процедура обновления модели, описанная выше. Если выбрать "No", то появится сообщение о необходимости обновления:

Увеличить
Далее откроется модель.
Без обновления модель может отображаться некорректно, могут не появиться новые функциональности и возникать сбои в работе.
Переменные
Переменные - данные для выполнения шагов, которые использует экземпляр процесса. Переменные могут использоваться в выражениях (например, для выбора корректного исходящего пути в исключающем шлюзе), в автоматических задачах, когда вызываются внешние сервисы (например, обеспечения передачи/хранения результата вызова внешнего сервиса) и т.д.
Любой метод, стартующий экземпляр процесса, имеет опциональные параметры для обеспечения переменными, когда экземпляр процесса создан или стартовал. Например из RuntimeService.
-
Переменные могут быть добавлены в экземпляр процесса при старте/создании. Например, при RuntimeService:
ProcessInstance startProcessInstanceByKey(String processDefinitionKey, Map<String, Object> variables)
-
Переменные могут быть добавлены при выполнении процесса:Пример type=sh
void setVariable(String executionId, String variableName, Object value); void setVariableLocal(String executionId, String variableName, Object value); void setVariables(String executionId, Map<String, ? extends Object> variables); void setVariablesLocal(String executionId, Map<String, ? extends Object> variables);
-
Переменные, определенные в конкретном потоке исполнения, доступны только в данном потоке.Задачи, как и потоки исполнения, также могут иметь локальные переменные, которые будут доступны только во время исполнения задачи.Пример type=sh
Map<String, Object> getVariables(String executionId); Map<String, Object> getVariablesLocal(String executionId); Map<String, Object> getVariables(String executionId, Collection<String> variableNames); Map<String, Object> getVariablesLocal(String executionId, Collection<String> variableNames); Object getVariable(String executionId, String variableName); <T> T getVariable(String executionId, String variableName, Class<T> variableClass);
-
Переменные используются в Java Delegates, выражениях, execution- или task-listener'ах, скриптах и т.д. Простейшие методы использования:Пример type=sh
execution.getVariables(); execution.getVariables(Collection<String> variableNam es); execution.getVariable(String variableNam e); execution.setVariables(Map<String, object> variables); execution.setVariable(String variableNam e, Object value);
Выражения
Выражения могут использоваться в автоматических задачах, execution- и task-listener'ах, для определения необходимого исходящего пути.
-
Пример использования для определения исходящих путей;sequenceFlow type=xml
<sequenceFlow id="flow" sourceRef="theStart" targetRef="theTask"> <conditionExpression xsi:type="tFormalExpression"> <![CDATA[${order.price > 100 && order.price < 250}]]> </conditionExpression> </sequenceFlow>
В данном случае, выражением, которое необходимо указать является:${order.price > 100 && order.price < 250}
-
Пример использования для автоматических задач:
<serviceTask id="serviceTask" activiti:delegateExpression="$ {delegateExpressionBean}" />
Пример2 type=xml<serviceTask id="javaService" name="My Java Service Task" activiti:expression="#{printer.printMessage(execution, myVar)}" />
-
Пример использования в execution- и task-listener'ах:Пример type=xml
<userTask id="secondTask"> <extensionElements> <activiti:executionListener expression="${myPojo.myMethod(execution.event)}" event="end" /> </extensionElements> </userTask>