• Activiti7 基本架构与使用步骤(一)


    感觉跟activiti6差不多,不过7中删除了两个service(IdentityService、FormService),反而又多了两个表。这里所有输出的信息都是以后可以放在前端里的信息。


    1.Activiti的架构说明

    ProcessEngineConfiguration类,主要作用是加载activiti.cfg.xml配置文件

    ProcessEngine类 作用是帮助我们可以快速得到各个Service接口,并且可以生成activiti的工作环境 25张表生成

    Service接口          作用:可以快速实现数据25张表的操作。

          RepositoryService

             RuntimeService

             TaskService

             HistoryService

    2.用BPMN的ActivitiDesigner插件绘制流程定义图

    3.部署流程定义

    方式一:单个文件(bpmn文件,png文件)

    /**
     * 流程定义的部署
     * 影响的activiti表有哪些
     * act_re_deployment 部署信息
     * act_re_procdef    流程定义的一些信息
     * act_ge_bytearray  流程定义的bpmn文件以及png文件
     */
    public class ActivitiDeployment {
        // 流程定义部署
        public static void main(String[] args){
            //1.创建ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    
            //2.得到RepositoryService实例
            RepositoryService repositoryService = processEngine.getRepositoryService();
    
            //3.进行部署
            Deployment deployment = repositoryService.createDeployment()//创建Deployment对象
                    .addClasspathResource("diagram/holiday.bpmn")//添加bpmn文件
                    .addClasspathResource("diagram/holiday.png")//添加png文件
                    .name("请假申请单流程")
                    .deploy();//部署
    
            //4.输出部署的一些信息
            System.out.println(deployment.getName());
            System.out.println(deployment.getId());
        }
    }

      

    方式二:先将bpmn文件和png文件压缩成zip文件。但是activiti最终也是以单个文件形式保存,说明activiti进行了解压工作。

    /**
     * Zip文件部署流程
     * 影响的activiti表有哪些
     *  act_re_deployment 部署信息
     *  act_re_procdef    流程定义的一些信息
     *  act_ge_bytearray  流程定义的bpmn文件以及png文件
     */
    public class ActivitiZipDeployment {
        // 流程定义部署
        public static void main(String[] args){
            //1.创建ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    
            //2.得到RepositoryService实例
            RepositoryService repositoryService = processEngine.getRepositoryService();
            
            //3.转换出ZipInputStream流对象
            InputStream is = ActivitiZipDeployment.class.getClass().getClassLoader().getResourceAsStream("holidayBPMN.zip");
    
            //将InputStream流转化为ZipInputStream
            ZipInputStream zipInputStream = new ZipInputStream(is);
    
            //3.进行部署
            Deployment deployment = repositoryService.createDeployment()//创建Deployment对象
                    .addZipInputStream(zipInputStream)
                    .name("请假申请单流程")
                    .deploy();//部署
    
            //4.输出部署的一些信息
            System.out.println(deployment.getName());
            System.out.println(deployment.getId());
        }
    }

    4.启动流程实例:

    /**
     * 启动流程实例:
     *      前提是先已经完成流程定义的部署工作
     *
     *      背后影响的表:
     *      act_hi_actinst      已完成的活动信息
     *      act_hi_identitylink   参与者信息
     *      act_hi_procinst     流程实例
     *      act_hi_taskinst     任务实例
     *      act_ru_execution    执行表
     *      act_ru_identitylink   参与者信息
     *      act_ru_task   任务表
     */
    public class ActivitiStartInstance {
        public static void main(String[] args) {
            //1.得到ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //2.得到RunService对象
            RuntimeService runtimeService = processEngine.getRuntimeService();
            //3.创建流程实例(关键步骤)即 启动流程实例
            //需要知道流程定义的Key:holiday(找key的方法  1:bpmn文件中的id,它对应的值就是key
            // 2:直接看数据库中流程定义表act_re_procdet的key值)
            ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holiday");
            //4.输出实例的相关信息
            System.out.println("流程部署ID="+processInstance.getDeploymentId());//null
            System.out.println("流程定义ID="+processInstance.getProcessDefinitionId());//holiday:1:4
            System.out.println("流程实例ID="+processInstance.getId());//2501
            System.out.println("流程活动ID="+processInstance.getActivityId());//获取当前具体执行的某一个节点的ID(null)
    
        }
    }

    5.查看任务

    TaskService    taskService.createTaskQuery()

    /**
     * 查询当前用户的任务列表
     */
    public class ActivitiTaskQuery {
        //lisi完成自己任务列表的查询
        public static void main(String[] args) {
            //1.得到ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    
            //2.得到TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //3.根据流程定义的key以及负责人assignee来实现当前用户的任务列表查询
            List<Task> taskList = taskService.createTaskQuery()
                    .processDefinitionKey("holiday")
                    .taskAssignee("lisi")
                    .list();//这里还有一个查询唯一结果的方法:singleResult();、还有分页查询listPage(index,limit);
            //4.任务列表展示
            for (Task task : taskList) {
                //查的act_hi_procinst表的id
                System.out.println("流程实例ID="+task.getProcessInstanceId());
                //查的act_hi_taskinst表的id
                System.out.println("任务ID="+task.getId());
                //查的act_hi_taskinst表的Assignee_
                System.out.println("任务负责人名称="+task.getAssignee());
                //查的act_hi_taskinst表的NAME_
                System.out.println("任务名称="+task.getName());
            }
        }
    }

    6.完成任务

    TaskService    taskService.complete(task.getId());//参数为任务ID

    /**
     * 处理当前用户的任务列表
     *  背后操作到的表:
     *           act_hi_actinst
     *           act_hi_identitylink
     *           act_hi_taskinst
     *           act_ru_execution
     *           act_ru_identitylink
     *           act_ru_task //只放当前要执行的任务
     */
    public class ActivitiCompleteTask {
        /**
         * 李四完成自己的任务
         * @param args
         */
        public static void main(String[] args) {
            //1.得到ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    
            //2.得到TaskService对象
            TaskService taskService = processEngine.getTaskService();
    
            //3.处理任务,结合当前用户任务列表的查询操作的话,可以知道任务ID=5002(实际操作中应该与查询写在一起)
            taskService.complete("5002");
        }
    }

  • 相关阅读:
    VLC在web系统中应用(xvlcplugin 即如何把VLC嵌入HTML中)
    mysql in 排序
    EditPlus v3.31 注册码
    UTF8编码判断
    zend framework 获取邮箱内容 编码转换 quoted_printable_decode | base64_decode
    String path = request.getContextPath(....拼装当前网页的相对路径
    【转】input中id和name的区别
    JSON基础知识
    【转】 jdbc.properties
    JSP页面传值乱码过滤
  • 原文地址:https://www.cnblogs.com/xk920/p/10904303.html
Copyright © 2020-2023  润新知