您的位置:首页 > 其它

Activiti进阶(三)——流程定义的CRUD

2015-12-09 20:01 387 查看
    

     流程定义的RCUD,也就是对流程的增删该查,这篇博文简单的为大家介绍一下使用Activiti的api对流程定义进行增删改查操作。

     一、查看流程定义

// 查询流程定义
@Test
public void findProcessDifinitionList() {
List<ProcessDefinition> list = processEngine.getRepositoryService()
.createProcessDefinitionQuery()
// 查询条件
.processDefinitionKey("myMyHelloWorld")// 按照流程定义的key
// .processDefinitionId("helloworld")//按照流程定义的ID
.orderByProcessDefinitionVersion().desc()// 排序
// 返回结果
// .singleResult()//返回惟一结果集
// .count()//返回结果集数量
// .listPage(firstResult, maxResults)
.list();// 多个结果集

if(list!=null && list.size()>0){
for(ProcessDefinition pd:list){
System.out.println("流程定义的ID:"+pd.getId());
System.out.println("流程定义的名称:"+pd.getName());
System.out.println("流程定义的Key:"+pd.getKey());
System.out.println("流程定义的部署ID:"+pd.getDeploymentId());
System.out.println("流程定义的资源名称:"+pd.getResourceName());
System.out.println("流程定义的版本:"+pd.getVersion());
System.out.println("########################################################");
}
}

}
    

     流程定义和部署对象相关的Service都是RepositoryService,创建流程定义查询对象,可以在

ProcessDefinitionQuery上设置查询的相关参数,调用ProcessDefinitionQuery对象的list方法,执行查询,获得符

合条件的流程定义列表。

     执行结果如下:

     


     二、删除流程定义

//删除流程定义
@Test
public void deleteProcessDifinition(){
//部署对象ID
String deploymentId = "601";
processEngine.getRepositoryService()//获取流程定义和部署对象相关的Service
.deleteDeployment(deploymentId,true);

System.out.println("删除成功~~~");//使用部署ID删除流程定义,true表示级联删除
}

     

     因为删除的是流程定义,而流程定义的部署是属于仓库服务的,所以应该先得到RepositoryService

     如果该流程定义下没有正在运行的流程,则可以用普通删除。如果是有关联的信息,用级联删除。项目开发中使

用级联删除的情况比较多,删除操作一般只开放给超级管理员使用。

     执行结果如下:

       


        三、获取流程定义文档的资源

//查看流程定义的资源文件
@Test
public void viewPng() throws IOException{
//部署ID
String deploymentId = "1";
//获取的资源名称
List<String> list =  processEngine.getRepositoryService()
.getDeploymentResourceNames(deploymentId);
//获得资源名称后缀.png
String resourceName = "";
if(list != null && list.size()>0){
for(String name:list){
if(name.indexOf(".png")>=0){//返回包含该字符串的第一个字母的索引位置
resourceName = name;
}
}
}

//获取输入流,输入流中存放.PNG的文件
InputStream in = processEngine.getRepositoryService()
.getResourceAsStream(deploymentId, resourceName);

//将获取到的文件保存到本地
FileUtils.copyInputStreamToFile(in, new File("D:/" + resourceName));

System.out.println("文件保存成功!");
}


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

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

最后的有关IO流的操作,使用FileUtils工具的copyInputStreamToFile方法完成流程流程到文件的拷贝,将资源文件

以流的形式输出到指定文件夹下。

     
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: