2016-07-19 50 views
0

我有Sample.bpmn 其中我使用2個服務任務的簡單BPMN流程,我通過使用 processEngine.getRuntimeService()startProcessInstanceByKey(「Process_1」,變量)執行我的過程; 在我的變量如下:過程變量

Map variables = new HashMap(); 
variables.put("a", 2); 
variables.put("b", 5); 

我的第一個服務的任務是實現加法Java類和我的第二個服務任務是實現乘法類。

現在我想有3個變量(常量)「c」,「d」和「e」,使c = 5,d = 10,e = 2,這樣我就可以使用我的「c」變量對於服務任務1,除了第i類可以使用這個變量,同樣我想在我的乘法類和變量「e」中使用變量「e」,我想要全局定義變量,以便我可以在這兩個類中使用它。

任何人都可以指導我嗎?

回答

3

作爲一個快速解決方案,您可以將Setup-Service Task包含爲預先填充過程變量的第一個任務。 取決於你如何啓動過程中,你既可以: 設置通過Java對象的API的變量

https://docs.camunda.org/manual/7.5/user-guide/process-engine/variables/#java-object-api

或你,如果你使用一個REST調用,您可以請求主體中提供這些固定值:

https://docs.camunda.org/manual/7.5/reference/rest/process-definition/post-start-process-instance/

另一種簡單的解決辦法是用靜態值或枚舉保持所需要的值的類。

- 編輯 -

如果要使用輸入 - 輸出擴展添加這樣的事情您BPMN文件

<bpmn:process id="Process_1" isExecutable="false"> 
    <bpmn:extensionElements> 
    <camunda:inputOutput> 
     <camunda:inputParameter name="c">5</camunda:inputParameter> 
     <camunda:inputParameter name="d">10</camunda:inputParameter> 
     <camunda:inputParameter name="e">2</camunda:inputParameter> 
    </camunda:inputOutput> 
    </bpmn:extensionElements> 

這不能在camunda的圖表視圖來完成modeler,只需切換到進程的XML表示並添加extensionElement即可。

+0

感謝您分享information.I在想附加一些執行聽者這些服務任務。我們可以通過使用Execution listner來完成嗎?還有一件事我想問的是,我們在camunda建模器中有一些輸入/輸出和屬性,那有什麼用處以及如何使用它們? –

+0

我真的很感謝你的時間和精力。我正在考慮在我的camunda建模者(即內部過程模型本身)中定義這些變量。 在具有服務任務的camunda建模器中,我們可以附加一些輸入/輸出和擴展,我們也可以有一些屬性。我的問題是我們可以在那裏定義流程變量,如果不是那麼我們可以在哪裏以及如何使用它們? –

1

文檔顯示兩種不同的方式來存儲值:

Java對象的API 類型值API

我認爲使用Java對象API需要的Java對象實現Serializable接口?下面的代碼將打破,如果訂單對象沒有實現Serializable接口

com.example.Order order = new com.example.Order(); 
runtimeService.setVariable(execution.getId(), "order", order); 

com.example.Order retrievedOrder = (com.example.Order) runtimeService.getVariable(execution.getId(), "order"); 

==

我會用Java對象的格式如下

ObjectValue customerDataValue = Variables.objectValue(customerData) 
    .serializationDataFormat(Variables.SerializationDataFormats.JAVA) 
    .create(); 

execution.setVariable("someVariable", customerDataValue); 

customerdata指的是任何Java對象。但是,如果成員變量包含其他引用,則這些引用也需要可序列化。爲了避免這種情況,你會宣佈這些引用瞬態

更進一步,使用setVariableLocal方法,如果你不希望數據在DB中堅持