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
等待节点用于与外部环境进行通讯。使用此节点,若是某个地方你须要等待外部进程的结果。