Activiti

之前项目用到过Activiti,一直没有深入了解过,面试被问到几次,现在抽时间研究研究。

1. 数据库表
28张表
act_evt_log:事件表(event)-EventLogEntry
act_ge前缀:通用表(general)
act_hi前缀:历史表(history)-HistoryService
act_id前缀:身份表(identity)-IdentityService
act_procdef_info:流程定义(processDefinition)
act_re前缀:储存表(repository)-RepositoryService
act_ru前缀:运行表(runtime)-RuntimeService

2. 底层ORM框架
框架:mybatis
mapping:xml文件路径:org.activiti.db.mapping.entity
建表语句:org.activiti.db.create
DA方式:与我们常用的面向接口编程方式不同,底层不使用Dao接口与Mapper绑定,而是使用SqlSession相关方法,直接调用xml文件内的SQL语句。例如:this.getDbSqlSession().selectList(“selectTaskByQueryCriteria”, taskQuery);
this.sqlSession.selectList(statement, parameter);

3. 流程图定义
idea安装actiBPM插件或者使用其他BPM绘图软件绘制流程图。
activiti-bpmn-layout依赖可以代码生成BPMN文件

4. 流程部署

Deployment deploy = repositoryService.createDeployment()
            .name("apply vacation")
            .key("vacation")
            .addClasspathResource("processes/vacation.bpmn20.xml")
            .deploy();
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
    .deploymentId(deploy.getId())
    .singleResult();

createDeployment()会在act_re_deployment表新增一条数据,
createProcessDefinitionQuery会在act_re_procdef表新增一条数据
5. 流程启动

Map<String, Object> map = new HashMap<>();
map.put("days", apply.getDays());
map.put("manager", user.getId());
map.put("managerTaskListener", new ManagerTaskListener());
ProcessInstance p = runtimeService.startProcessInstanceById(vacation.getProcdefId(), map);

通过流程定义ID启动,得到流程实例ID,同时可以设置启动的相关参数
6. 任务操作

        // 取任务
        Task task = taskService.createTaskQuery()
            .taskAssignee(userId.toString())
            .processInstanceId(pId)
            .singleResult();
        if (task == null) {
            return "任务不存在";
        }
        taskService.setVariable(task.getId(), "任务变量", "hello");
        taskService.setVariable(task.getId(), "任务变量", "hello2");
        taskService.setVariableLocal(task.getId(), "任务变量", "hello3");
        taskService.setAssignee(task.getId(), "1000");
        taskService.complete(task.getId());

7. 删除流程

runtimeService.deleteProcessInstance(task.getProcessInstanceId(), "不通过");

8. Listener

任务可以配置监听器,设置监听事件,比如设置create监听事件,任务创建时触发,需要实现TaskListener接口,并作为参数传递到流程中

9. 变量
setVariable设置的是流程实例级别的变量,随着流程一起存在;
setVariableLocal属于本地变量,对于没有子流程的流程和setVariable一样,对于task来说当task完成,local变量会随之消失

10. 其他
流程图可以使用${}表达式来赋值,流程中的参数会进入流程判断,控制流程走向。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值