在 Activiti 中启动进程 Java 委托和查询任务
Start process inside Activiti Java Delegate and query task
我在 Activiti Java 委托中启动了一个流程。进程启动后,我尝试查询第一个任务并在任务上设置一些properties/variables。
问题是,任务查询 returns 为空。如果我在委托中执行代码,则任务仅为 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
任务定义为同步还是异步?我问是因为如果它是异步的,第一个任务的创建本身将委托给作业执行者。这意味着它可能无法在您开始该过程时立即可用。请记住,BPM 系统不是实时系统(这是所有 BPM 系统的事实)。
如果任务是同步的,那么它应该与委托在同一个线程上执行,但仍然可能不会出现在您的查询中,因为到后备存储(数据库)的持久化可能还没有发生。
最重要的是,您需要等待第一个任务。确保它是同步的(否则您可能会等待很长时间),然后等待您的委托代码。
我在 Activiti Java 委托中启动了一个流程。进程启动后,我尝试查询第一个任务并在任务上设置一些properties/variables。 问题是,任务查询 returns 为空。如果我在委托中执行代码,则任务仅为 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
任务定义为同步还是异步?我问是因为如果它是异步的,第一个任务的创建本身将委托给作业执行者。这意味着它可能无法在您开始该过程时立即可用。请记住,BPM 系统不是实时系统(这是所有 BPM 系统的事实)。
如果任务是同步的,那么它应该与委托在同一个线程上执行,但仍然可能不会出现在您的查询中,因为到后备存储(数据库)的持久化可能还没有发生。
最重要的是,您需要等待第一个任务。确保它是同步的(否则您可能会等待很长时间),然后等待您的委托代码。