zoukankan      html  css  js  c++  java
  • Activiti工作流(二)——入门Demo及数据库

      上篇博客简单介绍了Activiti流程图的使用,这篇博客我们就根据这个流程图来完成这一个流程。
     下图是Activiti的系统服务结构图,在后面的流程中,我们会用到其中的功能组件,如RepositoryService、RuntimeService、TaskService等等。

    这里写图片描述


    首先回顾下流程图:

    这里写图片描述

     每个流程大致要经过这几个阶段:部署流程定义、启动流程实例和完成。
    这里写图片描述

    1、部署

    //获取默认的流程引擎,加载默认配置文件activiti.cfg.xml
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    
        /**
         * 部署流程定义
         * 
         */
        @Test
        public void deploymentProcessDefinition() {
            //
            Deployment deployment = processEngine.getRepositoryService()// 与流程定义和部署对象相关的Service
                    .createDeployment()// 创建一个部署对象
                    .name("hello审批")// 添加部署名称
                    .addClasspathResource("diagrams/hello.bpmn") // 从classpath资源中加载,一次只加载一个文件
                    .addClasspathResource("diagrams/hello.png").deploy();// 完成部署
            System.out.println("deploymentId:" + deployment.getId());
            System.out.println("deployment名称:" + deployment.getName());
    
        }

    Console Output
    deploymentId:3601
    deployment名称:hello审批

    RepositoryService负责管理和控制发布包和流程定义的操作,上面的例子是部署流程定义的使用实例。部署信息会存储到数据库中的act_re_deployment,act_re_procdef,act_ge_bytearray表中。

    查询act_re_deployment表:

    这里写图片描述

    2、启动

    /**
         * 启动流程实例
         */
        @Test
        public void startProcessInstance() {
            //流程定义key
            String processDefinitionKey = "hello";  
            // 与正在执行的流程实例和执行对象相关的Service
            ProcessInstance processInstance = processEngine.getRuntimeService()
                    // 使用流程定义的key,key对应hello.bpmn文件中id值,默认按照最新版本的流程定义启动
                    .startProcessInstanceByKey(processDefinitionKey);
            System.out.println("启动流程实例id:" + processInstance.getId());//401
            System.out.println("流程定义id:" + processInstance.getProcessDefinitionId());//304
        }

    Console Output
    启动流程实例id:3701
    流程定义id:hello:2:3604

    RuntimeService 运行时的服务,负责启动流程定义的实例、获取保存流程变量等操作。

    此时,查询act_ru_execution,act_ru_task,act_hi_procinst,act_hi_taskinst等表都有数据产生,具体区别稍后分析。

    3、完成

    /**
         * 完成我的任务
         */
        @Test
        public void completeMyTask() {
            String taskId = "3704"; //act_ru_task表的id
            processEngine.getTaskService().complete(taskId);
            System.out.println("完成任务,id" + taskId);
        }

    完成任务,id3704

    TaskService 所有与任务相关的功能都由他负责,包括查询、完成等操作。

    现在,流程到达审批【部门经理】节点。

    这里写图片描述

    部门经理审批人为小李,小李即可查询个人任务,但提交申请的小王则不可以查到。

    /**
         * 查询个人当前任务
         */
        @Test
        public void findMyTask() {
            String assignee = "小李";
            List<Task> list = processEngine.getTaskService()// 与个人任务相关
                    .createTaskQuery() // 创建任务查询对象
                    .taskAssignee(assignee) // 指定办理人
                    .list(); // 列表集合
    
            if (list != null && list.size() > 0) {
                for (Task task : list) {
                    System.out.println("任务id" + task.getId());
                    System.out.println("任务名称" + task.getName());
                    System.out.println("任务办理人" + task.getAssignee());
                    System.out.println("任务实例id" + task.getProcessInstanceId());
                }
            }
        }
    

    任务id3802
    任务名称审批【部门经理】
    任务办理人小李
    任务实例id3701

    上面提到TaskService,所以查询也使用TaskService来操作。具体操作的表是act_ru_task.


        这个小demo中简单介绍了几张常用的表,下图是具体的分类介绍。
       图中是对表进行的分类,拼接他们的缩写形成的表名,例如act_ru_task, act_id_user等等

    这里写图片描述

      运行时的库runtime中存放的是临时数据,类似临时的表。在activiti中,一般是执行RuntimeService操作后产生的。在一个实例执行完成后,runtime中数据清空,这时如果要查看,就只能从历史库中去查了。

      如果说runtime是动态表的话,那么与他对应的就是repository这类表了。带_re前缀的表存放的是静态信息,包括流程定义、图片等。

      组织机构表就很好理解了,不过activiti库中提供的字段比较少,一般开发中用业务中的表比较多。

  • 相关阅读:
    【python】带图片验证码的登录自动化实战
    【Python】输入一个整数N,求1到N个整数的十进制表示中某个字符出现的次数
    【Python】input()与sys.stdin()使用比较
    【Python】爬虫之使用etree进行xpath元素定位
    python:读取数据库+图片上增加文字
    H5介绍与测试设计
    【OpenCV-Python:实现人脸、人眼、嘴巴识别】实战(一)
    ASCII、Unicode、GBK和UTF-8字符编码的区别联系
    Python基础语法学习笔记
    Python基础知识符和操作符_学习笔记
  • 原文地址:https://www.cnblogs.com/saixing/p/6730241.html
Copyright © 2011-2022 走看看