一 代碼
/**
* @className: GetAttachment
* @description: 任務附件查詢
* @date: 2020/4/20
* @author: cakin
*/
package com.syc.activiti;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.List;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Attachment;
import org.activiti.engine.task.Task;
/**
* @className: GetAttachment
* @description: 任務附件查詢
* @date: 2020/4/20
* @author: cakin
*/
public class GetAttachment {
public static void main( String[] args ) throws Exception {
// 獲取流程引擎實例
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 獲取任務服務組件
TaskService taskService = engine.getTaskService();
// 獲取運行服務組件
RuntimeService runtimeService = engine.getRuntimeService();
// 流程存儲服務組件
RepositoryService repositoryService = engine.getRepositoryService();
// 部署流程描述文件
Deployment dep = repositoryService.createDeployment()
.addClasspathResource("bpmn/vacation.bpmn").deploy();
// 查找流程定義
ProcessDefinition pd = repositoryService.createProcessDefinitionQuery()
.deploymentId(dep.getId()).singleResult();
// 啓動流程
ProcessInstance pi = runtimeService
.startProcessInstanceById(pd.getId());
// 查找任務
Task task = taskService.createTaskQuery().processInstanceId(pi.getId())
.singleResult();
// 設置任務附件
Attachment att1 = taskService.createAttachment("web url", task.getId(), pi.getId(), "Attachement1",
"163 web page", "http://www.163.com");
// 創建圖片輸入流
InputStream is = new FileInputStream(new File("src/main/resources/artifact/result.png"));
// 設置輸入流爲任務附件
Attachment att2 = taskService.createAttachment("web url", task.getId(), pi.getId(), "Attachement2",
"Image InputStream", is);
// 根據流程實例ID查詢附件
List<Attachment> attas1 = taskService.getProcessInstanceAttachments(pi.getId());
System.out.println("流程附件數量:" + attas1.size());
// 根據任務ID查詢附件
List<Attachment> attas2 = taskService.getTaskAttachments(task.getId());
System.out.println("任務附件數量:" + attas2.size());
// 根據附件ID查詢附件
Attachment attResult = taskService.getAttachment(att1.getId());
System.out.println("附件1名稱:" + attResult.getName());
// 根據附件ID查詢附件內容
InputStream stream1 = taskService.getAttachmentContent(att1.getId());
System.out.println("附件1的輸入流:" + stream1);
InputStream stream2 = taskService.getAttachmentContent(att2.getId());
System.out.println("附件2的輸入流:" + stream2);
}
}
二 查詢結果
流程附件數量:2
任務附件數量:2
附件1名稱:Attachement1
附件1的輸入流:null
附件2的輸入流:java.io.ByteArrayInputStream@773cbf4f
三 數據庫
1 act_hi_attachment
mysql> select * from act_hi_attachment;
+--------+------+----------+---------+--------------+---------+----------+---------------+--------------------+-------------+-------------------------+
| ID_ | REV_ | USER_ID_ | NAME_ | DESCRIPTION_ | TYPE_ | TASK_ID_ | PROC_INST_ID_ | URL_ | CONTENT_ID_ | TIME_ |
+--------+------+----------+---------+--------------+---------+----------+---------------+--------------------+-------------+-------------------------+
| 132509 | 1 | NULL | 163.com | 163 web page | web url | 132508 | 132504 | http://www.163.com | NULL | 2020-04-20 20:04:01.513 |
| 132511 | 1 | NULL | 163.com | 163 web page | web url | 132508 | 132504 | NULL | 132512 | 2020-04-20 20:04:01.561 |
+--------+------+----------+---------+--------------+---------+----------+---------------+--------------------+-------------+-------------------------+
2 rows in set (0.00 sec)
2 act_hi_attachment