在Jbpm中,State节点是最基础的一个节点。即流程走到这个节点,经过短暂停留继续执行下去,而没有任何多余的操作。
在JPDL中,我们可以发现,定义一个state节点之后,按下ctrl+<,会发现其没有多余的属性。所以state节点只是停留节点。定义一个流程。我们测试state节点的操作
<?xml version="1.0" encoding="UTF-8"?>
<process key="state" name="state" xmlns="http://jbpm.org/4.4/jpdl">
<start g="233,6,48,48" name="start1">
<transition g="-51,-18" name="提交到A" to="节点A"/>
</start>
<end g="234,359,48,48" name="end1"/>
<state g="217,96,103,52" name="节点A">
<transition g="-70,-25" name="提交到B" to="节点B"/>
</state>
<state g="219,177,113,52" name="节点B">
<transition g="-70,-25" name="提交到C" to="节点C"/>
</state>
<state g="231,266,92,52" name="节点C">
<transition g="-62,-25" name="通过" to="end1"/>
</state>
</process>
在这个JPDL文件中我们定义了三个state节点。
package com.tgb.node.state;
import org.jbpm.api.ProcessInstance;
import com.tgb.video.JbpmTestCase;
import com.tgb.video.JbpmUtil;
public class TestState extends JbpmTestCase implements JbpmUtil {
@Override
public void deploy() {
super.startUp();
repositoryService.createDeployment().addResourceFromClasspath("com/tgb/node/state/state.jpdl.xml").deploy();
}
@Override
public void createInstance() {
super.startUp();
ProcessInstance processInstance = executionService.startProcessInstanceByKey("state");
print("流程实例ID" ,processInstance.getId());
}
@Override
public void getCurrectActivity() {
super.startUp();
String name = executionService.createProcessInstanceQuery().processInstanceId("state.170001").uniqueResult().findActiveActivityNames().toString();
print("流程当前节点",name);
}
@Override
public void getTask() {
// TODO Auto-generated method stub
}
@Override
public void completeTask() {
super.startUp();
//taskService.completeTask("");
executionService.signalExecutionById("state.230001");
}
}
我们部署流程后,通过ExecutionService创建流程实例。在获取流程实例后通过createProcessInstanceQuery来测试当前节点名称。
这个节点比较简单,唯一需要注意的是完成任务时,用的是同一个节点ID。即整个流程向下执行都通过唯一的一个流程实例。