![](/img/trans.png)
[英]Data Persistence in Camunda when starting a process Instance through JAVA API
[英]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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.