Flowable进阶学习(九)数据对象DataObject、租户Tenant、接收任务ReceiveTask
创始人
2024-05-24 05:05:58
0

文章目录

  • 一、数据对象DataObject
  • 二、租户 Tenant
  • 三、接收任务 ReceiveTask
    • 案例

一、数据对象DataObject

DataObject可以⽤来定义⼀些流程的全局属性。

  1. 绘制流程图,并配置数据对象(不需要选择任意节点)
    在这里插入图片描述
    在这里插入图片描述2. 编码与测试
/*** 部署流程*/
@Test
void deploy() {Deployment deployment = repositoryService.createDeployment().addClasspathResource("process/请假流程-dataObj.bpmn20.xml").name("DataObj").deploy();System.out.println("deployment.getId() = " + deployment.getId());System.out.println("deployment.getName() = " + deployment.getName());
}/*** 启动流程*/
@Test
void startFlow() {ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(PROC_KEY);System.out.println("processInstance.getId() = " + processInstance.getId());
}/*** 查询数据对象* Test2_DataObj    : key: creater,name: 流程创建人,value: Huathy*/
@Test
void getDataObj() {ProcessDefinition pd = repositoryService.createProcessDefinitionQuery().processDefinitionKey(PROC_KEY).latestVersion().singleResult();List list = runtimeService.createExecutionQuery().processDefinitionId(pd.getId()).list();list.forEach(execution -> {DataObject obj = runtimeService.getDataObject(execution.getId(), "流程创建人");String msg = String.format("key: %s,name: %s,value: %s", obj.getDataObjectDefinitionKey(), obj.getName(), obj.getValue());logger.info(msg);});
}

查看ACT_RU_VARIABLE表,数据与ACT_RU_EXECUTION表中与EXECUTION_ID_相关联。
在这里插入图片描述

二、租户 Tenant

租户。多租户:单独的实例可以为多个组织服务。Flowable使用TenantID来区分流程归属于哪个租户。
部署与启动流程示例:部署的时候带上租户ID,后续的启动查询都要带上租户ID。

/*** 部署流程*/
@Test
void deploy() {Deployment deployment = repositoryService.createDeployment().addClasspathResource("process/请假流程-dataObj.bpmn20.xml").name("DataObj").tenantId("A").deploy();System.out.println("deployment.getId() = " + deployment.getId());System.out.println("deployment.getName() = " + deployment.getName());
}/*** 启动流程* processInstance.getId() = 0e33c8a0-a7b4-11ed-9f55-00155d067d63* org.flowable.common.engine.api.FlowableObjectNotFoundException: Process definition with key 'qjlc-dataObj' and tenantId 'B' was not found*/
@Test
void startFlow() {ProcessInstance processInstance = runtimeService.startProcessInstanceByKeyAndTenantId(PROC_KEY,"A");System.out.println("processInstance.getId() = " + processInstance.getId());ProcessInstance processInstance2 = runtimeService.startProcessInstanceByKeyAndTenantId(PROC_KEY,"B");System.out.println("processInstance2.getId() = " + processInstance2.getId());
}

三、接收任务 ReceiveTask

接收任务(ReceiveTask),是bpm2.0规范的一种任务,是一种等待任务,当该任务到达的时候,它不做任何逻辑,而是被动地等待用户Trigger。 当流程流转到接收任务,流程状态会保存到数据库(ACT_RU_EXECUTION表会维护该任务)。
使用场景:不明确的阻塞。例如一个复杂的计算需要等待很多条件,这些条件需要人工判断,则可以手动触发。

案例

  1. 绘制流程图(信封✉图标)
    在这里插入图片描述
  2. 部署流程与启动流程(启动流程后,ACT_RU_TASK表并没有数据,而数据存放在ACT_RU_EXECUTION表)
/** 部署流程 */
@Test
void deploy() {Deployment deployment = repositoryService.createDeployment().addClasspathResource("process/签收任务.bpmn20.xml").name("ReceiveTask").deploy();logger.info("deployment.getId() = " + deployment.getId());logger.info("deployment.getName() = " + deployment.getName());
}
/** 启动流程 */
@Test
void startFlow() {ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(PROC_KEY);logger.info("processInstance.getId() = " + processInstance.getId());
}
  1. 获取执行实例
@Test
void getExecution() {List list = runtimeService.createExecutionQuery().processDefinitionKey(PROC_KEY).list();list.forEach(execution -> {String msg = String.format("exeId: %s,exeName: %s, actID: %s", execution.getId(), execution.getName(),execution.getActivityId());logger.info(msg);});
}
  1. 触发流程(由于trigger方法需要传入执行实例ID,所以可以根据ReceiveTask的节点名称,查询当前待触发的流程实例ID。ACT_RU_EXECUTION表的数据在trigger后会删除记录,历史记录保存到ACT_HI_ACTINST表)
@Test
void triggerAndQuery() {List list = runtimeService.createExecutionQuery().processDefinitionKey(PROC_KEY).activityId("cksj").list();list.forEach(execution -> {System.out.println("execution.getActivityId() = " + execution.getActivityId());runtimeService.trigger(execution.getId());});
}

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...