这里写目录标题
1. 思考
我们可以想一下在一个业务系统中,例如我们公司有一套系统,里面有请假流程、调岗流程、调薪流程、面试流程。
例如,请假流程,那在业务系统里面 你是不是得有请假表,然后有相关请假的内容,
那问题来了 这些相关的请假的内容是存在Activiti的这25张表里面还是存在我们的业务系统里面呢?
结论:肯定是存在我们的公司业务系统之中,因为你请假相关的内容可能会有很多.
下面DB1代表公司的业务系统,DB2代表activiti的25张表的库
例如,请假内容可能会有:
- 请假当事人
- 请假开始时间
- 请假结束时间
- 事由
- 状态
- 类型
而这些信息,是不会在activiti里面的,而是要存在我们自己的业务系统之中
现在要保存一个请假的信息,这些就要保存到DB1里面去,这个DB1里面要有一张请假表(holiday),将来有一个员工发起请假,就应该往里面存一条记录,但,这条记录和activiti有关系吗?很明显 毫无关联。
那activiti想要控制这个请假流程,就要和业务系统进行关联,就涉及到关联方式
1.1 关联方式
在DB1中holiday每条记录都有一个id,也就是主键,然后存入activiti的bussinessKey
关键就是在activiti这25张表里面,哪些表或者哪些字段是与业务系统相关联的,我这里直接找出来
在表act_ru_execution这个表中存在一个bussinessKey,这就可以进行关联。当然不仅仅是这张表,其他表应该也有,但这张表是最重要也是最核心的。
2. 根据流程定义的key启动一个流程实例
2.1 确认流程是否部署
通过查看act_ge_bytearray表可以看到
2.2 查看流程定义
通过查看act_re_procdef表
2.3 指定bussinessKey启动流程实例
public static void main(String[] args){
//1.获得引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//2.得到runtimeService
RuntimeService runtimeService = processEngine.getRuntimeService();
//3.准备启动流程实例,同时指定业务标识businessKey,其本身就是请假单id
ProcessInstance instance = runtimeService.startProcessInstanceByKey("holiday", "1001");
System.out.println(instance.getBusinessKey());
}
2.4 观察act_ru_execution
如果bussinessKey有值,即为关联成功