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());
}