Camunda — выполнение процессов в определенном порядке

#java #business-process-management #camunda

#java #управление бизнес-процессами #camunda

Вопрос:

Допустим, у нас есть бизнес-процесс A . Процесс A может занять больше или меньше времени (неизвестно).

Обычно у вас может быть несколько A процессов, но иногда во время некоторых операций нам нужно убедиться, что один процесс выполняется после предыдущего.

Как мы можем достичь этого в Camunda? Пытался найти что-то вроде зависимости процесса (поэтому процесс запускается после завершения предыдущего), но ничего не смог найти : (

Я думал о добавлении некоторой переменной в process (например depending_process ) и проверке выполнения указанного процесса, но, возможно, было бы какое-то лучшее решение.

Комментарии:

1. Пожалуйста, объясните пример использования этого. Может быть, вы можете использовать действие вызова и вызвать процесс, который вы хотите выполнить после выполнения определенной задачи?

Ответ №1:

Хорошо, после некоторых исследований я получил решение.

В начале каждого процесса я проверяю наличие процессов, запущенных текущим пользователем:

 final DateTime selfOrderDate = (DateTime) execution.getVariable(PROCESS_ORDER_DATE);

List<ProcessInstance> processInstanceList = execution
        .getProcessEngineServices()
        .getRuntimeService()
        .createProcessInstanceQuery()
        .processDefinitionId(execution.getProcessDefinitionId())
        .variableValueEquals(CUSTOMER_ID, execution.getVariable(CUSTOMER_ID))
        .active()
        .list();

int processesOrderedBeforeCurrentCount = 0;
for (ProcessInstance processInstance : processInstanceList) {
    ExecutionEntity entity = (ExecutionEntity) processInstance;

    if (processInstance.getId().equals(execution.getId()))
        continue;

    DateTime orderDate = (DateTime) entity.getVariable(PROCESS_ORDER_DATE);
    if (selfOrderDate.isAfter(orderDate)) {
        processesOrderedBeforeCurrentCount  = 1;
    }
}
  

Затем я сохраняю количество ранее запущенных процессов в Camunda и в следующей задаче проверяю, равно ли оно 0. Если да, я продолжаю, если нет, я жду 1 секунду (используя таймер Camunda) и проверяю снова.