activiti(gold_axe)

构成

主要就是2部分

1.xml解析器
解析标准流程图 加上 一些 actviti 自定义的标签和属性
图是这样


activiti(gold_axe)_第1张图片

文本打开是这样


activiti(gold_axe)_第2张图片
  1. 一堆自动生成的表 28个 act_开头的


    activiti(gold_axe)_第3张图片

    有28个表 但是只提供了没几个service, 对这些表操作

目的

用activiti的目的是 把流程, 和业务对象的状态解耦

原来我们做一个对象的流程 一般会在对象里面弄个状态属性status, 然后 在具体的各个业务代码里面去改这个status,
比如 一个请假,在申请人写好请假单时状态是1, 提交这个请假申请改成2, 直属领导审批通过改成3,经理审批通过改成4,人事归档改成5....... 诸如此类, 对象的状态改变 和 其他具体业务代码的混在一起的, 如果要改需求, 比如请假2天一下 只要直属领导审批 就要深入请假service去改

但是如果用activiti 就只要部署新画的流程图就行了,代码完全不用改,
请假表里面可以去掉status这列

一般情况下


activiti(gold_axe)_第4张图片
这是idea里面

流程图的 bpm.xml文件 可以用插件拖拉 来生, 不用手改xml

service

以下这几个service 就提供对activiti的表 操作的

    private RuntimeService runtimeService;

    private RepositoryService repositoryService;

    private IdentityService identityService;

    private TaskService taskService;

    private ApplicationDao applicationDao;

    private ProcessEngine processEngine;

主要用这3个:

  • repositoryService 用于部署 流程定义
  • taskService 用于查询和完成任务 和放参数到任务或者整个流程实例里面
  • runtimeService 用于 对流程实例的操作: 用一个流程定义开始一个流程实例 , 查询流程实例,把参数放入流程实例

使用

1. 部署: 让activiti 得到我的流程图(流程定义)

activiti(gold_axe)_第5张图片

repositoryService
向repositoryService传入流程定义 来部署流程(就是存要用的一个流程定义到act_前缀的表)
传入的流程定义可以是我画好的流程图文件, 可以是输入流, 也可以是人工填充的modle对象

2. 开始一个流程实例

runtimeService.startxxxx 来开始一个流程实例


activiti(gold_axe)_第6张图片
activiti(gold_axe)_第7张图片
activiti(gold_axe)_第8张图片

流程定义: 就是请假流程
流程实例: 就是 一次真正的请求

3.查询到某人的待办任务

activiti(gold_axe)_第9张图片
    public List getActiveTasksByUser(String user) {
        List tasks = taskService.createTaskQuery().taskCandidateUser(user).active().list();
        return tasks;
    }

用户打开页面就可以看到自己 已经轮到做的用户任务

4. 用户完成一个任务

用户点击或者填表后把数据返回后端,

taskService.complete(任务id, 用户传入的参数);
activiti(gold_axe)_第10张图片

这里不会再校验用户是不是xml里面定义这个任务候选人,
参数会决定箭头的走向

做额外的事情: 监听

activiti(gold_axe)_第11张图片

activiti(gold_axe)_第12张图片

你可能感兴趣的:(activiti(gold_axe))