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

相关文章
|
4月前
|
Prometheus DataWorks 安全
DataWorks产品使用合集之如何完成更新完自动推送到外部系统触发更新
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
4月前
|
缓存 前端开发
ProFlow 流程编辑器框架问题之创建一个自定义节点如何解决
ProFlow 流程编辑器框架问题之创建一个自定义节点如何解决
51 1
|
小程序 JavaScript 程序员
小程序最新标准授权登录流程+逻辑
小程序最新标准授权登录流程+逻辑
167 0
|
5月前
|
数据采集 DataWorks 安全
DataWorks产品使用合集之如何通过接口单独触发业务流程里面的某些节点运行
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
7月前
|
搜索推荐
基于jeecgboot的flowabale流程节点动态设置审批人的实现
基于jeecgboot的flowabale流程节点动态设置审批人的实现
650 1
|
6月前
|
DataWorks 监控 API
DataWorks产品使用合集之在调用API创建质量监控规则中的校验器的ID可以在哪里找到
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
7月前
DataphinV4.0来啦 | 自定义全局角色 ,实时研发全场景覆盖
DataphinV4.0来啦 | 自定义全局角色 ,实时研发全场景覆盖
59 0
jira学习案例98-跨组件状态管理
jira学习案例98-跨组件状态管理
108 0
jira学习案例98-跨组件状态管理
|
JSON 数据格式
数据集成模块流程组件之条件分发介绍
在数据集成的过程中,在一些场景下,需要对上游数据进行分发操作,条件分发组件可对上游数据根据配置条件进行分发,本文将介绍如何进行条件分发组件的配置。
323 0
数据集成模块流程组件之条件分发介绍