项目实践工作流之Activiti学习(二十二)

2023-11-06 17:30:35 浏览数 (2)

6.5.2 方式 2

通过查询流程部署信息获取流程定义资源。

代码语言:javascript复制
// 获取流程定义图片资源
@Test
public void getProcessResources() throws IOException {
//流程部署id
String deploymentId = "9001";
// 通过流程引擎获取repositoryService
RepositoryService repositoryService = processEngine
.getRepositoryService();
//读取资源名称
List<String> resources = 
repositoryService.getDeploymentResourceNames(deploymentId);
String resource_image = null;
//获取图片
for(String resource_name :resources){
if(resource_name.indexOf(".png")>=0){
resource_image = resource_name;
}
} 
//图片输入流
InputStream inputStream = 
repositoryService.getResourceAsStream(deploymentId, resource_image);
File exportFile = new File("d:/holiday.png");
FileOutputStream fileOutputStream = new
FileOutputStream(exportFile);
byte[] buffer = new byte[1024];
int len = -1;
//输出图片
while((len = inputStream.read(buffer))!=-1){
fileOutputStream.write(buffer, 0, len);
}
inputStream.close();
fileOutputStream.close();
}

说明:

1) deploymentId 为流程部署 ID

2) resource_name 为 act_ge_bytearray 表中 NAME_列的值

3) 使用 repositoryService 的 getDeploymentResourceNames方法可以获取指定部署下得所有文件的名称

4) 使用 repositoryService 的 getResourceAsStream 方法传入部署 ID和资源图片名称可以获取部署下指定名称文件的输入流

5) 最后的将输入流中的图片资源进行输出。

6.6流程历史信息的查看

即使流程定义已经删除了,流程执行的历史信息通过前面的分析,依然保存在 activiti 的 act_hi_*相关的表中。所以我们还是可以查询流程执行的历史信息,可以通过 HistoryService 来查看相关的历史记录。

代码语言:javascript复制
public void testHistoric01(){
 HistoryService historyService = pe.getHistoryService();
 HistoricActivityInstanceQuery query = 
historyService.createHistoricActivityInstanceQuery();
 query.processInstanceId("1501");
 
 List<HistoricActivityInstance> list = query.list();
 for(HistoricActivityInstance ai :list){
 System.out.println(ai.getActivityId());
 System.out.println(ai.getActivityName()); 
 System.out.println(ai.getProcessDefinitionId());
 System.out.println(ai.getProcessInstanceId());
 System.out.println("==============================");
 }
 }

0 人点赞