构成
主要就是2部分
1.xml解析器
解析标准流程图 加上 一些 actviti 自定义的标签和属性
图是这样

文本打开是这样

-
一堆自动生成的表 28个 act_开头的
有28个表 但是只提供了没几个service, 对这些表操作
目的
用activiti的目的是 把流程, 和业务对象的状态解耦
原来我们做一个对象的流程 一般会在对象里面弄个状态属性status, 然后 在具体的各个业务代码里面去改这个status,
比如 一个请假,在申请人写好请假单时状态是1, 提交这个请假申请改成2, 直属领导审批通过改成3,经理审批通过改成4,人事归档改成5....... 诸如此类, 对象的状态改变 和 其他具体业务代码的混在一起的, 如果要改需求, 比如请假2天一下 只要直属领导审批 就要深入请假service去改
但是如果用activiti 就只要部署新画的流程图就行了,代码完全不用改,
请假表里面可以去掉status这列
一般情况下

流程图的 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 得到我的流程图(流程定义)

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



流程定义: 就是请假流程
流程实例: 就是 一次真正的请求
3.查询到某人的待办任务

public List<Task> getActiveTasksByUser(String user) {
List<Task> tasks = taskService.createTaskQuery().taskCandidateUser(user).active().list();
return tasks;
}
用户打开页面就可以看到自己 已经轮到做的用户任务
4. 用户完成一个任务
用户点击或者填表后把数据返回后端,
taskService.complete(任务id, 用户传入的参数);

这里不会再校验用户是不是xml里面定义这个任务候选人,
参数会决定箭头的走向
做额外的事情: 监听



网友评论