問題描述:
由於目前項目採用多租戶方式和指定 流程編號 方式組合啓動流程,但是發現 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()));
}
對比結果