Activiti 流程资源文件下载及历史信息查询
Activiti 流程资源文件下载及历史信息查询
流程部署之后相关资源文件(bpmn 和 png)已经上传到数据库(act_ge_bytearray表)了,如果其他用户想要查看这些资源文件,可以从数据库中把资源文件下载到本地
/**
* 流程资源文件下载
*/
@Test
public void resourceDownload() throws IOException {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionKey("evection").singleResult();
// 获取流程部署ID
String deploymentId = processDefinition.getDeploymentId();
// 获取流程图片对应的输入流
InputStream pngInput = repositoryService.getResourceAsStream(deploymentId, processDefinition.getDiagramResourceName());
// 获取流程文件的输入流
InputStream bpmnInput = repositoryService.getResourceAsStream(deploymentId, processDefinition.getResourceName());
File filePng = new File("e:/evectionflow01.png");
File fileBpmn = new File("e:/evectionflow01.bpmn");
FileOutputStream bpmnOut = new FileOutputStream(fileBpmn);
FileOutputStream pngOut = new FileOutputStream(filePng);
FileCopyUtils.copy(pngInput,pngOut);
FileCopyUtils.copy(bpmnInput,bpmnOut);
pngOut.close();
bpmnOut.close();
pngInput.close();
bpmnInput.close();
}
注意:保存下来的 png 图片不要使用系统默认名称,最好自己修改名称后再保存到本地进行流程部署,不然可能会导致流程部署后 act_re_procdef 表的DGRM_RESOURCE_NAME(图片名称) 字段为空
删除或执行完的流程定义依然保存在activiti的act_hi_*相关的表中,所以我们还是可以查询流程执行的历史信息,可以通过HistoryService来查看相关的历史记录
/**
* 流程历史信息查询
*/
@Test
public void selectHistory(){
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
HistoryService historyService = processEngine.getHistoryService();
HistoricActivityInstanceQuery instanceQuery = historyService.createHistoricActivityInstanceQuery();
// 根据InstanceId(对应PROC_INST_ID_字段)查询act_hi_actinst表
// instanceQuery.processInstanceId("2501");
// 根据DefinitionId(对应PROC_DEF_ID_)查询act_hi_actinst表
instanceQuery.processDefinitionId("evection:1:4");
// 排序-根据开始时间升序
instanceQuery.orderByHistoricActivityInstanceStartTime().asc();
// 查询所有内容
List<HistoricActivityInstance> activityInstanceList = instanceQuery.list();
for (HistoricActivityInstance hi : activityInstanceList) {
System.out.println(hi.getActivityId());
System.out.println(hi.getActivityName());
System.out.println(hi.getProcessDefinitionId());
System.out.println(hi.getProcessInstanceId());
System.out.println("<==========================>");
}
}
记得快乐