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

Camunda set tenant id when starting a shared process definition

当流程定义本身在多个租户之间共享时,是否可以设置租户 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-header 中获取了租户 ID。

感谢 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();