簡體   English   中英

如何在 Camunda-BPM 中設置全局流程變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM