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