历史
历史(History)是捕获流程执行期间发生的事情并将其永久存储的组件。与运行时数据不同,即使在流程实例完成之后,历史数据仍会保留在数据库中。
历史共有 6 种实体:
- HistoricProcessInstances:包含当前和过去流程实例的信息。
- HistoricVariableInstances:包含流程变量或任务变量的最新值。
- HistoricActivityInstances:包含某个活动(流程中的节点)单次执行的信息。
- HistoricTaskInstances:包含当前和过去(已完成和已删除)任务实例的信息。
- HistoricIdentityLinks:包含任务和流程实例上当前及过去身份链接的信息。
- HistoricDetails:包含与历史流程实例、活动实例或任务实例相关的各类信息。
由于数据库中既包含历史实例实体,也包含正在运行的实例实体,你可能需要考虑查询这些表,以尽量减少对运行时流程实例数据的访问,从而保证运行时执行的性能。
查询历史
在 API 中,可以查询全部 6 种历史实体。HistoryService 提供了方法 createHistoricProcessInstanceQuery()、createHistoricVariableInstanceQuery()、createHistoricActivityInstanceQuery()、getHistoricIdentityLinksForTask()、getHistoricIdentityLinksForProcessInstance()、createHistoricDetailQuery() 和 createHistoricTaskInstanceQuery()。
下面是几个示例,展示了历史查询 API 的部分能力。完整的能力说明可以在 javadocs 的 org.flowable.engine.history 包中找到。
HistoricProcessInstanceQuery
获取定义为 'XXX' 的所有已完成流程中,耗时最长的 10 个已完成 HistoricProcessInstance。
historyService.createHistoricProcessInstanceQuery()
.finished()
.processDefinitionId("XXX")
.orderByProcessInstanceDuration().desc()
.listPage(0, 10);