2017-02-13 999 views
2

使用Camunda REST API可以從Camunda BPMN流獲得同步響應嗎?使用Camunda REST API的Camunda BMPN同步響應

比如我有2個服務任務,

1. Validate Address

2. Get ProductList

現在我開始使用Camunda提供的REST API(未使用駕駛艙來啓動進程)。地址驗證服務任務執行成功,ProductList任務執行成功,響應調用Client返回響應,而不是挖進進程id爲camunda。我搜索了它,但沒有找到任何這樣的例子或導致它。

回答

0

我沒有看到一個辦法,只用其餘的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(); 
} 

我們正在使用這種模式(通過自定義管理上下文春天範圍)相當成功。

+0

最後一個代碼片段的位置。我只是初學者,在REST部分學習並探索其他領域。 – Swaraj

+0

@Swaraj抱歉,我錯過了關於僅使用其餘api的要求,上面的示例使用嵌入式流程引擎的java api。 –

+0

謝謝,這將有助於處理Camunda API。但我瞭解到的一件事是,無法從REST API獲得實際響應,而是必須使用processInstanceID/Business Key從REST API中獲取更多來自Process Instance的詳細信息。 – Swaraj

0

我已經通過REST文檔了,有沒有其他辦法從REST API得到實際的反應(即List of Product)作爲REST調用的返回類型的返回類型爲以下格式 -

{ 
id: "95aef406-3a7a-11e5-85b6-dafa20524153" 
definitionId: "invoice:1:15e97a1c-312d-11e5-aca3-a0e120524153" 
businessKey: null 
caseInstanceId: null 
ended: true 
suspended: false 
} 

這表明,過程結束(ended: true)的所有呼叫的是同步的,Camunda Rest Create Process

現在,如果用戶想讀取過程中的參數,則需要調用歷史業務的過程是同步的,並結束。

GET /history/variable-instance,請參閱 Process History Variables瞭解更多選項。