[英]How to set global process variables in Camunda-BPM?
我有一個簡單的 bpmn 流程,其中我使用了 2 個服務任務,我正在使用processEngine.getRuntimeService().startProcessInstanceByKey("Process_1", variables);
執行我的流程processEngine.getRuntimeService().startProcessInstanceByKey("Process_1", variables);
我的變量如下:
Map variables = new HashMap();
variables.put("a", 2);
variables.put("b", 5);
服務任務 1 實現了一個Addition
java 類,服務任務 2 實現了一個Multiplication
類。
現在我想要 3 個變量(常量) c = 5
, d = 10
, e = 2
以便我可以將c
用於服務任務 1,這樣Addition
我可以使用這個變量,同樣我想在我的Multiplication
使用d
類,並且e
應該是全局的,以便我可以在兩個類中使用它。
任何人都可以指導我嗎?
作為快速修復,您可以將設置服務任務作為預填充流程變量的流程的第一個任務。 根據您啟動進程的方式,您可以:通過 java-object-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/
另一個簡單的解決方案是使用靜態值的類或保存所需值的枚舉。
--編輯--
如果您想使用 inputOutput 擴展名,請在您的 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 建模器的圖表視圖中完成,只需切換到流程的XML 表示並添加extensionElement。
該文檔顯示了兩種不同的存儲值的方法:
Java 對象 api 類型化值 api
我認為使用 Java 對象 api 需要 java 對象來實現可序列化接口? 如果 Order 對象沒有實現 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 對象。 但是,如果成員變量包含一些其他引用,則這些引用也需要可序列化。 為避免這種情況,您必須將這些引用聲明為瞬態
此外,如果您不想將數據保存在 DB 中,請使用 setVariableLocal 方法
將變量創建為全局變量: org.camunda.bpm.engine.variable.Variables.putValue("keyName", VariableType);
獲取全局變量: VariableType value = (VariableType) delegateExecution.getVariable("getKey");
注意:您的 dto 必須是可序列化的,否則它會拋出序列化錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.