解决 flowable 无 租户 和 ID 组合启动的问题

问题描述:

由于目前项目采用多租户方式和指定 流程编号 方式组合启动流程,但是发现 flowable 未提供对应方式,那么该如何解决呢?

源代码截图

在这里插入图片描述

解决方案

仔细查看 runtimeService 发现提供了 构造器启动方式,因此可以采用该方法 启动流程

在这里插入图片描述
启动方式可以改成如下:

   Authentication.setAuthenticatedUserId(String.valueOf(applyAddReqDTO.getStartUserId()));
            /* 以Builder 方式启动流程,解决 无 租户 和 Id 的启动方式 使用租户的前提时,部署时 也需要设置 租户编号! */
            ProcessInstance processInstance = runtimeService.createProcessInstanceBuilder()
                    .tenantId(applyAddReqDTO.getTenantId())
                    .processDefinitionId(processInfo.getDefinitionId())
                    .variables(businessDataMap)
                    .start();
            /* 防止多线程的时候出问题 */
            Authentication.setAuthenticatedUserId(null);

查看结果

聪明的你是否以为 使用构造器启动,并设置租户编号即可呢?
注意这里有个BUG,必须部署时 也设置 租户编号 才能发起流程时 也设置租户编号!

以下为手动部署的代码:
 Deployment deployment = null;
        try {
            deployment = repositoryService.createDeployment()
                    .name(processDTO.getProcessName())
                    .key(processPublishDTO.getProcessKey())
                    .tenantId(processPublishDTO.getTenantId())
                    .addBytes(processPublishDTO.getProcessKey() + ".bpmn20.xml", processPublishDTO.getProcessXml().getBytes("UTF-8"))
                    .deploy();

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            return Result.responseError(new EntityError(EntityError.SYSTEM_ERROR.getCode(), e.getMessage()));
        }

对比结果
在这里插入图片描述
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章