#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) и проверяю снова.