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

1. 说明

本文参考immort.Liu的博文。

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

2.1 流程的部署阶段

2.1.1 代码

	/**
     * 部署流程
     */
    @Test
    public void testDeployProcess() {
        Deployment deploy = repositoryService.createDeployment()
                .addClasspathResource("processes/test.bpmn")
                .addClasspathResource("processes/test.png")
                .name("测试数据库内容变化-1")
                .deploy();
        System.out.println("流程部署ID:"+deploy.getId());
        System.out.println("流程部署名称:"+deploy.getName());
    }

2.1.2 发生变化的表

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

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

2.1.3 表内数据的内容

  • act_ge_bytearray

在这里插入图片描述

  • 第一行存储的是bpmn的xml文件

  • 第二行存储的是png图片文件

  • act_re_deployment
    在这里插入图片描述
    上图解释了这些数据的来源,也可以在部署的时候对表中其他字段进行设置。

  • act_re_procdef
    在这里插入图片描述
    以上表中key字段可以用来启动流程,本文就是用key启动流程。

2.2 启动流程实例

2.2.1 代码

	/**
     * 启动流程
     */
    @Test
    public void  testStartProcess(){
        securityUtil.logInAs("salaboy");
        //启动流程实例,同时还要指定业务标识businessKey
        //第一个参数:是指流程定义key
        //第二个参数:业务标识businessKey
        ProcessInstance test = runtimeService.startProcessInstanceByKey("test","1001");
        System.out.println("流程实例id:"+test.getId());
        System.out.println("流程部署id:"+test.getProcessDefinitionId());
    }

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_历史_活动_实例
    活动实例: 我个人认为就是流程中的一个节点,比如 采购申请
    说明: 每处理一个任务(活动实例),表内则会增加一条记录。
    在这里插入图片描述
  • 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 代码

	/**
     * 查询及完成任务
     */
    @Test
    public void testTaskProcess(){

        List<Task> list = taskService.createTaskQuery()
                .taskAssignee("user1")
                .list();
        for (Task task : list) {
            System.out.println("任务id:"+task.getId());
            System.out.println("任务处理人:"+task.getAssignee());
            System.out.println("流程实例id:"+task.getProcessInstanceId());
            //完成任务
            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 节中的表进行比较。

  • 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_执行_任务
    说明: 表内存储了未结束的流程实例中的待处理的任务(待处理的节点)。 一般情况下来说,每一个流程实例,在表内只有一条记录。
    表内的变化: 表内更新了对应此流程实例的记录。总是展示当前需要处理的任务实例。

在这里插入图片描述

2.4 流程结束

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

2.4.1 代码

 	/**
     * 查询及完成任务
     */
    @Test
    public void testTaskProcess(){

        List<Task> list = taskService.createTaskQuery()
                .taskAssignee("user2")
                .list();
        for (Task task : list) {
            System.out.println("任务id:"+task.getId());
            System.out.println("任务处理人:"+task.getAssignee());
            System.out.println("流程实例id:"+task.getProcessInstanceId());
            //完成任务
            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. 总结

经过以上细致的流程跟踪,一个简单的流程所涉及到的表,以及表中内容从开始到结束的变化都体现出来了,测试到此结束。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值