zoukankan      html  css  js  c++  java
  • Activiti使用步骤 (IDEA)

    一.Activiti7体系架构

            通过加载activiti.cfg.xml文件得到ProcessEngineConfiguration对象,通过ProcessEngineConfiguration对象可以得到ProcessEngine对象
            得到该对象后,可以通过流程引擎对象ProcessEngine来得到各种Service,每一种Service接口有每个用途
                RepositoryService    activiti 的资源管理类
                RuntimeService        activiti 的流程运行管理类
                TaskService            activiti 的任务管理类
                HistoryService        activiti 的历史管理类
                ManagerService        activiti 的引擎管理类
                    

    二.Activiti使用步骤

            1.流程定义
                使用Activiti Designer工具创建流程图
                
                新建一个BPMNFile流程图,可更改该流程图的 ID 和每个任务环节的 执行人,流程图就是一个xml文件,每一个流程需要生成一张流程图保存,

       
                

        

      首先将.bpmn文件改为.xml文件
      然后右键该xml文件Diagrams--->show BPMN 2.0 Designer就能生成一张流程图,

      将流程图导出保存到项目对应目录即可,然后将xml改回bpmn即可


                
                
            2.流程部署
                需要将流程部署到Activiti当中,代表当前有该流程

        /**
         * 流程部署
         * `act_ge_bytearray` 流程定义的资源信息,包含bpmn和png流程文件信息
         * `act_re_deployment` 流程部署信息,包含流程名称,ID,Key等
         * `act_re_procdef` 流程定义信息
         */
        @Test
        public void deployment() {
            //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取RepositoryService对象进行流程部署
            RepositoryService repositoryService = processEngine.getRepositoryService();
            //进行部署,将对应的流程定义文件生成到数据库当中,作为记录进行保存
            Deployment deployment = repositoryService.createDeployment()
                    .addClasspathResource("bpmn/holiday.bpmn")     //加载流程文件
                    .addClasspathResource("bpmn/holiday.png")
                    .name("请假流程")       //设置流程名称
                    .key("holidayKey")
                    .deploy();              //部署
    
            //输出部署信息
            System.out.println("流程名称:" + deployment.getName());
            System.out.println("流程ID:" + deployment.getId());
            System.out.println("流程Key:" + deployment.getKey());
        }

     

     

     

            3.创建流程实例
                流程定义相当于类
                流程实例相当于类的实例(对象)
                

    /**
         * 启动流程实例
         * `act_hi_actinst`  已开始和执行完毕的活动信息
         * `act_hi_identitylink`    历史参与者信息
         * `act_hi_procinst`        流程实例信息
         * `act_hi_taskinst`        历史任务实例
         * act_ru_execution        任务执行信息
         * act_ru_identitylink     当前任务参与者
         * `act_ru_task`            任务信息
         */
        @Test
        public void startInstance() {
            //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取到RuntimeService对象
            RuntimeService runtimeService = processEngine.getRuntimeService();
            //创建流程实例
            ProcessInstance holiday = runtimeService.startProcessInstanceByKey("myProcess_1");//红字是流程图的key值
            //输出实例信息
            System.out.println("流程部署ID:" + holiday.getDeploymentId());
            System.out.println("流程实例ID:" + holiday.getId());
            System.out.println("活动ID:" + holiday.getActivityId());
        }

     执行效果:

    `act_hi_actinst` 已开始和执行完毕的活动信息

    `act_hi_identitylink` 历史参与者信息

     

     `act_hi_procinst` 流程实例信息


    `act_hi_taskinst` 历史任务实例


    * act_ru_execution 任务执行信息

     
    * act_ru_identitylink 当前任务参与者


    * `act_ru_task` 任务信息


            4.用户查询代办任务

    /**
         * 查看代办任务
         */
        @Test
        public void getTask() {
            //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取一个TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //查询代办业务 createTaskQuery查询任务   taskCandidateOrAssigned查询任务执行者   processDefinitionKey:查询流程
            /**
             * taskCandidateOrAssigned匹配规则:1.Assigned   2.配置bpmn文件中定义的值
             * taskAssignee匹配规则:1.Assigned
             */
            /*List<Task> list = taskService.createTaskQuery().taskCandidateOrAssigned("lisi").processDefinitionKey("holiday").list();*/
            List<Task> list = taskService.createTaskQuery().taskAssignee("zhangsan").processDefinitionKey("myProcess_1").list();
            //分页:List<Task> list = taskService.createTaskQuery().taskAssignee("zhangsan").processDefinitionKey("holiday").listPage(i,j);
            for (Task task : list) {
                System.out.println("任务名称:" + task.getName());
                System.out.println("任务执行人:" + task.getAssignee());
                System.out.println("任务ID:" + task.getId());
                System.out.println("流程实例ID:" + task.getProcessInstanceId());
            }
        }

     
            
            5.用户进行任务处理

    /**
         * 任务处理:当所有任务处理完毕,对应当前流程实例信息删除,但是可以在历史中查看到该信息
         */
        @Test
        public void completeTask() {
            //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取一个TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //任务处理
            taskService.complete("2505");
            
        }

    先查看代办任务,再调用 taskService.complete(); 方法传入代办ID

    任务就被处理掉了

    上一步zhangsan被处理掉了,没有了代办任务,再查找zhangsan的下一步,lisi的代办任务

     发现lisi有了代办任务,数据库表也更新了

     处理完所有流程后ru表就为空了,数据都保存到了hi历史表

     


            6.流程结束
            
            7.当业务流程结束后通过历史可以查看到已经走完的流程
             

    /**
         * 查看历史任务
         */
        @Test
        public void getHistory() {
            //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取HistoryService接口
            HistoryService historyService = processEngine.getHistoryService();
            //获取历史任务
            HistoricActivityInstanceQuery historicActivityInstanceQuery = historyService.createHistoricActivityInstanceQuery();
            //获取指定流程实例的任务
            historicActivityInstanceQuery.processInstanceId("2501");
            //获取任务列表
            List<HistoricActivityInstance> list = historicActivityInstanceQuery.list();
            for (HistoricActivityInstance ai : list) {
                System.out.println("任务节点ID:"+ai.getActivityId());
                System.out.println("任务节点名称:"+ai.getActivityName());
                System.out.println("流程实例ID信息:"+ai.getProcessDefinitionId());
                System.out.println("流程实例ID信息:"+ai.getProcessInstanceId());
                System.out.println("==============================");
            }
        }

  • 相关阅读:
    JavaScript算法系列之-----------------斐波那契数列(JS实现)
    js中Math.max()求取数组中最大值
    JavsScript中比较大小总结---基于sort()方法
    前端技能大挑战-3(修改this指向)
    前端技能大挑战-2(数组去重)
    前端技能大挑战-1(驼峰命名)
    JavaScript算法系列之-----------------链表反转(JS实现)
    JavaScript算法系列之-----------------字符串排列(JS实现)
    JavaScript算法系列之-----------------替换空格(JS实现)
    JavaScript算法系列之-----------------二维数组中的查找(JS实现)
  • 原文地址:https://www.cnblogs.com/chx9832/p/12612252.html
Copyright © 2011-2022 走看看