启动共享流程定义时,Camunda设置了租户ID

时间:2019-11-26 17:18:48

标签: java bpmn camunda

在多个租户之间共享流程定义本身时,是否可以设置租户ID?

我将此方法称为从http请求中获得两个ID的方法,然后将其传递给嵌入式流程引擎

public void startInstance(String processDefinitionId, String tenantId) {
        this.runtimeService.startProcessInstanceById(processDefinitionId);
    }

但是使用这种方法,我无法将租户ID传递给流程实例。我该如何实现?

我发现读到的内容是:https://docs.camunda.org/manual/7.5/user-guide/process-engine/multi-tenancy/#instantiate-a-shared-definition,但这并不能真正解决我的问题,因为我是从http标头获得租户ID的。

1 个答案:

答案 0 :(得分:0)

由于Jan的评论,我发现可以将租户ID作为变量添加到启动的实例中,然后在TenantProvider中检索它。

代码看起来像这样

runtimeService.createProcessInstanceById(processDefinitionId).setVariable("tenantId", tenantId).execute();

在您的TenantProvider上,像这样简单地获取此变量

public class TenantProvider implements TenantIdProvider {

    @Override
    public String provideTenantIdForProcessInstance(TenantIdProviderProcessInstanceContext ctx) {
        return (String) ctx.getVariables().get("tenantId");
    }

    @Override
    public String provideTenantIdForCaseInstance(TenantIdProviderCaseInstanceContext ctx) {
        return (String) ctx.getVariables().get("tenantId");
    }

    @Override
    public String provideTenantIdForHistoricDecisionInstance(TenantIdProviderHistoricDecisionInstanceContext ctx) {
        return (String) ctx.getExecution().getVariable("tenantId");
    }
}

要启用TenantProvider,请像这样启动引擎

ProcessEngine engine = new StandaloneProcessEngineConfiguration()
                .setTenantIdProvider(new TenantProvider())
                ...
                .buildProcessEngine();