在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>
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"); } }
这个节点比较简单,唯一需要注意的是完成任务时,用的是同一个节点ID。即整个流程向下执行都通过唯一的一个流程实例。