解決 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()));
        }

對比結果
在這裏插入圖片描述
在這裏插入圖片描述

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