- A+
所属分类:工作流引擎
我们知道,在Activiti7中
runtimeService.getVariable(String executionId, String processInstanceId)
方法可以获取当前流程实例的变量,但是这个方法存在一个问题是,需要传入一个executionId,而如果流程实例已经完成,execution对象为空,自然也获取不到变量了。其实从命名也可以看出,runtimeService是针对当前进行中的实例的一些操作。
那么如果我们想获取已完成的实例中的变量应该怎么办呢?其实Activiti中已经提供了,如下:
historyService .createHistoricVariableInstanceQuery() .processInstanceId(processInstanceId) .variableName(variableName) .excludeTaskVariables() .list()
但是需要注意的是,这里要加上excludeTaskVariables()这个条件,因为如果不加这个条件的话取出来的变量是有重复的,这个条件的意思是去除任务变量,这是什么意思?
例如一个流程有三个任务,发起,审批,存档,有一个变量num,如果这个流程实例已经完成,那么数据库中act_hi_varinst表中实际上会有4个num的重复记录,为什么会这样呢?因为这是一张历史记录表,每个任务在执行过程中都记录了变量num的值,每条记录的taskId为对应任务的id,而taskId为空的变量记录则是相对于整个流程实例而言的,所以我们可以通过taskId取到具体每一个任务当时的变量num的值,也可以通过excludeTaskVariables()这个条件取得最后流程实例完成时的变量num的值。
2020年11月27日 下午3:31 沙发
博主,你好我看你这边对于activiti写的很多,但是没有一个是涉及到的是表单的,是业务中不需要使用业务代码吗?
2020年12月9日 下午2:17 1层
@许大帅比 是这样的,我这边开发的是基础服务,业务那边是另外人开发,调我这边的接口即可