如何使用流程 中的 DataObject 并为流程设置租户

简介: 如何使用流程 中的 DataObject 并为流程设置租户

不知道小伙伴们有没有留意过,在  Flowable  流程图的绘制过程中,我们可以编写一个名为 dataObject 的元素,这个元素可以指定变量的 id、名称以及数据类型等各种属性,并且在流程实例启动的时候,会自动将 dataObject 元素的信息转换为流程实例变量,这个东西也蛮好玩的,今天松哥就带领小伙伴们来捋一捋 Flowable 中的 dataObject。

1. 添加 dataObject

首先我们来看下,在流程绘制的过程中,如何去添加 dataObject 对象。

IDEA 上的 Flowable 流程图绘制插件中还不能添加 dataObject 属性,这个需要我们去 flowable-ui 中去添加。

我们来随便绘制一个如下这样简单的流程图:


27cdff650c40acec36754a7ff3840f6e.png看过松哥之前几篇文章的小伙伴应该对这张图很熟悉了,松哥这里也不多说。

我现在就想给这个流程图,添加 dataObject 属性,方式如下:

首先打开流程图,不要选择任何节点,在下方可以找到数据对象属性,如下图:

4cceb682e6184a52bc2a4c51ad1cf111.png

点击之后,就可以添加 dataObject 了,如下:

62c508654096cdc7ae45d2f4c46efc9a.png配置完成之后,点击保存按钮。然后我们下载这个流程图,下载之后,打开,我们会发现这次的 XMl 节点比之前的 XML 节点多出来了如下一些内容:

<dataObject id="name" name="流程绘制人" itemSubjectRef="xsd:string">
  <extensionElements>
    <flowable:value>javaboy</flowable:value>
  </extensionElements>
</dataObject>
<dataObject id="site" name="流程作者网站" itemSubjectRef="xsd:string">
  <extensionElements>
    <flowable:value>www.javaboy.org</flowable:value>
  </extensionElements>
</dataObject>
<dataObject id="date" name="流程绘制时间" itemSubjectRef="xsd:datetime">
  <extensionElements>
    <flowable:value>2022-09-23T00:00:00</flowable:value>
  </extensionElements>
</dataObject>

2. 查询 dataObject

接下来,按照之前文章介绍的方式,我们先来部署并启动这个流程图。

当流程部署成功之后,我们可以在 ACT_RU_VARIABLE 表中查看到 dataObject 中的数据,如下图:

d6e7070d15f86afe01277b002c20eb95.png

可以看到,dataObject 的数据是和执行实例 ID 以及流程实例 ID 相关的。

接下来,我们可以通过如下方式来查询 ACT_RU_VARIABLE 表中的数据:

@Test
void test08() {
    List<Execution> list = runtimeService.createExecutionQuery().list();
    for (Execution execution : list) {
        DataObject data = runtimeService.getDataObject(execution.getId(), "流程绘制人");
        logger.info("key:{},name:{},value:{}",data.getDataObjectDefinitionKey(),data.getName(),data.getValue());
    }
}

这里打印出来的信息就是我们刚刚在定义的时候配置的所有流程信息了。

我们来看看这里查询的表:

b2d81a07498b0024a2900665860c10c9.png

可以看到,这里先去 ACT_RU_EXECUTION 表中查询执行实例 ID,然后再根据拿到的执行实例 ID 去 ACT_RU_VARIABLE 表中查询 dataObject 信息。

这就是 dataObject 的使用,其实非常 Easy!dataObject 平时主要可以用来定义一些全局的属性。

3. 租户

说到这里,就顺便再来和小伙伴们聊一聊 Flowable 中的租户。

租户这个其实好理解,举个栗子:

假设我们现在有 A、B、C、D 四个子系统,四个子系统都要部署同一个名为 leave 的流程,如何区分四个不同子系统的的流程呢?通过租户可以解决这个问题。

Flowable 中的租户其实很好理解,其实就是在流程中,多一个一个 TenantID 加以区分每一个流程属于哪个租户。

我举个简单的例子,假设我现在想要根据不同的子系统来部署流程,那么我可以按照如下方式来设计接口:

@RestController
public class ProcessDeployController {
    @Autowired
    RepositoryService repositoryService;
    @PostMapping("/deploy")
    public RespBean deploy(MultipartFile file,String tenantId) throws IOException {
        DeploymentBuilder deploymentBuilder = repositoryService.createDeployment()
                .category("javaboy的工作流分类")
                .name("javaboy的工作流名称")
                .addInputStream("fff.bpmn", file.getInputStream())
                .tenantId(tenantId)
                .key("javaboy的工作流key666");
        Deployment deployment = deploymentBuilder
                .deploy();
        return RespBean.ok("部署成功",deployment.getId());
    }
}

接下来我们通过 POSTMAN 来发送一个 POST 请求,提交流程图和租户 ID 这两个参数,如下图:

944a7fa7d0908bbbf6338843dfdff70b.png

小伙伴们注意,我这里提交了两个参数,一个是流程图本身,还有一个是租户 ID。

当这个流程图部署成功之后,我们在流程定义表 ACT_RE_PROCDEF 中可以看到刚刚设置的租户 ID:

96b48c3298209e65d80520b416c7fedc.png

接下来我们需要启动流程实例的时候,就不能单纯拿着流程部署的 ID 去启动了,还得拿上流程的租户 ID。如果只拿流程本身的信息去启动,会抛出如下异常:

28120fa5cba9fc855376bebb674e40bb.png

正确的启动方式如下:

@Test
void test09() {
    identityService.setAuthenticatedUserId("wangwu");
    ProcessInstance pi = runtimeService.startProcessInstanceByKeyAndTenantId("leave","A");
    logger.info("id:{},activityId:{}", pi.getId(), pi.getActivityId());
}

在后续的 Task 查询中,我们也可以根据具体的租户 ID 来查询,这个就看具体情况了。

好啦,Flowable 中的租户和 DataObject 就和小伙伴们聊这么多,我们下篇文章,继续。

相关文章
|
5月前
|
小程序 JavaScript 程序员
小程序最新标准授权登录流程+逻辑
小程序最新标准授权登录流程+逻辑
100 0
|
1月前
|
数据采集 分布式计算 DataWorks
DataWorks常见问题之跨账号失败设置依赖关系如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
|
1月前
Dataphin功能Tips系列(5)-手工表上传及长期维护
有些业务数据是手工excel维护的,这时我们要如何将数据上传至dataphin并进行维护?
|
11月前
|
SQL 运维 资源调度
Dataphin自定义资源组功能全新上线!
V3.10 版本中,Dataphin 全新上线调度资源分组管理的功能,能够帮助您统一管理部署Dataphin实例的物理机集群资源。您可以将资源划分为不同的配额组,不同资源组之间的资源配额互相独立,并支持为不同租户、统一租户下不同项目内的任务单独指定调度时使用的自定义资源组,从而保障核心任务的资源不被抢占,同时也提升整体资源利用率。
401 0
MMsegmentation教程 3:自定义数据流程
MMsegmentation教程 3:自定义数据流程
387 0
|
Java 数据库 开发者
用户模块之注册功能流程分析|学习笔记
快速学习 用户模块之注册功能流程分析
122 0
|
数据处理
项目前期准备--了解项目的数据处理流程及注册功能(2)
项目前期准备--了解项目的数据处理流程及注册功能(2)
147 0
|
SQL XML Java
项目前期准备--了解项目的数据处理流程及注册功能(1)
项目前期准备--了解项目的数据处理流程及注册功能(1)
126 0