1.认识activiti

     activiti是一种工作流的实现框架;Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。

activiti中的核心API

   ①ProcessEngine(核心--服务大管家)

   ②RepositoryService(重要--规则相关)

   ③RuntimeService(重要--运行时)

   ④TaskService(重要--针对人工任务)

   ⑤ProcessDefinition(流程定义【规则】对象)

   ⑥ProcessInstance(流程实例)

2.前期准备安装Activiti+核心对象。

    2.1.安装Activiti

       把Activiti插件引入到eclipse中。

       步骤1:解压你下载的activiti-eclipse-plugin5.16.rar

       步骤2:把压缩包中的内容放入eclipse根目录的dropins文件夹下

         

        

       步骤3:重启eclipse,点击新建工程new->Other…打开面板,如果看到下图内容

            

         说明安装成功

    2.2.导包

       导入你下载的Activiti的压缩包,找到wars,把后缀改为.zip,然后解压,在wars中有WEB-INF下面的lib,里面的jar包全部复制导入在eclipse项目中。

    3.3.测试

        获取一下核心对象,打印一下

        @Test
    public void testConnect3() throws Exception {
        // 核心对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        System.out.println(processEngine);
    }

3.使用Activiti

      3.1绘制流程--定义(规则)流程

      通过eclipese插件绘制流程,会产生两个文件:bpmn(流程定义文件),png(流程图);

       

   3.2.流程定义(规则)管理--核心(ProcessDefinition)

      3.2.1、部署流程

       @Test
    public void testDeloy() throws Exception {
        // 获取核心对象 服务大管家
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
        // RepositoryService 仓库
        RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
        // 获取流程发布对象
        DeploymentBuilder createDeployment = repositoryService.createDeployment();
        // 上传资源
        createDeployment.addClasspathResource("MyProcess.bpmn");
        createDeployment.addClasspathResource("MyProcess.png");
        createDeployment.name("xxx");
        // 部署发布
        Deployment deploy = createDeployment.deploy();
        System.out.println(deploy);
    }

       3.2. 2、流程定义列表查询

       // 查询流程定义信息列表
    @Test
    public void testQueryProcessDef() throws Exception {
        // 获取核心对象 服务大管家
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
        // RepositoryService 仓库
        RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
         // 获取查询对象
         ProcessDefinitionQuery createProcessDefinitionQuery = repositoryService.createProcessDefinitionQuery();
        // 设置查询条件
         //createProcessDefinitionQuery.listPage(firstResult, maxResults)
         List<ProcessDefinition> list = createProcessDefinitionQuery.list();
        for (ProcessDefinition pd : list) {
            System.out.println(pd);
        }
    }

         3.2. 3、删除流程(删除部署,流程的挂起和激活)

         // 删除部署(物理删数-真删)
    @Test
    public void testdeleteDeloy() throws Exception {
        // 获取核心对象 服务大管家
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
        // RepositoryService 仓库
        RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
        repositoryService.deleteDeployment("2501");
        System.out.println();
    }
    
    // 假删除部署 (挂起和激活)
    @Test
    public void testUpdateDeleteDeloy() throws Exception {
        // 获取核心对象 服务大管家
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
        // RepositoryService 仓库
        RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
        // 挂起
        //repositoryService.suspendProcessDefinitionByKey("myProcess");
        // 激活
        repositoryService.activateProcessDefinitionByKey("myProcess");
    }

  3.2. 4、查看规则流程图

    // 显示流程图片
    @Test
    public void testShowPng() throws Exception {
        // 获取核心对象 服务大管家
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
        // RepositoryService 仓库
        RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
        // web项目输出到浏览器的输入流
        // 模拟输出本地硬盘
        // 获取png图片
        String deploymentId="5001";
        String resourceName="MyProcess.png";
        // 获取输入的流对象 读的字节
        InputStream resourceAsStream = repositoryService.getResourceAsStream(deploymentId, resourceName);
        //模拟输出本地硬盘
        IOUtils.copy(resourceAsStream, new FileOutputStream("d:/a.png"));
    }
 3.3流程运行时管理--核心(ProcessInstance)

     3.3.1、启动流程

      // 启动流程实例
    @Test
    public void testStartInstance() throws Exception {
        // 获取核心对象 服务大管家
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
        // runtimeService 运行
        RuntimeService runtimeService = defaultProcessEngine.getRuntimeService();
        // 根据流程的定义key启动
        ProcessInstance startProcessInstanceByKey = runtimeService.startProcessInstanceByKey("myProcess");
        System.out.println(startProcessInstanceByKey);
    }

     3.3. 2、查看任务

        // 获取任务列表
    @Test
    public void testQueryTask() throws Exception {
        // 获取核心对象 服务大管家
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
        // TaskService 任务
        TaskService taskService = defaultProcessEngine.getTaskService();
        // 获取查询对象
        TaskQuery createTaskQuery = taskService.createTaskQuery();
        List<Task> list = createTaskQuery.list();
        for (Task task : list) {
            System.out.println(task);
        }
    }

             ① 私有任务

           // 获取某个人的任务列表
    @Test
    public void testQueryTaskByName() throws Exception {
        // 获取核心对象 服务大管家
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
        // TaskService 任务
        TaskService taskService = defaultProcessEngine.getTaskService();
        // 获取查询对象
        TaskQuery createTaskQuery = taskService.createTaskQuery();
        // 设置查询条件
        createTaskQuery.taskAssignee("ls");
        List<Task> list = createTaskQuery.list();
        for (Task task : list) {
            System.out.println(task);
        }
    }

              ②公共任务

          // 添加发布部署
    @Test
    public void testDeloy() throws Exception {
        // 获取核心对象 服务大管家
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
        // RepositoryService 仓库
        RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
        // 获取流程发布对象
        DeploymentBuilder createDeployment = repositoryService.createDeployment();
        // 上传资源
        createDeployment.addClasspathResource("codeProcess.bpmn");
        createDeployment.addClasspathResource("codeProcess.png");
        createDeployment.name("开发任务");
        // 部署发布
        Deployment deploy = createDeployment.deploy();
        System.out.println(deploy);
    }

       3.3.3、认领任务

       // 认领公有任务
    @Test
    public void testCaimTask() throws Exception {
        // 获取核心对象 服务大管家
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
        // TaskService 任务
        TaskService taskService = defaultProcessEngine.getTaskService();
        // 完成任务
        String taskId = "2504";
        String userId="zs";
        // 要
        taskService.claim(taskId, userId);
    }

       3.3.4、完成任务   

// l办理完成任务 私有任务
    @Test
    public void testlsCompleTaskByName() throws Exception {
        // 获取核心对象 服务大管家
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
        // TaskService 任务
        TaskService taskService = defaultProcessEngine.getTaskService();
        // 完成任务
        String taskId = "12502";
        taskService.complete(taskId);

    }

       3.3.5、查看流程状态

         

// 查询流程是否结束
    @Test
    public void testIsEnd() throws Exception {
        // 获取核心对象 服务大管家
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
        // RuntimeService 运行
        RuntimeService runtimeService = defaultProcessEngine.getRuntimeService();
        // 查询对象
        ProcessInstanceQuery createProcessInstanceQuery = runtimeService.createProcessInstanceQuery();
        // 根据id
        ProcessInstance singleResult = createProcessInstanceQuery.processInstanceId("2501").singleResult();
        // 如果singleResult找到说明流程还没有结束
        if (singleResult != null) {
            System.out.println("流程未结束或不存在");
        } else {
            System.out.println("流程结束");
        }

    }

4.history查看历史

// 有多少次执行这个实例流程(也就是有多少人离职)
    @Test
    public void queryHisprocessdef() {
        // 获取核心对象 服务大管家
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
        // 获取历史服务
        HistoryService historyService = defaultProcessEngine.getHistoryService();
        // 获取查询对象
        HistoricProcessInstanceQuery createHistoricProcessInstanceQuery = historyService
                .createHistoricProcessInstanceQuery();
        // 设置查询条件
        createHistoricProcessInstanceQuery.processDefinitionKey("myProcess");
        // 获取列表
        List<HistoricProcessInstance> list = createHistoricProcessInstanceQuery.list();
        System.out.println("离职人数:" + list.size());
    }

以上就是Activiti的五个最重要的功能,按照以上步骤,可以基本完成一个基本的工作流程了;

最后给大家安利一个非常好用的反编译插件,为了我们能更好的研究源码,我把其他反编译工具封装成eclipse的插件了

在下方评论找我要插件哦!

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐