流程定义的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("########################################################");
- }
- }
- }
// 查询流程定义 @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表示级联删除
- }
//删除流程定义 @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("文件保存成功!");
- }
//查看流程定义的资源文件 @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方法完成流程流程到文件的拷贝,将资源文件
以流的形式输出到指定文件夹下。