因为本人也是刚刚接触activiti7 所以本文中不对的地方请指出,大家一起学习。如果有误人子弟的地方, 请大家指出。谢谢。
Activiti是一个工作流引擎。
我个人的意见,我认为这个工作流就是工作的流程。
举个例子:
比如有一个公司需要采购一批货物。那么流程需要这么几步:
1. 采购申请
2. 采购审核
3. 采购入库
每一步都需要某个职位的人审核。
我认为这个样子的就叫做工作流。
第一种方式,是采用编码的方式,在数据库表内弄一个status字段,来表明这个工作所在的流程。
那么对应职位的人只要查询她所对应的状态,就可以查询出他所审核的申请。比如:
采购员:
- 0未提交 1提交
采购经理:状态=1
- 2通过 3不通过
仓库管理员: 状态=2
- 4入库 5不入库
那么通过编码的方式,去数据库查询对应的状态即可。那么这个势必会存在问题:
业务流程变更之后,那么我们肯定会重写代码。之前的程序就不能使用了。这是我们不希望看到的事情。
第二种方式是采用 activiti,它可以实现业务流程变化后,程序代码不需要改动。
上面说了一堆的废话,跟本文无关。哈哈。。。。。。。
activiti7 刚开始会给我们创建 25个表,如果咱们的项目都没有25个表,是一个小项目,出于成本考虑,感觉不必使用activiti7。
/**
* 测试流程的部署
*/
@Test
public void testDeploy() {
//1. 加载引擎配置
ProcessEngineConfiguration processEngineConfiguration =
ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault();
//2. 构建过程引擎
ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
//3. 获取repositoryService
RepositoryService repositoryService = processEngine.getRepositoryService();
//4. 部署文件
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource("source_manager.bpmn")
.addClasspathResource("source_manager.png")
.key("source_m_key")
.name("采购资源流程")
.deploy();
}
部署阶段发生变化的表有:
act_ge_bytearray
(资源表)act_re_deployment
(流程定义部署表,存储流程部署信息)act_re_procdef
(流程定义表,记录流程定义信息)/**
* 测试: 启动流程
*/
@Test
public void testStartProcess() {
//1. 加载引擎配置
ProcessEngineConfiguration processEngineConfiguration =
ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault();
//2. 构建过程引擎
ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
//3. 获取runtimeService
RuntimeService runtimeService = processEngine.getRuntimeService();
//4. 根据key开启一个流程
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("source_mana");
// 5. 获取流程的启动信息
System.out.println(processInstance.getId());
System.out.println(processInstance.getProcessDefinitionKey());
}
启动一个流程实例之后,发生变化的表有:
act_hi_actinst
act_hi_identitylink
act_hi_procinst
act_hi_taskinst
act_ru_execution
act_ru_identitylink
act_ru_task
说明:一般 act_hi_ 开头的表,在流程实例运行结束之后,其内的记录也不会删除。
act_hi_actinst
英文全拼: activiti_history_action_instance
翻译过来:activiti_历史_活动_实例
活动实例: 我个人认为就是流程中的一个节点,比如 采购申请
说明: 每处理一个任务(活动实例),表内则会增加一条记录。
act_hi_identitylink
英文全拼: activiti_history_identity_link
翻译过来:activiti_历史_身份_联系
里面记录了,每一个 流程实例的任务参与人 的历史信息(每参与一个,就记录一个)。
act_hi_procinst
待测试。。每启动一个。。。。
英文全拼: activiti_history_process_instence
翻译过来:activiti_历史_流程_实例
说明: 每启动一个流程,就会产生一个流程实例。表中就多一条信息。
act_hi_taskinst
英文全拼: activiti_history_task_instence
翻译过来:activiti_历史_任务_实例
表内记录了每次执行过的(包括待执行的) 任务实例
act_ru_execution
英文全拼: activiti_run_execution
翻译过来: activiti_执行_执行
表内存储的数据结构是一个树形的结构,也就是表内有一个parent字段。
说明: 流程实例执行,如果当前只有一个分支时,一个流程实例只有一条记录且执行表的主键id和流程实例id相同,如果当前有多个分支正在运行则该执行表中有多条记录,存在执行表的主键和流程实例id不相同的记录。不论当前有几个分支总会有一条记录的执行表的主键和流程实例id相同 一个流程实例运行完成,此表中与流程实例相关的记录删除。
act_ru_identitylink
英文全拼: activiti_run_identity_link
翻译过来: activiti_执行_身份_链接
说明: 存储了未结束的流程实例中的参与人,如果有一个流程实例有两个参与人 zhangsan 和 lisi,当等待zhangsan执行的时候,此流程实例只拥有一条记录。当shangsan执行完成,轮到lisi执行的时候,那么此流程实例拥有了两条记录,当此流程实例执行完成时,此表内,关于执行完成的流程实例中所对应的所有的参与人则会被删除,但是act_hi_identitylink
表内不会删除,大家看表名也能理解。
act_ru_task
英文全拼: activiti_run_task
翻译过来: activiti_执行_任务
说明: 表内存储了未结束的流程实例中的待处理的任务(待处理的节点)。 一般情况下来说,每一个流程实例,在表内只有一条记录。
/**
* 测试: 处理zhangsan所对应的任务
*/
@Test
public void testHandleTask() {
//1. 加载引擎配置
ProcessEngineConfiguration processEngineConfiguration =
ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault();
//2. 构建过程引擎
ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
//3. 获取TaskService
TaskService taskService = processEngine.getTaskService();
//4. 查询任务
List<Task> taskList = taskService.createTaskQuery()
.taskAssignee("zhangsan")
.processDefinitionKey("source_mana")
.list();
//5. 处理任务
for (Task task : taskList) {
taskService.complete(task.getId());
}
}
act_hi_actinst
act_hi_identitylink
act_hi_taskinst
act_ru_execution
act_ru_identitylink
act_ru_task
说明:一般 act_hi_ 开头的表,在流程实例运行结束之后,其内的记录也不会删除。
涉及表的 具体的介绍在2.2.3节 为了方便查看,所以在此节中,我也复制了一下。
表的具体变化,可与2.2.3 节中的表进行比较。
act_hi_actinst
英文全拼: activiti_history_action_instance
翻译过来: activiti_历史_活动_实例
活动实例: 我个人认为就是流程中的一个节点,比如 采购申请
每处理一个任务(活动实例),表内则会增加一条记录。
表内的变化: 经过一次任务的处理,此表增加了一条记录。因为处理了一个任务。
act_hi_identitylink
英文全拼: activiti_history_identity_link
翻译过来: activiti_历史_身份_联系
里面记录了,每一个 流程实例的任务参与人 的历史信息(每参与一个,就记录一个)。
表内的变化: 表内添加了一条记录。原因是,此时等待lisi处理一个任务。多出了一个身份。
act_hi_taskinst
英文全拼: activiti_history_task_instence
翻译过来: activiti_历史_任务_实例
表内记录了每次执行过的(包括待执行的) 任务实例
表内的变化: 表内增加了一条记录,原因是处理完成了一个任务实例,现在又该处理第二个任务实例。所以多出来了一条记录。
act_ru_execution
英文全拼: activiti_run_execution
翻译过来: activiti_执行_执行
注意: 表内存储的数据结构是一个树形的结构,也就是表内有一个parent字段。
说明: 流程实例执行,如果当前只有一个分支时,一个流程实例只有一条记录且执行表的主键id和流程实例id相同,如果当前有多个分支正在运行则该执行表中有多条记录,存在执行表的主键和流程实例id不相同的记录。不论当前有几个分支总会有一条记录的执行表的主键和流程实例id相同 一个流程实例运行完成,此表中与流程实例相关的记录删除。
表内的变化: 表内对于该流程实例的第二条记录做了update,因为已经处理完成上一个任务实例,当前待处理的任务实例改变了,所以表内所对应的记录做了update(下图有更好的展示)
act_ru_identitylink
英文全拼: activiti_run_identity_link
翻译过来: activiti_执行_身份_链接
说明: 存储了未结束的流程实例中的参与人,如果有一个流程实例有两个参与人 zhangsan 和 lisi,当等待zhangsan执行的时候,此流程实例只拥有一条记录。当shangsan执行完成,轮到lisi执行的时候,那么此流程实例拥有了两条记录,当此流程实例执行完成时,此表内,关于执行完成的流程实例中所对应的所有的参与人则会被删除,但是act_hi_identitylink
表内不会删除,大家看表名也能理解。
表内的变化: 增加了一条记录。
act_ru_task
英文全拼: activiti_run_task
翻译过来: activiti_执行_任务
说明: 表内存储了未结束的流程实例中的待处理的任务(待处理的节点)。 一般情况下来说,每一个流程实例,在表内只有一条记录。
表内的变化: 表内更新了对应此流程实例的记录。总是展示当前需要处理的任务实例。
当处理完成所有的任务之后,流程结束。
因为出完成所有的任务之后,流程结束。所以代码与处理任务的代码相同,只是身份人的参数不同。
本例 当wangwu处理完成它的任务的之后,所对应的流程实例结束。所以代码如下(不需要看)
/**
* 测试: 处理wangwu所对应的任务
*/
@Test
public void testHandleTask() {
//1. 加载引擎配置
ProcessEngineConfiguration processEngineConfiguration =
ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault();
//2. 构建过程引擎
ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
//3. 获取TaskService
TaskService taskService = processEngine.getTaskService();
//4. 查询任务
List<Task> taskList = taskService.createTaskQuery()
.taskAssignee("wangwu")
.processDefinitionKey("source_mana")
.list();
//5. 处理任务
for (Task task : taskList) {
taskService.complete(task.getId());
}
}
与2.3节的表相同。
act_hi_actinst
act_hi_identitylink
act_hi_taskinst
act_ru_execution
act_ru_identitylink
act_ru_task
说明:一般 act_hi_ 开头的表,在流程实例运行结束之后,其内的记录也不会删除。
act_hi_actinst
英文全拼: activiti_history_action_instance
翻译过来: activiti_历史_活动_实例
活动实例: 我个人认为就是流程中的一个节点,比如 采购申请
每处理一个任务(活动实例),表内则会增加一条记录。
表内的变化: 经过任务的处理,此表增加了记录。因为处理了任务。
act_hi_identitylink
英文全拼: activiti_history_identity_link
翻译过来:activiti_历史_身份_联系
里面记录了,每一个 流程实例的任务参与人 的历史信息(每参与一个,就记录一个)。
表内的变化: 表内添加了记录。原因是,流程实例已经运行完成。所以处理了很多任务实例。所以表内多了很多条记录。
act_hi_taskinst
英文全拼: activiti_history_task_instence
翻译过来: activiti_历史_任务_实例
表内记录了每次执行过的(包括待执行的) 任务实例
表内的变化: 表内增加了记录,流程实例已经运行完成。所以处理了很多任务实例。所以表内多了很多条记录。
act_ru_execution
英文全拼: activiti_run_execution
翻译过来: activiti_执行_执行
注意: 表内存储的数据结构是一个树形的结构,也就是表内有一个parent字段。
说明: 流程实例执行,如果当前只有一个分支时,一个流程实例只有一条记录且执行表的主键id和流程实例id相同,如果当前有多个分支正在运行则该执行表中有多条记录,存在执行表的主键和流程实例id不相同的记录。不论当前有几个分支总会有一条记录的执行表的主键和流程实例id相同 一个流程实例运行完成,此表中与流程实例相关的记录删除。
表内的变化: 表内为空。因为所有的流程实例都已经执行完成。所以并没有正在执行着的流程实例。
act_ru_identitylink
英文全拼: activiti_run_identity_link
翻译过来: activiti_执行_身份_链接
说明: 存储了未结束的流程实例中的参与人,如果有一个流程实例有两个参与人 zhangsan 和 lisi,当等待zhangsan执行的时候,此流程实例只拥有一条记录。当shangsan执行完成,轮到lisi执行的时候,那么此流程实例拥有了两条记录,当此流程实例执行完成时,此表内,关于执行完成的流程实例中所对应的所有的参与人则会被删除,但是act_hi_identitylink
表内不会删除,大家看表名也能理解。
表内的变化:表内为空。因为所有的流程实例都已经执行完成。所以并没有正在执行着的流程实例。
act_ru_task
英文全拼: activiti_run_task
翻译过来: activiti_执行_任务
说明: 表内存储了未结束的流程实例中的待处理的任务(待处理的节点)。 一般情况下来说,每一个流程实例,在表内只有一条记录。
表内的变化: 表内为空。因为所有的流程实例都已经执行完成。所以并没有正在执行着的流程实例。
我的分享到这也就结束了,我也是刚接触activiti7, 懂得也不多。喜欢与大家一起学习。写文不易。错的地方请指出。
最后想说的是: 共渡难关武汉加油!