1.建立一个jbpm project,这里就不作讲解。
2.在项目的jpdl目录下建立一个名为helloworld的process Definition.也就是定义一个流程。并打开流程设计器。
3.在流程设计器中设计一个简单的流程图,如下图
[img]http://dl.iteye.com/upload/attachment/453709/82a6534a-1f67-35c9-b7a5-62d079e7d470.jpg[/img]
代码如下:
4.节点讲解
Start节点:开始
End节点:结束
Node节点:自动类型的节点.
在该节点里可以定义一个Action,当流程到达该节点时会触发该Action的执行,然后流程就会停留在该节点上。
如果没有定义Action,到达该节点后不会停留,如果有定义事件就会触发相关事件,然后流转到下一个节点。
State节点:当流程走到State节点后不会自动往下运行,而会处于等待状态,直到通过代码触发后才会流转到下一个节点。
Transition:是流程节点之间流转路径,可以使流程从一个节点流转到另一个节点。
5.测试helloworld流程
2.在项目的jpdl目录下建立一个名为helloworld的process Definition.也就是定义一个流程。并打开流程设计器。
3.在流程设计器中设计一个简单的流程图,如下图
[img]http://dl.iteye.com/upload/attachment/453709/82a6534a-1f67-35c9-b7a5-62d079e7d470.jpg[/img]
代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="urn:jbpm.org:jpdl-3.2" name="helloworld">
<start-state name="start-state1">
<transition to="state1"></transition>
</start-state>
<state name="state1">
<transition to="node1"></transition>
</state>
<node name="node1">
<transition to="state2"></transition>
</node>
<state name="state2">
<transition to="end-state1"></transition>
</state>
<end-state name="end-state1"></end-state>
</process-definition>
4.节点讲解
Start节点:开始
End节点:结束
Node节点:自动类型的节点.
在该节点里可以定义一个Action,当流程到达该节点时会触发该Action的执行,然后流程就会停留在该节点上。
如果没有定义Action,到达该节点后不会停留,如果有定义事件就会触发相关事件,然后流转到下一个节点。
State节点:当流程走到State节点后不会自动往下运行,而会处于等待状态,直到通过代码触发后才会流转到下一个节点。
Transition:是流程节点之间流转路径,可以使流程从一个节点流转到另一个节点。
5.测试helloworld流程
package com.test;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.graph.exe.Token;
import org.junit.Test;
public class HelloWroldProcessTest {
@Test
public void testSimpleProcess() {
//解析流程模板对应的XML文件来创建一个流程模板对象
ProcessDefinition processDefinition = ProcessDefinition
.parseXmlResource("helloworld/processdefinition.xml");
//通过processDefinition创建一个流程实例
ProcessInstance processInstance = processDefinition
.createProcessInstance();
//通过绝对路径读取流程模板XML文件生成流程模板对象
// String processDefinitionFileLocation="D://myeclipse8.5/workspace/jpbm-test/src/main/jpdl/helloworld/processdefinition.xml";
// try {
// InputStream inputStream = new FileInputStream(new File(processDefinitionFileLocation));
// ProcessDefinition processDefinition = ProcessDefinition.parseXmlInputStream(inputStream);
// } catch (FileNotFoundException e) {
// e.printStackTrace();
// }
Token token = processInstance.getRootToken();
//因为只建立了流程实例,流程实例并没有向下流转,所以该实例停留在start-state1节点上
System.out.println("1 当前流程所处的节点名称:" + token.getNode().getName());
//让流程实例向下流转一步
token.signal();
//state1
System.out.println("2 当前流程所处的节点名称:" + token.getNode().getName());
token.signal();
//自动执行node1节点,流程向下流转,停留在state2
System.out.println("3 当前流程所处的节点名称:" + token.getNode().getName());
token.signal();
System.out.println("4 当前流程所处的节点名称:" + token.getNode().getName());
//打印出当前流程是否结束
System.out.println("5 当前流程状态:" + token.getProcessInstance().hasEnded());
}
}