码迷,mamicode.com
首页 > 其他好文 > 详细

Acivit 增删改

时间:2015-04-21 13:10:38      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

package cn.itcast.b_processDefinition;

 

import java.io.File;

import java.io.InputStream;

import java.util.ArrayList;

import java.util.LinkedHashMap;

import java.util.List;

import java.util.Map;

import java.util.zip.ZipInputStream;

 

import org.activiti.engine.ProcessEngine;

import org.activiti.engine.ProcessEngines;

import org.activiti.engine.repository.Deployment;

import org.activiti.engine.repository.ProcessDefinition;

import org.apache.commons.io.FileUtils;

import org.junit.Test;

 

public class ProcessDefinitionTest {

   

    /**工作流的核心对象*/

    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

 

从类路径部署

    /**部署流程定义(从类路径部署)*/

    @Test

    public voiddeploymentProcessDefinition_classpath(){

        Deployment deployment = processEngine.getRepositoryService()//与部署对象和流程定义相关的Service

                    .createDeployment()//创建部署对象

                    .name("流程定义0820")

                    .addClasspathResource("diagrams/HelloWorld.bpmn")//从类路径下加载资源,一次只能加载一个资源

                    .addClasspathResource("diagrams/HelloWorld.png")//从类路径下加载资源,一次只能加载一个资源

                    .deploy();//完成部署

        System.out.println("部署ID:"+deployment.getId());

        System.out.println("部署名称:"+deployment.getName());

        System.out.println("部署时间:"+deployment.getDeploymentTime());

    }

zip文件完成部署

   

    /**部署流程定义(从zip文件完成部署)*/

    @Test

    public voiddeploymentProcessDefinition_zip(){

        InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/HelloWorld.zip");

        ZipInputStream zipInputStream = new ZipInputStream(in);

        Deployment deployment = processEngine.getRepositoryService()//与部署对象和流程定义相关的Service

                    .createDeployment()//创建部署对象

                    .name("流程定义0820")

                    .addZipInputStream(zipInputStream)//使用zip的输入流完成部署,一次部署多个文件

                    .deploy();//完成部署

        System.out.println("部署ID:"+deployment.getId());

        System.out.println("部署名称:"+deployment.getName());

        System.out.println("部署时间:"+deployment.getDeploymentTime());

    }

   

查询流程定义

    /**查询流程定义*/

    @Test

    public voidfindProcessDefinitionList(){

        List<ProcessDefinition> list = processEngine.getRepositoryService()//与部署对象和流程定义相关的Service

                    .createProcessDefinitionQuery()//创建流程定义查询对象

                    /**where条件*/

//                  .deploymentId(deploymentId)//按照部署对象ID查询

                    .processDefinitionKey("helloworld")//按照流程定义的key查询

//                  .processDefinitionNameLike(processDefinitionNameLike)//按照流程定义名称模糊查询

//                  .processDefinitionId(processDefinitionId)//按照流程定义的id查询

                    /**排序*/

                    .orderByProcessDefinitionVersion().asc()//按照流程定义版本升序排列

//                  .orderByProcessDefinitionName().desc()//按照流程定义名称降序排列

                    /**返回结果集*/

//                  .listPage(firstResult,maxResults);//分页查询

//                  .count();//返回结果集的数量

//                  .singleResult();//单个结果集(使用id查询,返回)

                    .list();//返回多个结果集

        if(list!=null && list.size()>0){

            for(ProcessDefinition pd:list){

                System.out.println("流程定义ID:"+pd.getId());//key+版本+随机生成数

                System.out.println("流程定义名称:"+pd.getName());//对应HelloWolrd.bpmn文件中name的属性值 <process id="helloworld"name="helloworldProcess" isExecutable="true">

                System.out.println("流程定义的key:"+pd.getKey());//对应HelloWolrd.bpmn文件中id的属性值 <process id="helloworld"name="helloworldProcess" isExecutable="true">

                System.out.println("流程定义的版本:"+pd.getVersion());//当流程定义的key相同的情况下,版本升级,从1开始

                System.out.println("资源名称(bpmn文件):"+pd.getResourceName());

                System.out.println("资源图片名称(png文件):"+pd.getDiagramResourceName());

                System.out.println("部署对象ID:"+pd.getDeploymentId());

                System.out.println("************************************************************");

            }

        }

    }

删除流程定义

   

    /**删除流程定义*/

    @Test

    public void deleteProcessDefinition(){

        String deploymentId = "801";

        /**

         * 不带级联的删除

         * 如果流程只是完成部署或者流程已经执行完成(即流程没有正在执行),此时可以使用不带级联的删除

         * 但是:如果流程已经启动,并且正在执行,此时再执行不带级联删除的时候,就会抛出异常

         */

//      processEngine.getRepositoryService()//与部署对象和流程定义相关的Service

//                      .deleteDeployment(deploymentId);//使用部署对象ID,删除部署对象

        /**

         * 级联删除

         * 不管流程是否启动,都可以级联删除23张表对应的主外键约束

         */

        processEngine.getRepositoryService()//与部署对象和流程定义相关的Service

                        .deleteDeployment(deploymentId,true);//使用部署对象ID,删除部署对象

        System.out.println("删除成功,部署对象ID是:"+deploymentId);

    }

   

获取流程定义文档的资源

    /**获取流程定义文档的资源(查看流程图附件)

     * @throws Exception */

    @Test

    public void viewProcessPic() throws Exception{

        //将数据库资源文件表中的图片,读取出来,放置到D盘目录下(生成HelloWorld.png的图片)

        //部署ID

        String deploymentId = "701";

        //获取当前部署ID对应的资源

        List<String> list = processEngine.getRepositoryService()//与部署对象和流程定义相关的Service

                        .getDeploymentResourceNames(deploymentId);

        //资源图片名称

        String resourceName = "";

        if(list!=null && list.size()>0){

            for(String s:list){

                if(s.indexOf(".png")>=0){

                    resourceName = s;

                }

            }

        }

        //获取图片的输入流

        InputStream in = processEngine.getRepositoryService()//与部署对象和流程定义相关的Service

                        .getResourceAsStream(deploymentId, resourceName);

        //输入流中的文件写到输出流中

//      File file = new File("D:/"+resourceName);

//      OutputStream out = new FileOutputStream(file);

//      for(int b=-1;(b=in.read())!=-1;){

//          out.write(b);

//      }

//      out.close();

//      in.close();

        FileUtils.copyInputStreamToFile(in,new File("D:/"+resourceName));

    }

查询最新版本的流程定义

   

    /**查询最新版本的流程定义*/

    @Test

    public voidfindProcessDefinitionListWithLastVersion(){

        List<ProcessDefinition> list = processEngine.getRepositoryService()//与部署对象和流程定义相关的Service

                    .createProcessDefinitionQuery()//创建流程定义查询对象

                    /**排序*/

                    .orderByProcessDefinitionVersion().asc()//按照流程定义版本升序排列(最新版本的在最后)

                    /**返回结果集*/

                    .list();//返回多个结果集

        /**

         * map集合的key表示流程定义的key

         * map集合的value表示流程定义的对象

         */

        Map<String, ProcessDefinition> map = new LinkedHashMap<String, ProcessDefinition>();

        if(list!=null && list.size()>0){

            for(ProcessDefinition pd:list){

                map.put(pd.getKey(), pd);//map集合的特点,当map集合key相同的情况下,后一次的值将替换前一次值

            }

        }

        List<ProcessDefinition> pdList = new ArrayList<ProcessDefinition>(map.values());

        if(pdList!=null && pdList.size()>0){

            for(ProcessDefinition pd:pdList){

                System.out.println("流程定义ID:"+pd.getId());//key+版本+随机生成数

                System.out.println("流程定义名称:"+pd.getName());//对应HelloWolrd.bpmn文件中name的属性值 <process id="helloworld"name="helloworldProcess" isExecutable="true">

                System.out.println("流程定义的key:"+pd.getKey());//对应HelloWolrd.bpmn文件中id的属性值 <process id="helloworld"name="helloworldProcess" isExecutable="true">

                System.out.println("流程定义的版本:"+pd.getVersion());//当流程定义的key相同的情况下,版本升级,从1开始

                System.out.println("资源名称(bpmn文件):"+pd.getResourceName());

                System.out.println("资源图片名称(png文件):"+pd.getDiagramResourceName());

                System.out.println("部署对象ID:"+pd.getDeploymentId());

                System.out.println("************************************************************");

            }

        }

    }

   

删除流程定义

    /**

     * 删除流程定义(删除key相同的所有不同版本的流程定义)

     */

    @Test

    public voiddeleteProcessDefinitionByKey(){

        //先使用流程定义的key查询所有版本的流程定义

        List<ProcessDefinition> list = processEngine.getRepositoryService()//与部署对象和流程定义相关的Service

                            .createProcessDefinitionQuery()//创建流程定义查询对象

                            /**where条件*/

                            .processDefinitionKey("helloworld")//按照流程定义的key查询

                            /**返回结果集*/

                            .list();//返回多个结果集

        //遍历list集合

        if(list!=null && list.size()>0){

            for(ProcessDefinition pd:list){

                String deploymentId = pd.getDeploymentId();

                processEngine.getRepositoryService()//与部署对象和流程定义相关的Service

                                .deleteDeployment(deploymentId,true);//使用部署对象ID,删除部署对象

                System.out.println("删除成功,部署对象ID是:"+deploymentId);

            }

        }

       

    }

}

 全部删除

 

Acivit 增删改

标签:

原文地址:http://blog.csdn.net/langren19871026/article/details/45167789

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!