java - 在Activiti Java Delegate内部启动进程并查询任务

标签 java activiti bpmn

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

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

最佳答案

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

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

底线,你需要等待第一个任务。确保它是同步的(否则您可能会等待很长时间),然后将等待放入您的委托(delegate)代码中。

关于java - 在Activiti Java Delegate内部启动进程并查询任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51210568/

相关文章:

java - 导出至excel并显示图表

activiti - 我如何配置 Activiti 5.14 按照 'Activiti In Action' 工作?

mysql - Activiti 引擎与自定义用户和组数据表集成

bpmn - 如何设置 camunda 外部任务客户端

java - Activiti Tomcat 配置

bpmn - Flowable中的类和委托(delegate)表达式有什么区别

java - 需要将同一个应用程序部署到多个上下文,每个上下文都有不同的数据库 Tomcat7

java - 如何在Toast中显示数组

java - 解析RecyclerView图像查询

java - 扩展 Activiti 流程引擎功能的首选方式是什么?