在Activiti Java委托和查询任务中启动过程

时间:2018-07-06 12:31:57

标签: java activiti bpmn

我在Activiti Java委托内部启动一个进程。该过程开始后,我尝试查询第一个任务并在该任务上设置一些属性/变量。 问题是任务查询返回空值。仅当我在委托中执行代码时,此任务才为null。如果我在代表之外做同样的事情,一切都会很好。

public class MyDelegate implements JavaDelegate {

@Override
public void execute(DelegateExecution execution) throws Exception {
    ProcessInstance instance = execution.getEngineServices()
                                        .getRuntimeService()
                                        .startProcessInstanceById("processId"); // instance is created and has an id

    Task task = execution.getEngineServices()
                         .getTaskService()          
                         .createTaskQuery()
                         .processInstanceId(instance.getProcessInstanceId())
                         .singleResult();  // returns null
    // set dueDate, assignee, variablesLocal ... 
}

}

Activiti版本: 5.19.0.3

1 个答案:

答案 0 :(得分:1)

任务定义为同步还是异步?我问,因为如果异步,则第一个任务的创建本身将委派给作业执行者。这意味着它可能在您开始该过程后立即不可用。请记住,BPM系统不是实时系统(这是所有BPM系统的事实)。

如果任务是同步的,则应在与委托相同的线程上执行该任务,但由于可能尚未发生对后备存储(数据库)的持久性,因此它仍可能不会出现在查询中。

底线,您需要等待第一个任务。确保它是同步的(或者您可能要等待很长时间),然后在委托代码中添加一个等待时间。