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("<==========================>");
}
}
记得快乐
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!