本文档内容为解决通过 flowable 全局监听器监听到事件后获取流程相关数据时遇到的问题和解决办法,如有错误,请指正。
如何使用全局监听器监听事件请查阅 flowable6.3官方文档
TASK_CREATED
如果是发起流程触发的 TASK_CREATED 事件,则在事件触发过程完成前去查询流程实例时查询不到,
流程实例在首个 TASK_CREATED 事件完成后生成数据库记录。
如需在此事件中获取流程定义信息,推荐使用如下方式获取:
获取 UserTask 节点中的 flowable:category 和 flowable:candidateGroups 属性,方式不唯一,选择适合自己的方式即可
方式一
BpmnModel bpmnModel = flowListener.getRepositoryService().getBpmnModel(taskEntity.getProcessDefinitionId());
// 获取节点定义id
String taskDefinitionKey = taskEntity.getTaskDefinitionKey();
// 根据节点定义id获取节点元素
FlowElement flowElement = bpmnModel.getFlowElement(taskDefinitionKey);
if (flowElement instanceof UserTask) {
UserTask userTask = (UserTask) flowElement;
String category = userTask.getCategory();
List<String> candidateGroups = userTask.getCandidateGroups();
}
方式二
if (eventType == FlowableEngineEventType.TASK_CREATED) {
// 任务创建事件
if (event instanceof FlowableEntityEventImpl) {
FlowableEntityEventImpl eventImpl = (FlowableEntityEventImpl) event;
TaskEntity taskEntity = (TaskEntity) eventImpl.getEntity();
Set<IdentityLink> candidates = taskEntity.getCandidates();
for (IdentityLink candidate : candidates) {
String groupId = candidate.getGroupId();
}
String category = taskEntity.getCategory();
}
TASK_COMPLETED & ACTIVITY_COMPLETED
这两个事件代表节点执行完毕准备流向下一节点;
执行顺序 TASK_COMPLETED 》ACTIVITY_COMPLETED;
监听到这两个事件执行异步操作时,如果需要对流转前的任务数据进行查询(即对 act_ru_task 这张表进行查询),需在进入异步操作前进行查询,TASK_COMPLETED 事件结束会删除任务实体,ACTIVITY_COMPLETED 表示事件最终完成。