准备开发环境
1) JDK1.8
2) 数据库 mysql 5.7
3) activiti 5.22,支持Activiti运行的jar包,可以通过maven依赖引入
4) 开发工具idea
5) 开发架构 springboot 2.0.6.RELEASE
6) 部署环境docker
Activiti表说明
面是概括了几个常用的数据表
流程部署相关表
act_re_deployement 部署对象表
act_rep_procdef 流程定义表
act_ge_bytearray 资源文件表
act_ge_prperty 主键生成策略表(对于部署对象表的主键ID)
流程实例相关表
act_ru_execution 正在执行的执行对象表(包含执行对象ID和流程实例ID,如果有多个线程可能流程实例ID不一样)
act_hi_procinst 流程实例历史表
act_hi_actinst 存放历史所有完成的任务
Task 任务相关表
act_ru_task 代办任务表 (只对应节点是UserTask的)
act_hi_taskinst 代办任务历史表 (只对应节点是UserTask的)
act_hi_actinst 所有节点活动历史表 (对应流程的所有节点的活动历史,从开始节点一直到结束节点中间的所有节点的活动都会被记录)
流程变量表
act_ru_variable 正在执行的流程变量表
act_hi_variable 流程变量历史表
核心API
ProcessEngine
说明:
1) 在Activiti中最核心的类,其他的类都是由他而来。
2) 产生方式
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
3)可以产生RepositoryService
RepositoryService repositoryService =processEngine.getRepositoryService();
4) 可以产生 RuntimeService
RuntimeService runtimeService = processEngine.getRuntimeService();
5) 可以产生TaskService
TaskService taskService =processEngine.getTaskService();
各个Service的作用
RepositoryService | 管理流程定义 |
---|---|
RuntimeService | 执行管理,包括启动,推进,删除流程实例等操作 |
TaskService | 任务管理 |
RepositoryService
Activiti的仓库服务类。所谓的仓库指流程定义文档的两个文件:bpmn文件和流程图片该service可以用来删除部署的流程定义。
RuntimeService
是Activiti的流程执行服务类,可以从这个服务类中获取很多关于流程执行的相关的信息。
TaskService
是Activiti的任务服务类。可以从这个类中获取任务的相关信息,如当前正在执行的个人待办和用户组待办任务。
HistoryService
是Activiti的查询历史信息的类,在一个流程执行完成后,这个对象为我们提供查询历史信息,可以跟踪流程实例对应所有待办节点的运行情况。
ProcessDefinition
流程定义类,可以从这里获得资源文件等。
ProcessInstance
代表流程定义的执行实例,当一个部署的流程图启动后,该流程只有一条流程实例数据,但是它的流程任务可以有多个,每个任务对应流程图中相应的流程节点。
入门程序
创建流程图方法
点击ActivitiTest项目,在src/main/java目录下创建一个diagrams目录用来存放流程图
在当前项目右键选择Activiti Diagram流程图输入流程图名称XXX,然后点击OK,
在控制面板的右边栏有相关的画图图标操作
其中一个流程必须包含一个开始节点和一个结束节点,结束节点可以有多个。
然后使用StartEvent, UserTask,EndEvent画出下面的流程图,然后用Connection中的SequenceFlow连线连接起来。
创建流程图,如下图
指定流程图名称,ID和UserTask的处理人
1)选中第一个节点,在 General中的name属性中输入当前节点的名称,在Main config中的Assignee中输入该节点的处理人,然后以此类推将3个节点的值设置完成。
2)然后在流程图旁边的空白出点击一下,输入流程的ID和Name值,然后保存
将流程图部署到Activiti的数据表中
启动完成后在act_re_deployment流程部署表和act_re_procdef流程定义表中会有对应的数据信息.
启动流程实例
其中runtimeService.startProcessInstanceByKey("HelloWorldKey");中的HelloWorldKey对应流程图中的ID值,在数据表中对应act_re_procdef流程定义表中的key字段
启动完流程后在act_ru_execution表中会产生一条数据,这条数据为当前流程正在执行的任务,其中act_id_字段的值对应流程图节点的ID值
在act_ru_task表中会产生一条任务数据,execution_id对应act_ru_execution主键,proc_inst_id为流程实例ID,name值为流程节点名称,assignee字段为该待办当前的处理人
查询待办任务
指定查询张三的待办,可以查询出待办为第一个节点的处理任务。
完成待办任务
其中taskId对应act_ru_task表的主键ID,因为当前待办任务为第一个节点提交申请,当执行完这个待办后下一条待办数据将会流转到审批【部门经理】那,然后以此类推可以将部门经理和总经理的待办任务全部查询和执行完成。