Activiti入门案例 一、流程定义 二、部署流程定义 三、启动一个流程实例 四、任务查询 五、任务处理 六、查看历史任务

Activiti-Designer 使用

  Palette(画板)

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

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

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

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

1、新建流程(IDEA 工具)

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

  Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务

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

  Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务

3、生成流程图

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

    Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务

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

    Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务

    Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务

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

    Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务

注意:

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

-Dfile.encoding=UTF-8

  Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务

二、部署流程定义

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

1、使用ProcessEngine创建RepositoryService

Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务
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());
    }
}
Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务

 2、执行操作控制台效果

  Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务

 3、数据库展示

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

  Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务

三、启动一个流程实例

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

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

1、代码实现

Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务
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());
    }
}
Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务

2、执行操作控制台效果

  Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务

 3、数据库展示

  Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务

四、任务查询

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

1、代码实现

Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务
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());

        }
    }
}
Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务

2、执行操作控制台效果

  Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务

3、数据库

  Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务

五、任务处理

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

1、代码实现

Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务
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");
    }
}
Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务

2、执行操作控制台效果

  Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务

3、数据库展示

  Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务

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

  Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务

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

  Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务

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

  Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务

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

  Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务

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

  Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务

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

  Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务

 10、至此流程结束

六、查看历史任务

1、代码实现

Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务
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("==============================");
        }
    }
}
Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务

2、控制台效果

  Activiti入门案例
一、流程定义
二、部署流程定义
三、启动一个流程实例
四、任务查询
五、任务处理
六、查看历史任务