Camunda - 按特定顺序执行流程

时间:2016-10-06 15:50:24

标签: java bpm camunda

让我们说我们有业务流程A。流程A可能需要更多或更少的时间(不知道)。

通常,您可以拥有多个A进程,但有时在某些操作期间,我们需要确保在上一个进程之后执行一个进程。

我们怎样才能在Camunda实现它?试图找到类似流程依赖的东西(所以流程在前一个完成后开始),但无法找到任何东西:(

我考虑在进程中添加一些变量(如depending_process)并检查指定的进程是否已完成,但可能会有更好的解决方案。

1 个答案:

答案 0 :(得分:0)

好的,经过一些研究后我得到了解决方案。

在每个流程的开始,我检查当前用户启动的流程:

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.如果是,我继续,如果不,我等待1s(使用Camunda的计时器)并再次检查。