3.activiti管理流程定义

2018-08-16  本文已影响0人  _少年不知愁

1.部署流程定义

 Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service
                .createDeployment()//创建一个部署对象
                .name("测试Helloword1")//添加部署的名称
                .addClasspathResource("diagrams/helloworld.bpmn")//从classpath的资源中加载,一次只能加载一个文件
                .addClasspathResource("diagrams/helloworld.png")//从classpath的资源中加载,一次只能加载一个文件
                .deploy();//完成部署

在创建时会自动加载classpath下的activiti.cfg.xml
classpath路径加载文件
a) act_re_deployment(部署对象表)
存放流程定义的显示名和部署时间,每部署一次增加一条记录
b) act_re_procdef(流程定义表)
存放流程定义的属性信息,部署每个新的流程定义都会在这张表中增加一条记录。
注意:当流程定义的key相同的情况下,使用的是版本升级
c) act_ge_bytearray(资源文件表)
存储流程定义相关的部署信息。即流程定义文档的存放地。每部署一次就会增加两条记录,一条是关于bpmn规则文件的,一条是图片的(如果部署时只指定了bpmn一个文件,activiti会在部署时解析bpmn文件内容自动生成流程图)。两个文件不是很大,都是以二进制形式存储在数据库中。
2 使用zip部署流程

   @Test
   public void deploymentProcessDefinition() {
       RepositoryService repositoryService = processEngine.getRepositoryService();
       DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
       Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service
               .createDeployment()//创建一个部署对象
               .name("测试Helloword1")//添加部署的名称
               .addClasspathResource("diagrams/helloworld.bpmn")//从classpath的资源中加载,一次只能加载一个文件
               .addClasspathResource("diagrams/helloworld.png")//从classpath的资源中加载,一次只能加载一个文件
               .deploy();//完成部署
       System.out.println("部署ID:" + deployment.getId());//1
       System.out.println("部署名称:" + deployment.getName());//helloworld入门程序
       System.out.println(deployment);
   }

3.查看流程定义
看到流程定义的key值相同的情况下,版本是从1开始逐次升级的
1)带有特定key的流程定义第一次部署时,version为1。之后每次部署都会在当前最高版本号上加1
2)Id的值的生成规则为:{processDefinitionKey}:{processDefinitionVersion}:{generated-id}, 这里的generated-id是一个自动生成的唯一的数字
3)重复部署一次,deploymentId的值以一定的形式变化
规则act_ge_property表生成

    /**
     * 2 查看流程定义
     */
    @Test
    public void getQueryProcessDefinit() {
        List<ProcessDefinition> list = processEngine.getRepositoryService().createProcessDefinitionQuery().orderByProcessDefinitionVersion().asc().list();
        for (ProcessDefinition pro : list) {
            System.out.println("************************************");
            System.out.println("Id : " + pro.getId());
            System.out.println("name :" + pro.getName());
            System.out.println("key : " + pro.getKey());
            System.out.println("version : " + pro.getVersion());
            System.out.println("resource : " + pro.getResourceName());
        }

    }

4.删除流程定义

    /**
     * 删除流程
     */
    @Test
    public void deleteDeployment() {
        //使用部署ID,完成删除
        String deploymentId = "1";
        /**
         * 不带级联的删除
         *    只能删除没有启动的流程,如果流程启动,就会抛出异常
         */
//      processEngine.getRepositoryService()//
//                      .deleteDeployment(deploymentId);

        /**
         * 级联删除
         *    不管流程是否启动,都能可以删除
         */
        processEngine.getRepositoryService()//
                .deleteDeployment(deploymentId, true);
        System.out.println("删除成功!");
    }

5.查询最新版本的流程定义

    @Test
    public void findLastVersionProcessDefinition(){
        List<ProcessDefinition> list = processEngine.getRepositoryService()//
                .createProcessDefinitionQuery()//
                .orderByProcessDefinitionVersion().asc()//使用流程定义的版本升序排列
                .list();
        /**
         * Map<String,ProcessDefinition>
         map集合的key:流程定义的key
         map集合的value:流程定义的对象
         map集合的特点:当map集合key值相同的情况下,后一次的值将替换前一次的值
         */
        Map<String, ProcessDefinition> map = new LinkedHashMap<String, ProcessDefinition>();
        if(list!=null && list.size()>0){
            for(ProcessDefinition pd:list){
                map.put(pd.getKey(), pd);
            }
        }
        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());//对应helloworld.bpmn文件中的name属性值
                System.out.println("流程定义的key:"+pd.getKey());//对应helloworld.bpmn文件中的id属性值
                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("#########################################################");
            }
        }
    }

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

    /**
     * 删除 使用流程定义的key
     */
    @Test
    public void deleteByKey() {
        String key = "helloworld";
        List<ProcessDefinition> list = processEngine.getRepositoryService().createProcessDefinitionQuery().processDefinitionKey(key).list();
//        for (ProcessDefinition pd : list) {
//
//        }
        processEngine.getRepositoryService().deleteDeployment(list.get(0).getDeploymentId(), true);
    }

Deployment 部署对象
1、一次部署的多个文件的信息。对于不需要的流程可以删除和修改。
2、对应的表:
act_re_deployment:部署对象表
act_re_procdef:流程定义表
act_ge_bytearray:资源文件表
act_ge_property:主键生成策略表

ProcessDefinition 流程定义
1、解析.bpmn后得到的流程定义规则的信息,工作流系统就是按照流程定义的规则执行的。

上一篇下一篇

猜你喜欢

热点阅读