浅谈 Activiti7 --- 各阶段 -- 数据库表 中内容 的 变化

0. 说明

因为本人也是刚刚接触activiti7 所以本文中不对的地方请指出,大家一起学习。如果有误人子弟的地方, 请大家指出。谢谢。

1. activiti7的介绍

Activiti是一个工作流引擎。

1.1 什么是工作流呢?

我个人的意见,我认为这个工作流就是工作的流程。
举个例子:
比如有一个公司需要采购一批货物。那么流程需要这么几步:
1. 采购申请
2. 采购审核
3. 采购入库
每一步都需要某个职位的人审核。
我认为这个样子的就叫做工作流。

1.2 如何实现?

1.2.1 硬编码方式

第一种方式,是采用编码的方式,在数据库表内弄一个status字段,来表明这个工作所在的流程。
那么对应职位的人只要查询她所对应的状态,就可以查询出他所审核的申请。比如:
采购员:

  • 0未提交 1提交

采购经理:状态=1

  • 2通过 3不通过

仓库管理员: 状态=2

  • 4入库 5不入库

那么通过编码的方式,去数据库查询对应的状态即可。那么这个势必会存在问题:
业务流程变更之后,那么我们肯定会重写代码。之前的程序就不能使用了。这是我们不希望看到的事情。

1.2.2 activiti7 方式

第二种方式是采用 activiti,它可以实现业务流程变化后,程序代码不需要改动。

上面说了一堆的废话,跟本文无关。哈哈。。。。。。。

2. activiti7 各阶段 数据库表的变化

activiti7 刚开始会给我们创建 25个表,如果咱们的项目都没有25个表,是一个小项目,出于成本考虑,感觉不必使用activiti7。

2.1 流程的部署阶段

2.1.1代码

/**
 * 测试流程的部署
 */
@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();

}

2.1.2 发生变化的表

部署阶段发生变化的表有:

  • act_ge_bytearray (资源表)
  • act_re_deployment (流程定义部署表,存储流程部署信息)
  • act_re_procdef (流程定义表,记录流程定义信息)

2.1.3表内数据的内容

  • act_ge_bytearray
    在这里插入图片描述

    • 第一行是存储的bpmn的xml文件。
    • 第二行存储的是png图片文件。
  • act_re_deployment
    浅谈 Activiti7 --- 各阶段 -- 数据库表 中内容 的 变化_第1张图片上图也解释了这些数据的来源。当然另外两个字段,也可以在部署的时候 打点设置。

  • act_re_procdef
    浅谈 Activiti7 --- 各阶段 -- 数据库表 中内容 的 变化_第2张图片

2.2 启动流程实例

2.2.1 代码

/**
 * 测试: 启动流程
 */
@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());

}

2.2.2 发生变化的表

启动一个流程实例之后,发生变化的表有:

  • act_hi_actinst
  • act_hi_identitylink
  • act_hi_procinst
  • act_hi_taskinst
  • act_ru_execution
  • act_ru_identitylink
  • act_ru_task

说明:一般 act_hi_ 开头的表,在流程实例运行结束之后,其内的记录也不会删除。

2.2.3 表内数据的内容

  • act_hi_actinst
    英文全拼: activiti_history_action_instance
    翻译过来:activiti_历史_活动_实例
    活动实例: 我个人认为就是流程中的一个节点,比如 采购申请
    说明: 每处理一个任务(活动实例),表内则会增加一条记录。
    浅谈 Activiti7 --- 各阶段 -- 数据库表 中内容 的 变化_第3张图片

  • 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_执行_任务
    说明: 表内存储了未结束的流程实例中的待处理的任务(待处理的节点)。 一般情况下来说,每一个流程实例,在表内只有一条记录。
    在这里插入图片描述

2.3 任务处理

2.3.1 代码

/**
 * 测试: 处理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());
    }

}

2.3.2 发生变化的表

  • act_hi_actinst
  • act_hi_identitylink
  • act_hi_taskinst
  • act_ru_execution
  • act_ru_identitylink
  • act_ru_task

说明:一般 act_hi_ 开头的表,在流程实例运行结束之后,其内的记录也不会删除。

2.3.3 表内数据的变化

涉及表的 具体的介绍在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(下图有更好的展示)

    上面的记录为 任务处理之前的,后面的为任务处理之后的。
    浅谈 Activiti7 --- 各阶段 -- 数据库表 中内容 的 变化_第4张图片

  • act_ru_identitylink
    英文全拼: activiti_run_identity_link
    翻译过来: activiti_执行_身份_链接
    说明: 存储了未结束的流程实例中的参与人,如果有一个流程实例有两个参与人 zhangsan 和 lisi,当等待zhangsan执行的时候,此流程实例只拥有一条记录。当shangsan执行完成,轮到lisi执行的时候,那么此流程实例拥有了两条记录,当此流程实例执行完成时,此表内,关于执行完成的流程实例中所对应的所有的参与人则会被删除,但是act_hi_identitylink表内不会删除,大家看表名也能理解。
    表内的变化: 增加了一条记录。
    在这里插入图片描述

  • act_ru_task
    英文全拼: activiti_run_task
    翻译过来: activiti_执行_任务
    说明: 表内存储了未结束的流程实例中的待处理的任务(待处理的节点)。 一般情况下来说,每一个流程实例,在表内只有一条记录。
    表内的变化: 表内更新了对应此流程实例的记录。总是展示当前需要处理的任务实例。
    在这里插入图片描述

2.4 流程结束

当处理完成所有的任务之后,流程结束。

2.4.1 代码

因为出完成所有的任务之后,流程结束。所以代码与处理任务的代码相同,只是身份人的参数不同。

本例 当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.4.2 发生变化的表

与2.3节的表相同。

  • act_hi_actinst
  • act_hi_identitylink
  • act_hi_taskinst
  • act_ru_execution
  • act_ru_identitylink
  • act_ru_task

说明:一般 act_hi_ 开头的表,在流程实例运行结束之后,其内的记录也不会删除。

2.4.3 表内数据的变化

  • 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_执行_任务
    说明: 表内存储了未结束的流程实例中的待处理的任务(待处理的节点)。 一般情况下来说,每一个流程实例,在表内只有一条记录。
    表内的变化: 表内为空。因为所有的流程实例都已经执行完成。所以并没有正在执行着的流程实例。
    在这里插入图片描述

3. 总结

我的分享到这也就结束了,我也是刚接触activiti7, 懂得也不多。喜欢与大家一起学习。写文不易。错的地方请指出。

最后想说的是: 共渡难关武汉加油!

你可能感兴趣的:(activiti7)