启动共享流程定义时,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();
当流程定义本身在多个租户之间共享时,是否可以设置租户 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();