Activiti 23 张表详细分析

1.工作框架目录中 database 目录  database目录里边又有 drop 、create、updata 三个目录 存放的全是sql语句 这些sql一共创建23张表(activiti 5.13,activiti 5.16 有24张表)activiti 框架底层使用mybatis操作数据库

2.创建activiti的23张表方式:
 1.执行框架提供的sql文件建表
 2.使用框架提供的自动建表方式

Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。
1)ACT_RE_*: 'RE'表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。
2)ACT_RU_*: 'RU'表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。
3)ACT_ID_*: 'ID'表示identity。 这些表包含身份信息,比如用户,组等等。
4)ACT_HI_*: 'HI'表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。
ACT_GE_*: 通用数据, 用于不同场景下。

ACT_RE_* 三张表 act_re_deployment(流程部署表) 、act_re_model(流程模型表)、act_re_procdef(流程定义表) 表中的数据插入后一般不会变

act_ru_*  中最重要的表 act_ru_execution、act_ru_task、act_ru_variable 表中的数据一般会动态改变

act_id_* 中最要的表 act_id_group 、act_id_info、act_id_membership、act_id_user

3流程部署(将流程定义的规则保存到数据库)
  操作的表有(插入操作): act_re_deployment(部署表)、 act_re_procdef(流程定义表)、act_ge_baytearray(二进制文件表)
多次部署不会覆盖前一次部署的数据(会新增加一条,id变化是增加100)
部署流程的方式:1.加载单个的流程定义文件  2.加载zip文件
代码示例:

DeploymentBuilder deploymentBuilder = processEngine
                .getRepositoryService().createDeployment();

        // 方式一:加载单个的流程定义文件
        // deploymentBuilder.addClasspathResource("qjlc.bpmn");
        // deploymentBuilder.addClasspathResource("qjlc.png");
        // Deployment deployment = deploymentBuilder.deploy();

        //ZipInputStream zipInputStream = new ZipInputStream(this.getClass()
                //.getClassLoader().getResourceAsStream("process.zip"));

        ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(new File("d:\\process.zip")));
        // 方式二:加载zip文件
        deploymentBuilder.addZipInputStream(zipInputStream );
        deploymentBuilder.deploy();


问题:activiti框架是如何确定id的值呢?哪种主键生成策略呢?
答:activiti生成id的策略 和 所有的策略都不一样 ,他是通过查找表act_ge_property表的,该表中有一个字段叫 next.dbid,这个字段的值就是下一条记录的id值(这个id用于activiti所有的表,也就是说activiti的所有表的主键都是唯一的,activiti的每一个插入操作都会来查这张表,获得id值)

问题:为什么activiti的id值是按100递增的呢?为什么不是按1递增的?
答 : activiti的每一次插入操作都会查询 act_ge_property表 ,但是每一次操作会写入几张表是不知道的,所以递增值跨度大一点。
列如 :第一次部署会操作三张表( act_re_deployment 、 act_re_procdef 、 act_ge_baytearray ),它们的id分别是101,102,103。而第二次部署三张表的id分别是 201,202,203。

4.查询流程定义 :查询的表就是  act_re_procdef
代码示例:

ProcessDefinitionQuery query = processEngine.getRepositoryService().createProcessDefinitionQuery();
        query.processDefinitionKey("qjlc");//根据key过滤
        query.orderByProcessDefinitionVersion().asc();
        List<ProcessDefinition> list = query.listPage(0, 10);
        for (ProcessDefinition processDefinition : list) {
            System.out.println(processDefinition.getId());
        }


5.根据流程定义启动流程实例
流程实例:根据某个流程定义一次具体的执行过程就是一个流程实例。那么可知 流程定义和流程实例的关系为 一对多 (一个流程定义对应多个流程实例)
示例代码:

//方式一:根据流程定义id启动流程实例
        //String processDefinitionId = "";//流程定义id
        //processEngine.getRuntimeService().startProcessInstanceById(processDefinitionId);

        String processDefinitionKey = "qjlc";
        //方式二:根据流程定义key启动流程实例
        ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey);
        System.out.println(processInstance.getId() + " " + processInstance.getProcessDefinitionId());
操作的表有(都是insert):act_ru_execution(流程实例表)、act_ru_task(任务表)

6.查询个人任务,操作的数据表:act_ru_task(任务表)
示例代码:

TaskQuery query = processEngine.getTaskService().createTaskQuery();
        query.taskAssignee("张三");
        query.orderByTaskCreateTime().desc();
        List<Task> list = query.list();
        for (Task task : list) {
            System.out.println(task.getId());
        }

7.办理个人任务
示例代码:

String taskId = "1304";
        processEngine.getTaskService().complete(taskId);
操作的数据表:
act_ru_execution,操作是update  更新字段act_id(存放流程节点的id)
act_ru_task,操作是先delete 然后 insert

 8.删除流程定义,操作的表: act_re_deployment(部署表)、 act_re_procdef(流程定义表)、act_ge_baytearray(二进制文件表)
如果被删除的流程已经被启动(流程正在走),那么该流程定义不可以删除。(因为你要删除的表被别的表引用了,外键约束),如果一定要删除的话,可以级联删除。

9.设置流程变量(流程变量以键值对存在,存放在表 act_ru_variable中,当流程实例结束时,对应的流程变量数据会被框架删除 )
设置流程变量的方式:
1.启动流程实例时设置:
示例代码:

/**
     * 启动流程实例时设置流程变量
     */
    @Test
    public void test2() {
        String processDefinitionKey = "bxlc";// 流程定义key
        Map<String, Object> variables = new HashMap<String, Object>();
        variables.put("key1", "value1");
        variables.put("loginUser", "小王");
        ProcessInstance pi = processEngine.getRuntimeService()
                .startProcessInstanceByKey(processDefinitionKey, variables);
        System.out.println(pi.getId());
    }


2.办理任务时设置:
示例代码:

/**
     * 办理任务时设置流程变量
     */
    @Test
    public void test3() {
        String taskId = "206";//任务id
        Map<String, Object> variables = new HashMap<>();
        variables.put("qjyy", "不想上班");
        variables.put("qjts", 365);
        processEngine.getTaskService().complete(taskId, variables);
    }









  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
由于“activiti628张表”没有给出更具体的表名,因此无法提供全面的表结构和字段解释。下面是activiti中一些常见表的字段注释。 1. ACT_HI_ACTINST (历史节点信息表): -ID_: 当前历史节点标识 -PROC_DEF_ID_: 流程定义标识 -TASK_ID_: 任务标识 -START_TIME_: 启动时间 -END_TIME_: 结束时间 -DURATION_: 持续时间 -ACT_ID_: 节点标识 -ACT_NAME_: 节点名称 -ACT_TYPE_: 节点类型 2. ACT_HI_DETAIL (历史任务详情表): -ID_: 当前历史任务详情标识 -REV_: 详情版本 -TASK_ID_: 历史任务标识 -TIME_: 记录时间 -NAME_: 详情名称 -LONG_: 数值字段(持续时间) -TEXT_: 文本字段 3. ACT_HI_PROCINST (历史流程实例表): -ID_: 历史流程实例标识 -PROC_DEF_ID_: 流程定义标识 -BUSINESS_KEY_: 业务关键字 -START_TIME_: 启动时间 -END_TIME_: 结束时间 -DURATION_: 持续时间 -END_ACT_ID_: 结束节点标识 4. ACT_HI_TASKINST (历史任务信息表): -ID_: 历史任务信息标识 -PROC_DEF_ID_: 流程定义标识 -TASK_DEF_KEY_: 任务定义关键字 -PROC_INST_ID_: 流程实例标识 -EXECUTION_ID_: 执行标识 -NAME_: 任务名称 -PARENT_TASK_ID_: 父任务标识 -DESCRIPTION_: 任务描述 -OWNER_: 任务拥有者 -START_TIME_: 启动时间 -DUE_DATE_: 到期时间 -CLAIM_TIME_: 认领时间 -END_TIME_: 结束时间 -DURATION_: 持续时间 -DELETE_REASON_: 删除原因 -PRIORITY_: 任务优先级 5. ACT_RU_EVENT_SUBSCR(事件订阅表): -ID_: 事件订阅标识 -REV_: 版本号 - EVENT_TYPE_: 事件类型 - EVENT_NAME_: 事件名称 - EXECUTION_ID_: 执行标识 6. ACT_RU_TASK(运行时任务信息表): -ID_: 运行时任务标识 -EXECUTION_ID_: 执行标识 -PROC_INST_ID_: 流程实例标识 -PROC_DEF_ID_: 流程定义标识 -TASK_DEF_KEY_: 任务定义关键字 - NAME_: 任务名称 - PARENT_TASK_ID_: 父任务标识 -DESCRIPTION_: 任务描述 -OWNER_: 任务拥有者 -ASSIGNEE_: 任务受让人 -DELEGATION_: 委托记录标识 -PRIORITY_: 任务优先级 -CREATE_TIME_: 创建时间 -DUE_DATE_: 到期时间 -CATEGORY_: 任务分类 - SUSPENSION_STATE_: 任务挂起状态 7. ACT_RU_VARIABLE(运行时流程变量表): -ID_: 流程变量标识 -PROC_INST_ID_: 流程实例标识 -EXECUTION_ID_: 执行标识 -TASK_ID_: 任务标识 - NAME_: 变量名称 - VAR_TYPE_: 变量类型 - REV_: 版本号 - BYTEARRAY_ID_: 二进制数据标识 - DOUBLE_: 双精度浮点数 - LONG_: 整数 - TEXT_: 文本 以上是一些常见的activiti表的字段注释,对于activiti的其他表,可以查看官方文档获得更多相关信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值