旧版API如何获取流程实例的状态属性?

来源:7-6 流程实例接口(上)

布辛

2022-01-11


List<ProcessInstance> processInstanceList = runtimeService
                    .createProcessInstanceQuery()
                    .list();

List<HashMap<String, Object>> collectHashMap = processInstanceList
    .stream()
    .sorted(Comparator.comparing(ProcessInstance::getStartTime))
    .map(p -> {
        return new HashMap<String, Object>() {{

            put("id", p.getId());
            put("name", p.getName());
            put("processDefinitionId", p.getProcessDefinitionId());
            put("processDefinitionKey", p.getProcessDefinitionKey());
            put("startTime", p.getStartTime());
            put("processDefinitionVersion", p.getProcessDefinitionVersion());


            // 因为PI里没有历史高亮需要的deploymentID和resourceName,所以需要再次查询
            ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
                    .processDefinitionId(p.getProcessDefinitionId()).singleResult();

            put("deploymentId", processDefinition.getDeploymentId());
            put("resourceName", processDefinition.getResourceName());

        }};
    })
    .collect(Collectors.toList());

老师,您好!在实现后台接口【流程实例】这一小节,我没有按照课程跟您一样用的新版API,我想练习使用一下旧版API,可是发现旧版API中没有getStatus()这个方法,只有判断isEnded()和isSuspended()这个两个方法,请问老师如果我用旧版API,如何做到和新版一样的获取到流程实例的status这个属性?

写回答

1回答

布辛

提问者

2022-01-12

老师,我自己研究了一下,觉得在源码里一定能看出什么,果然找到了新旧API转换的部分:

private ProcessInstanceStatus calculateStatus(ProcessInstance internalProcessInstance) {
    if (internalProcessInstance.isSuspended()) {
        return ProcessInstanceStatus.SUSPENDED;
    } else {
        return internalProcessInstance.isEnded() ? ProcessInstanceStatus.COMPLETED : ProcessInstanceStatus.RUNNING;
    }
}

原来,就是对原有的ProcessInstance做了一个类别判断:

  1. 如果是挂起,标记为【挂起】;

  2. 如果是结束,标记为【已完成】;否则,标记为【运行中】;

1
1
布辛
这样看的话,其实新版API只是在旧版API上做了一层封装。
2022-01-12
共1条回复

Activiti7工作流开发 打造通用型可视化UML工作流系统

从0打造黑马潜力项目作品,掌握新版Activiti7核心+工程化思维。

964 学习 · 368 问题

查看课程