如何使用流程 中的 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 就和小伙伴们聊这么多,我们下篇文章,继续。

相关文章
|
28天前
|
消息中间件 负载均衡 监控
skynet框架:批量服务管理方案
【10月更文挑战第7天】Skynet 框架下的批量服务管理方案通过高效、可靠及可扩展的设计,实现了对大量服务实例的集中管理。该方案涵盖服务注册与发现、消息队列、负载均衡及集群管理等关键技术,确保系统稳定运行并提升响应速度。其优势在于提高系统性能、增强可靠性、便于扩展及简化管理操作,适用于大规模分布式系统、微服务架构、实时数据处理及游戏服务器等多种场景。通过定制化优化,可充分发挥 Skynet 框架的优势,构建高效稳定的分布式系统。
|
4月前
|
数据采集 DataWorks 安全
DataWorks产品使用合集之如何通过接口单独触发业务流程里面的某些节点运行
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
5月前
|
数据采集 DataWorks 监控
DataWorks产品使用合集之如何配置周期任务(如工作流任务或调度任务)依赖于数据质量规则校验结果
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
79 0
|
6月前
|
搜索推荐
基于jeecgboot的flowabale流程节点动态设置审批人的实现
基于jeecgboot的flowabale流程节点动态设置审批人的实现
565 1
|
6月前
|
API
工作流JBPM操作API删除流程&部署流程
工作流JBPM操作API删除流程&部署流程
43 0
|
6月前
|
监控 机器人 数据安全/隐私保护
jira学习案例98-跨组件状态管理
jira学习案例98-跨组件状态管理
101 0
jira学习案例98-跨组件状态管理
MMsegmentation教程 3:自定义数据流程
MMsegmentation教程 3:自定义数据流程
451 0
|
Java 数据库 开发者
注册功能流程分析 | 学习笔记
快速学习注册功能流程分析
175 0
注册功能流程分析 | 学习笔记
|
Java 数据库 开发者
用户模块之注册功能流程分析|学习笔记
快速学习 用户模块之注册功能流程分析
145 0