zoukankan      html  css  js  c++  java
  • Activiti入门案例

    一、流程定义

    Activiti-Designer 使用

      Palette(画板)

        在eclipse 或 idea 中安装activiti-designer 插件即可使用,画板中包括以下结点:

        Connection—连接Event---事件Task---任务Gateway---网关Container—容器

        Boundary event—边界事件Intermediate event- -中间事件

        流程图设计完毕保存生成.bpmn 文件。

    1、新建流程(IDEA 工具)

      首先选中存放图形的目录(本次我们选择resources 下的bpmn  目录),点击菜单:New-BpmnFile,如下图所示:

      

    2、创建hoilday.bpmn,绘制流程

      

    3、生成流程图

      ①首先将.bpmn文件改为.xml文件

        

      ②然后右键该xml文件Diagrams--->show BPMN 2.0 Designer就能生成一张流程图,将流程图导出保存到项目对应目录即可

        

        

      ③然后将.xml改回.bpmn即可

        

    注意:

      流程图生成前须设置编码格式然后重启IDEA!!!

    -Dfile.encoding=UTF-8

      

    二、部署流程定义

      部署流程定义就是要将上边绘制的图形即流程定义(.bpmn)部署在工作流引擎activiti中

    1、使用ProcessEngine创建RepositoryService

    复制代码
    package com.zn;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.RepositoryService;
    import org.activiti.engine.repository.Deployment;
    import org.junit.Test;
    
    public class ActivitiTest {
    
        /*流程部署
         * `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("bpmnFiles/holiday.bpmn")
                    .addClasspathResource("bpmnFiles/holiday.png")
                    //设置流程名称
                    .name("请假流程")
                    .key("holidayKey")
                    //部署
                    .deploy();
            //输出部署信息
            System.out.println("流程名称:"+deployment.getName());
            System.out.println("流程ID:"+deployment.getId());
            System.out.println("流程Key:"+deployment.getKey());
        }
    }
    复制代码

     2、执行操作控制台效果

      

     3、数据库展示

      执行操作后activiti会将上边代码中执行的bpmn文件和图片文件保存在activiti数据库中;

      

    三、启动一个流程实例

      流程定义部署在activiti后就可以通过工作流管理业务流程了,也就是说上边部署的请假申请流程可以使用了;

      针对该流程,启动一个流程表示发起一个新的请假申请单,这就相当于java类与java对象的关系,类定义好后需要new创建一个对象使用,当然可以new多个对象;对于请假申请流程,张三发起一个请假申请需要启动一个流程实例,请假申请单发起一个请假单也需要启动一个流程实例;

    1、代码实现

    复制代码
    package com.zn;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.RepositoryService;
    import org.activiti.engine.RuntimeService;
    import org.activiti.engine.repository.Deployment;
    import org.activiti.engine.runtime.ProcessInstance;
    import org.junit.Test;
    
    public class ActivitiTest {
        
        /**
         * 启动流程实例
         * `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("holiday");
            //输出实例信息
            System.out.println("流程部署ID:"+holiday.getDeploymentId());
            System.out.println("流程实例ID:"+holiday.getId());
            System.out.println("活动ID:"+holiday.getActivityId());
        }
    }
    复制代码

    2、执行操作控制台效果

      

     3、数据库展示

      

    四、任务查询

      流程启动后,各个任务的负责人就可以查看自己当前需要处理的任务,查询出来的任务都是该用户的代办任务;

    1、代码实现

    复制代码
    package com.zn;
    
    import org.activiti.engine.*;
    import org.activiti.engine.history.HistoricActivityInstance;
    import org.activiti.engine.history.HistoricActivityInstanceQuery;
    import org.activiti.engine.repository.Deployment;
    import org.activiti.engine.runtime.ProcessInstance;
    import org.activiti.engine.task.Task;
    import org.junit.Test;
    
    import java.util.List;
    
    public class ActivitiTest {
    
        /**
         * 查看代办任务
         */
        @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("zhangsan").processDefinitionKey("holiday").list();
            //taskAssignee查看当前指定人的指定任务
            List<Task> list = taskService.createTaskQuery().taskAssignee("lisi").processDefinitionKey("holiday").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());
    
            }
        }
    }
    复制代码

    2、执行操作控制台效果

      

    3、数据库

      

    五、任务处理

      任务负责人查询代办任务,选择任务进行处理,完成任务;

    1、代码实现

    复制代码
    package com.zn;
    
    import org.activiti.engine.*;
    import org.activiti.engine.repository.Deployment;
    import org.activiti.engine.runtime.ProcessInstance;
    import org.activiti.engine.task.Task;
    import org.junit.Test;
    
    import java.util.List;
    
    public class ActivitiTest {
    
        /*任务处理
         * `act_hi_identitylink`     历史参与者信息
         * `act_hi_taskinst`         历史任务信息
         * `act_ru_execution`        任务执行信息
         * `act_ru_task`             任务信息
         * 当所有任务处理完毕,对应当前流程实例信息删除,但是可以在历史中查看该信息
         * */
        @Test
        public void completeTask(){
            //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取一个TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //任务处理
            taskService.complete("35005");
        }
    }
    复制代码

    2、执行操作控制台效果

      

    3、数据库展示

      

     4、任务查询(经理审批)控制台效果

      

     5、任务处理(经理审批)后数据库显示

      

     6、任务查询(总经理审批)控制台效果

      

     7、再次任务处理(总经理审批)后数据库显示

      

     8、任务查询(人事审批)控制台效果

      

     9、再次任务处理(人事审批)后数据库显示

      

     10、至此流程结束

    六、查看历史任务

    1、代码实现

    复制代码
    package com.zn;
    
    import org.activiti.engine.*;
    import org.activiti.engine.history.HistoricActivityInstance;
    import org.activiti.engine.history.HistoricActivityInstanceQuery;
    import org.activiti.engine.repository.Deployment;
    import org.activiti.engine.runtime.ProcessInstance;
    import org.activiti.engine.task.Task;
    import org.junit.Test;
    
    import java.util.List;
    
    public class ActivitiTest {
    
        /**
         * 查看历史任务
         */
        @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("35001");
            //获取任务列表
            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("==============================");
            }
        }
    }
    复制代码

    2、控制台效果

      

  • 相关阅读:
    筛选法求素数
    C/C++经典面试题目
    操作系统笔试面试基本内容
    Win32/MFC的基本概念
    STL采用的标准模板库
    数据结构基本概念
    SQL基础语句
    C/C++基础概念
    计算机网络基础概念
    流水作业 批作业调度
  • 原文地址:https://www.cnblogs.com/mayuan01/p/12616353.html
Copyright © 2011-2022 走看看