Camunda - 按特定顺序执行流程
Camunda - executing processes in specific order
假设我们有业务流程A
。处理 A
可能需要更多或更少的时间(未知)。
通常你可以有多个A
进程,但有时在某些操作中我们需要确保一个进程在前一个进程之后执行。
我们如何在 Camunda 中实现它?试图找到类似进程依赖性的东西(所以进程在前一个完成后开始),但找不到任何东西:(
我考虑过在流程中添加一些变量(如 depending_process
)并检查指定的流程是否已完成,但也许会有更好的解决方案。
好的,经过一些研究我找到了解决方案。
在每个进程开始时,我检查当前用户启动的进程:
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 的计时器)并再次检查。
假设我们有业务流程A
。处理 A
可能需要更多或更少的时间(未知)。
通常你可以有多个A
进程,但有时在某些操作中我们需要确保一个进程在前一个进程之后执行。
我们如何在 Camunda 中实现它?试图找到类似进程依赖性的东西(所以进程在前一个完成后开始),但找不到任何东西:(
我考虑过在流程中添加一些变量(如 depending_process
)并检查指定的流程是否已完成,但也许会有更好的解决方案。
好的,经过一些研究我找到了解决方案。
在每个进程开始时,我检查当前用户启动的进程:
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 的计时器)并再次检查。