BPM API
Jmix BPM использует Flowable API, что обеспечивает легкое взаимодействие приложения Spring Boot с процессным движком. Также REST API Flowable предлагает широкие возможности для интеграции с внешними приложениями. Понимание доступных API позволяет разработчикам максимально эффективно использовать Flowable в дополнении Jmix BPM.
Flowable API
Flowable API позволяет программно запускать экземпляры процессов, завершать задачи и выполнять различные запросы, например, получать список задач для пользователя или активные экземпляры определения процесса.

В проектах Jmix BPM не используются FormService и IdentityService Flowable. Дополнение предоставляет BpmTaskService, расширяющую TaskService Flowable. См. пример использования ниже.
|
Доступ к сервисам Flowable можно получить одним из двух способов:
-
Используя
ProcessEngines
:ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); RuntimeService runtimeService = processEngine.getRuntimeService(); RepositoryService repositoryService = processEngine.getRepositoryService(); TaskService taskService = processEngine.getTaskService();
-
Инжектируя сервисы в бины, поскольку они зарегистрированы как Spring-бины:
@Component("sample_MyCustomBean") public class MyCustomBean { @Autowired private RuntimeService runtimeService;
Примеры
Программный запуск процесса
В приведенном ниже примере процесс запускается программно из обычного редактора сущностей с помощью RuntimeService
:
@Autowired
private RuntimeService runtimeService;
@Subscribe("commitAndCloseBtn")
public void onCommitAndCloseBtnClick(Button.ClickEvent event) {
Customer customer = getEditedEntity();
String name = customer.getName();
Map<String, Object> params = new HashMap<>();
params.put("customer", customer); (1)
params.put("name", name); (2)
runtimeService.startProcessInstanceByKey( (3)
"new-customer",
params);
}
1 | Метод размещает редактируемую сущность в переменной процесса customer . |
2 | Имя клиента помещается в переменную процесса с типом String. |
3 | Вызов RuntimeService для запуска нового экземляра процесса, где:
|
Получение списка пользовательских задач
Рассмотрим пример получения списка активных задач, назначенных аутентифицированному пользователю:
@Autowired
private TaskService taskService;
@Autowired
private CurrentAuthentication currentAuthentication;
public List<Task> getCurrentUserTasks() {
return taskService.createTaskQuery() (1)
.processDefinitionKey("approval") (2)
.taskAssignee(currentAuthentication.getUser().getUsername()) (3)
.active()
.orderByTaskCreateTime()
.desc()
.list();
}
1 | Метод формирует запрос для получения задач. |
2 | Запрос фильтруется, чтобы включать задачи относящиеся к определению процесс с ключом approval . |
3 | Запрос фильтруется, чтобы включать задачи, назначенные текущему пользователю. |
Получение списка экземпляров процесса
В примере ниже показано получение списка экземпляров процесса с ключом approval
, относящегося к указанной сущности Order
:
@Autowired
private RuntimeService runtimeService;
public List<ProcessInstance> getActiveProcessInstances() {
return runtimeService.createProcessInstanceQuery() (1)
.processDefinitionKey("approval") (2)
.variableValueEquals("orderId", "N-1") (3)
.active()
.list();
}
1 | Метод формирует запрос для получения экземпляров процесса. |
2 | Запрос фильтруется, чтобы включать только экземпляры процессов, относящиеся к определению процесса с ключом approval . |
3 | Запрос фильтруется, чтобы включать экземпляры процессов с укзанной переменной orderId . |
Использование BpmTaskService
BpmTaskService
расширяет TaskService
и добавляет метод для выполнения задач с исходом
void completeTaskWithOutcome(String taskId, String outcomeId, Map<String, Object> processVariables);
Вы можете внедрить сервис в свой бин Spring:
@Autowired
private BpmTaskService bpmTaskService;
Либо использовать класс ProcessEngines
:
BpmTaskService bpmTaskService = (BpmTaskService) ProcessEngines
.getDefaultProcessEngine()
.getTaskService();
Взаимодействие с определениями процессов
Flowable предоставляет богатый API для взаимодействия с определениями процессов:
-
Развертывание: Определения процессов обычно разворачиваются как часть единицы развертывания, которая может включать несколько определений и связанные ресурсы.
Deployment deployment = repositoryService.createDeployment() .addClasspathResource("my-process.bpmn20.xml") .deploy();
-
Запросы: RepositoryService позволяет выполнять запросы к определениям процессов на основе различных критериев:
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() .processDefinitionId("myProcessDefinitionId") .singleResult();
-
Приостановка и Активация: Определения процессов могут быть приостановлены или активированы, что контролирует, могут ли новые экземпляры процессов быть запущены на основе данного определения:
repositoryService.suspendProcessDefinitionById("myProcessDefinitionId");
-
Генерация диаграмм: Flowable может генерировать диаграммы процессов для развернутых определений процессов:
filename.javaInputStream diagramStream = repositoryService.getProcessDiagram(processDefinition.getId());