概要
部署好流程定义后,则可以进行查询、激活(启动)、挂起(暂停)、删除流程定义数据(上面讲的删除流程定义部署信息就是),下载流程定义对应的 xml文件和 png 文件。
分页条件查询流程定义
@Autowired
private RepositoryService repositoryService;
@Test
public void getProcessDefinitionList() {
// 1. 获取 ProcessDefinitionQuery
ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery();
// 条件查询
query.processDefinitionNameLike("%leave%");
// 有多个相同标识key的流程时,只查询其最新版本
query.latestVersion();
// 按流程定义key升序排列
query.orderByProcessDefinitionKey().asc();
// 当前查询第几页
int current = 1;
// 每页显示多少条数据
int size = 5;
// 当前页第1条数据下标
int firstResult = (current-1) * size;
// 开始分页查询
List<ProcessDefinition> definitionList = query.listPage(firstResult, size);
for (ProcessDefinition pd : definitionList) {
System.out.print("流程部署ID:" + pd.getDeploymentId());
System.out.print(",流程定义ID:" + pd.getId());
System.out.print(",流程定义Key:" + pd.getKey());
System.out.print(",流程定义名称:" + pd.getName());
System.out.print(",流程定义版本号:" + pd.getVersion());
System.out.println(",状态:" + (pd.isSuspended() ? "挂起(暂停)": "激活(开启)") );
}
// 用于前端显示页面,总记录数
long total = query.count();
System.out.println("满足条件的流程定义总记录数:" + total);
}
执行效果:
激活或挂起流程定义
- 流程定义被挂起:此流程定义下的所有流程实例不允许继续往后流转了,就被停止了。
- 流程定义被激活:此流程定义下的所有流程实例允许继续往后流转。
- 为什么会被挂起?
- 可能当前公司的请假流程发现了一些不合理的地方,然后就把此流程定义挂起。
- 流程不合理解决办法:
- 方式一:可以先挂起流程定义,然后更新流程定义,然后激活流程定义。
- 方式二:挂起了就不激活了,重新创建一个新的请假流程定义。
/**
* 通过流程定义id,挂起或激活流程定义
*/
@Test
public void updateProcessDefinitionState() {
// 流程定义ID
String definitionId = "leave:4:69309fc5-cc10-11ec-9cce-28d0ea3dce6b";
// 流程定义对象
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionId(definitionId)
.singleResult();
// 获取当前状态是否为:挂起
boolean suspended = processDefinition.isSuspended();
if (suspended) {
// 如果状态是:挂起,将状态更新为:激活,
// 参数1: 流程定义id;参数2:是否级联激活该流程定义下的流程实例;参考3:设置什么时间激活这个流程定义,如果 null 则立即激活)
repositoryService.activateProcessDefinitionById(definitionId, true, null);
} else {
// 如果状态是:激活,将状态更新为:挂起
// 参数 (流程定义id,是否挂起,激活时间)
repositoryService.suspendProcessDefinitionById(definitionId, true,null);
}
}
对应 act_re_procdef 表中的 SUSPENSION_STATE_ 字段,1是激活,2是挂起
下载流程定义的 xml 和 png 文件
下载流程定义的 xml 和 png 文件,方便用户浏览当前流程定义是怎样的。
@Test
public void exportProcessDefinitionFile() throws Exception{
// 流程定义ID
String definitionId = "leave:4:69309fc5-cc10-11ec-9cce-28d0ea3dce6b";
// 查询流程定义数据
ProcessDefinition processDefinition = repositoryService.getProcessDefinition(definitionId);
// xml 文件名
//String filename = processDefinition.getResourceName();
// png 图片名
String filename = processDefinition.getDiagramResourceName();
// 获取对应文件输入流
try(InputStream input = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), filename);
FileOutputStream output = new FileOutputStream(filename)) {
IOUtils.copy(input, output);
}
System.out.println("流程定义文件导出成功:" + filename);
}