我沒有看到一個辦法,只用其餘的API,甚至用嵌入式流程引擎來做這件事,而沒有額外的查詢和流程變量是有點棘手。
解決此問題的一種方法是引入一個「上下文」對象,該對象由依賴注入框架管理或作爲簡單的ThreadLocal
管理。該上下文將包含輸入和輸出參數,並且可以在啓動進程和服務任務時訪問。
class Context {
private String address;
private List<String> products;
public Context(String address) { this.address = address; }
public String getAddress() { return address; }
public void setAddress(String address) { this.address = address; }
public List<String> getProducts() { return products; }
public void setProducts(List<String> products) { this.products = products; }
}
class CurrentContext {
private static final ThreadLocal<Context> value = new ThreadLocal<>();
public static void set(Context context) {
value.set(context);
}
public static Context get() {
return value.get();
}
public static void remove() {
value.remove();
}
}
class GetProductList implements JavaDelegate {
@Override
public void execute(final DelegateExecution execution) {
final Context context = CurrentContext.get();
context.setProducts(getProducts(context.getAddress()));
}
}
使用Java API,你會初始化上下文,事後檢索從上下文的結果,從過程之前:
final Context context = new Context("address");
CurrentContext.set(context);
try {
runtimeService.startProcessInstanceById(...);
return context.getProducts();
} finally {
CurrentContext.remove();
}
我們正在使用這種模式(通過自定義管理上下文春天範圍)相當成功。
最後一個代碼片段的位置。我只是初學者,在REST部分學習並探索其他領域。 – Swaraj
@Swaraj抱歉,我錯過了關於僅使用其餘api的要求,上面的示例使用嵌入式流程引擎的java api。 –
謝謝,這將有助於處理Camunda API。但我瞭解到的一件事是,無法從REST API獲得實際響應,而是必須使用processInstanceID/Business Key從REST API中獲取更多來自Process Instance的詳細信息。 – Swaraj