我在进程开始后立即实现了一个Camunda ServiceTask类(JavaDelegate)。在此任务中,我为自己的流程实例运行ProcessInstanceQuery(不要问为什么)。令人惊讶的是,查询结果为空 - 我不明白这是怎么发生的。
为了重现这个问题,我在GitHub创建了一个非常简单的演示项目。
这是过程
这是我的HelloWorldTask执行代码
@Override
public void execute(DelegateExecution execution) throws Exception {
String processInstanceId = execution.getProcessInstanceId();
System.out.println(
"Entering HelloWorldTask.execute (processInstanceId=" + processInstanceId + ")");
ProcessInstanceQuery query =
runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId);
ProcessInstance pi = query.singleResult();
if (pi == null) {
System.out
.println("WARN - No process instance with id " + processInstanceId + " found!");
} else {
System.out.println("Hello World!");
}
System.out.println(
"Exiting HelloWorldTask.execute (processInstanceId=" + processInstanceId + ")");
}
可以使用单元测试hello.word.HelloWorldTest.helloWorld()
来启动该过程。遗憾的是输出
Entering HelloWorldTask.execute (processInstanceId=4)
WARN - No process instance with id 4 found!
Exiting HelloWorldTask.execute (processInstanceId=4)
任何人都可以解释这种行为。对我来说会很有帮助。
答案 0 :(得分:4)
由于您没有等待状态,因此未对该事务进行评估,这意味着在该过程结束之前,数据库中没有流程实例。
要通过委托执行来访问流程实例,只需使用
execution.getProcessInstance()
方法。
如果委托执行当前是流程实例,则此方法返回自身。在你的情况下,它将是相同的执行。
有关Camunda引擎中等待状态和事务边界的更多信息,请参阅documentation。