1、根據task的id獲取task:
TaskService taskService = getTaskService();
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
2、獲取圖片的方式:
public static InputStream getProcessDefinitionPicture(String deploymentId, String resourceName) {
RepositoryService service = getRepositoryService();
ProcessDefinitionQuery processDefQuery = service.createProcessDefinitionQuery().deploymentId(deploymentId);
ProcessDefinition def = processDefQuery.singleResult();
String resName = def.getDiagramResourceName();
return service.getResourceAsStream(deploymentId, resName);
}
InputStream io = ProcessUtil.getProcessDefinitionPicture(tempDef.getDeploymentId(), tempDef.getResourceName());
//得到圖片的二進制數據,以二進制封裝得到數據,具有通用性
byte[] data = readInputStream(io);
//new一個文件對象用來保存圖片,默認保存當前工程根目錄
File imageFile = new File("d://test.png");
//創建輸出流
FileOutputStream outStream = new FileOutputStream(imageFile);
//寫入數據
outStream.write(data);
//關閉輸出流
outStream.close();
public static byte[] readInputStream(InputStream inStream) throws Exception{
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
//創建一個Buffer字符串
byte[] buffer = new byte[1024];
//每次讀取的字符串長度,如果爲-1,代表全部讀取完畢
int len = 0;
//使用一個輸入流從buffer裏把數據讀取出來
while( (len=inStream.read(buffer)) != -1 ){
//用輸出流往buffer裏寫入數據,中間參數代表從哪個位置開始讀,len代表讀取的長度
outStream.write(buffer, 0, len);
}
//關閉輸入流
inStream.close();
//把outStream裏的數據寫入內存
return outStream.toByteArray();
}
3、根據流程定義Key和版本號獲取該流程所有Task定義,這個可以獲取流程定義中Task節點的名稱和ID等,代碼如下:
/**
* 根據流程定義ID獲取該流程所有任務定義
* @param processDefinitionId 流程定義ID
* @param processDefinitionVersion 版本號
* @return
*/
public static List<TaskDefinition> getUserTaskByProcessDefinitionId(String processDefinitionId, int processDefinitionVersion) {
List<TaskDefinition> taskDefList = new ArrayList<TaskDefinition>();
RepositoryService repositoryService = getRepositoryService();
ProcessDefinition def = repositoryService.createProcessDefinitionQuery()
processDefinitionKey(processDefinitionId).processDefinitionVersion(processDefinitionVersion).singleResult();
ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService)
.getDeployedProcessDefinition(def.getId());
List<ActivityImpl> activityImplList = processDefinitionEntity.getActivities();
for(ActivityImpl tempActivity : activityImplList) {
Object type = tempActivity.getProperty("type");
if("userTask".equals(type)) {
TaskDefinition taskDefinition = ((UserTaskActivityBehavior)tempActivity.getActivityBehavior()).getTaskDefinition();
taskDefList.add(taskDefinition);
}
}
return taskDefList;
}
測試代碼如下:
List<TaskDefinition> taskDefList = TaskUtil.getUserTaskByProcessDefinitionId("myProcess", 1);
for(TaskDefinition tempTaskDef : taskDefList) {
System.out.println("任務名稱:" + tempTaskDef.getNameExpression().getExpressionText());
System.out.println("任務ID:" + tempTaskDef.getKey());
}