flowable查询流程实例信息和已处理任务

在Flowable中查询流程办理记录,通常指的是查询流程实例的历史活动(HistoricActivityInstance)和任务历史(HistoricTaskInstance)。这些记录包含了流程执行过程中的关键信息,如任务的执行人、执行时间、流程状态等。

以下是查询流程办理记录的步骤和示例代码:

查询流程实例的历史活动

  1. 获取HistoryService:首先,你需要获取到Flowable的HistoryService,这是操作历史数据的主要服务接口。
  2. 创建HistoricActivityInstanceQuery:使用HistoryService创建一个HistoricActivityInstanceQuery对象。
  3. 设置查询条件:在HistoricActivityInstanceQuery对象上设置查询条件,比如流程实例的ID、活动ID、执行人等。
  4. 执行查询:执行查询并获取结果。

java
import org.flowable.engine.ProcessEngine;
import org.flowable.engine.ProcessEngines;
import org.flowable.engine.history.HistoricActivityInstance;
import org.flowable.engine.history.HistoricActivityInstanceQuery;

import java.util.List;

public class HistoricActivityInstanceQueryExample {
public static void main(String[] args) {

### Flowable实例用户任务处理方法 在 Flowable 工作流引擎中,多实例用户任务允许多次执行同一类型的用户任务。这可以通过配置 `multiInstanceLoopCharacteristics` 来实现,使得同一个任务能够由不同的用户分别完成多次。 #### XML 配置示例 为了使某个用户任务成为多实例任务,可以在 BPMN 文件中加入如下配置: ```xml <userTask id="miUserTask" name="Multi Instance User Task"> <multiInstanceLoopCharacteristics isSequential="false" flowable:collection="${assigneeList}" flowable:elementVariable="currentAssignee"/> </userTask> ``` 这段代码片段展示了如何定义一个多实例用户任务[^1]。其中 `isSequential=false` 表明这些任务是可以并发执行的;如果将其设为 true,则表示它们将以串行方式逐一被执行。属性 `flowable:collection` `flowable:elementVariable` 分别用来指定集合变量以及每次迭代时使用的单个元素名称。 对于上述例子而言,假设有一个名为 assigneeList 的列表包含了所有可能负责当前任务的人选名单,那么每一次循环都会从中取出一位成员作为此次任务的实际负责人 currentAssignee。 #### Java API 使用案例 除了通过 BPMN 定义外,还可以利用 Flowable 提供的 Java API 动态地启动带有多实例特性的流程实例: ```java // 获取流程引擎组件 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); RuntimeService runtimeService = processEngine.getRuntimeService(); Map<String, Object> variables = new HashMap<>(); variables.put("assigneeList", Arrays.asList("张三", "李四", "王五")); runtimeService.startProcessInstanceByKey("processKey", variables); ``` 这里先初始化了一个包含三个潜在责任人的列表,并把它传递给了新创建的流程实例。这样做的好处在于灵活性更高,因为可以根据实际情况动态调整责任人范围而无需修改已有的 BPMN 流程文件[^2]。 #### 查询历史记录 一旦完成了所有的子任务,就可以查看整个过程的历史数据以便审计或其他用途: ```java HistoryService historyService = processEngine.getHistoryService(); HistoricTaskInstanceQuery query = historyService.createHistoricTaskInstanceQuery() .processInstanceId(processInstanceId); for (HistoricTaskInstance historicTask : query.list()) { System.out.println(historicTask.getName() + ": " + historicTask.getDurationInMillis()); } ``` 以上代码段显示了怎样检索并打印出特定流程实例下的每一个已完成的任务及其耗时时长的信息[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值