processengine 描述一個引擎來創建和解讀一個進程的內存結構。此存儲器中表示形式基於節點。要創建一個正確的對象樹,一個 processdefinition.xsd 文件是使用 JAXB 。這種 processing 的結果是一個 map ,涉及節點和它們的 Id。下一個進程的節點標識的信息以不一樣的方式存儲在不一樣的節點上。wait、notify、 和 split 節點已列出它們下一個節點。在可選的狀況先使用 action 節點。它的執行 process 路徑,描述以下:java
根據業務流程圖建立 process XML 文件spring
<?xml version="1.0" encoding="utf-8"?> <process xmlns="http://www.hybris.de/xsd/processdefinition" name="Example" start="Action1"> <action id="Action1" bean="Action1"> <transition name="OK" to="Action2"/> <transition name="NOK" to="Action3"/> </action> <action id="Action2" bean="Action2"> <transition name="OK" to="Action4"/> </action> <action id="Action3" bean="Action3"> <transition name="OK" to="Action4"/> </action> <action id="Action4" bean="Action4"> <transition name="OK" to="success"/> </action> <end id="success" state="SUCCEEDED">Everything was fine</end> </process>
在 your_extension_name-spring.xml 文件中定義對應的beanside
<bean id="Action1" class="org.training.actions.Action1" parent="abstractAction"/> <bean id="Action2" class="org.training.actions.Action2" parent="abstractAction"/> <bean id="Action3" class="org.training.actions.Action3" parent="abstractAction"/> <bean id="Action4" class="org.training.actions.Action4" parent="abstractAction"/>
例子:Action1.javaspa
package org.training.actions; public class Action1 extends AbstractSimpleDecisionAction { @Override public Transition executeAction(final BusinessProcessModel process) { if(.......) { return Transition.NOK; } else { return Transition.OK; } } }
若是要建立新的 process 實例,從 BusinessProcessService 服務調用 createProcess() 方法。隨後,您能夠運行此服務使用 startProcess() 方法。。若是以前沒有建立一個ProcessDefinition,在這個一步ProcessDefinitionFactory 將會建立一個。code
businessProcessService.startProcess(id, processName);
ProcessDefinition 定義了一組節點,經過它們的 Id 與彼此相連。要使 processDefinition 在 ProcessDefinitionFactory 中可見,就要在spring中聲明爲resource。orm
<bean id="placeorderProcessDefinitionResource" class="de.hybris.platform.processengine.definition.ProcessDefinitionResource" > <property name="resource" value="classpath:/processdemo/placeorder.xml"/> </bean>
下面的表解釋了當前的<bean>元素屬性的含義。xml
屬性 | 描述 |
---|---|
id | 必須是 Spring 中的惟一值 |
class | 這個屬性應該始終是,它是ProcessDefinitionFactory指示器;用於搜索 beans 在 Spring 上下文爲 process 定義的位置。 |
<bean>元素包含<property>元素,下面的表格說明 <property>元素屬性的含義。對象
屬性 | 描述 |
---|---|
name | 這個 name 屬性是: resource .該名稱表示此屬性的值,在文件系統中的定義 process XML文件的位置。 |
value | 指 process 定義 XML 文件的實際路徑。 |
Action接口
Action 的 bean 也須要在 spring 中聲明進程
<bean id="checkOrder" class="de.hybris.platform.fulfilment.actions.CheckOrder" parent="abstractAction"> <property name="checkOrderService" ref="checkOrderService"/> </bean>
下面的表解釋了當前的<bean>元素屬性的含義。
屬性 | 描述 |
---|---|
id | 此屬性是重要的,由於它涉及到與 action 節點的 Spring bean。 |
class | 該屬性指向實現 action 接口的類名稱。 |
parent | 父類。 |
process 的定義須要寫入 XML 文件中,這個文件必須在 processdefinition.xsd 可以定義,每一個processdefinition開始都要有一個頭部。
<?xml version="1.0"encoding="utf-8"?> <process xmlns="http://www.hybris.de/xsd/processdefinition" name="consignmentFulfilmentSubprocess" start="waitBeforeTransmission" onError="onError" processClass="de.hybris.platform.fulfilment.model.ConsignmentProcessModel"> ... ... </process>
屬性 | 描述 |
---|---|
name | 此屬性告訴 process 名稱。 |
start | 此屬性告訴起始節點的ID。 |
processClass | 此屬性是實現進程上下文的類。而正常的是擴展此類爲額外的字段,你能夠在那裏存儲額外的 process 參數。 |
onError | 此屬性給出了一個錯誤發生時調用的節點。 |
在定義 process 以後,必須將內容添加到 process 中。一個 process 是由一組節點組成,它表示在一個給定的 process 中的步驟。每一個節點,不包括結束節點,工做流中須要定義這節點有下一步的調用。在每一個節點中最重要的字段是它的ID。這是在工做流中加入兩個節點的鍵。
Action Node
Action節點是實現 process 邏輯的節點。實例
<action id="isProcessCompleted" bean="subprocessesCompleted"> <transition name="OK" to="sendOrderCompletedNotification"/> <transition name="NOK" to="waitForWarehouseSubprocessEnd"/> </action>
bean 的屬性指向在 spring.xml 文件中聲明的 bean id。
下面<transition>的屬性介紹
屬性 | 描述 |
name | 表示返回的結果 |
to | 根據name的結果,告訴processEngine應該轉到的process |
7.Wait Node
等待節點用於與外部環境進行通訊。使用此節點,若是某個地方你須要等待外部進程的結果。