A-A+

Flowable6.4 – 在事件中使用API接口

2020年06月08日 技术, 默认 暂无评论 阅读 4,834 次

标题名称有点长,因为不太好描述今天所分享的内容。今天这篇的目的有两个:

1. 在事件中,处于不同的阶段,使用不同的API进行数据操作。 

2. 从侧面验证上一篇文章《Flowable6.4 - 事件,事务》的结论。

如果事件包裹在事务内,即:

@Override
public boolean isFireOnTransactionLifecycleEvent() {
    return false;
}

如果使用createXXXXQuery()来进行数据查询,是无法查找出正确的数据的,比如下面的语句:

runtimeService.createExecutionQuery().executionId(executionId).singleResult()

有时候,查找出的结果是null,可能的原因是:新生成的Execution还未被Commit,所以根本无法查到。

新的问题由此产生:在事务提交之前,该怎么来进行数据查询呢?

通过Flowable的源代码来看,会发现一个经常出现的工具类:

CommandContextUtil

比如,查找Execution,就可以使用下面的方法:

CommandContextUtil.getExecutionEntityManager().findById(executionId)

这也从侧面说明,如果isFireOnTransactionLifecycleEvent返回了False,其实是被包裹在事务内的。

也从另外一面说明为什么在《Flowable6.4 - 设置流程分类》中,只是做了以下操作,就可以改变Task的属性:

TaskEntityImpl.setCategory(deploymentEntity.getCategory());

如果事件在Commit之后呢

就可以使用Flowable提供的API接口来进行数据访问了,比如:

runtimeService.createExecutionQuery().executionId(executionId).singleResult()

taskService.createTaskQuery().taskId(taskId).singleResult()

以上,如有问题,欢迎指正。

觉的不错?可以关注我的公众号↑↑↑

给我留言

Copyright © 字痕随行 保留所有权利.   Theme  Ality

用户登录

分享到: