流程实例流到State状态活动时,就陷入了一个中断、等待状态,必须得收到外部的干预操作后才能继续运行,
最简单的State流程图如下
流程XML代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<process name="helloworld" xmlns="http://jbpm.org/4.4/jpdl"> <start g="123,78,48,48" name="start1"> <transition name="to state1" to="state1" g="-56,-22" /> </start> <end g="130,313,68,48" name="end1" /> <state g="92,181,122,52" name="state1"> <transition g="-50,-22" name="to end1" to="end1" /> </state> </process> |
测试代码如下:
/** * 发起流程实例 */ public void test01StartInstence() {//
HashMap<String,Object> parm = new HashMap<String,Object>(); parm.put("MyId", "13000000000"); parm.put("MyName", "liuyan"); parm.put("MyDate", new Date());
ProcessInstance processInstance = executionService .startProcessInstanceById("helloworld-1",parm);
System.out.println(processInstance); }
/** * 继续往下执行流程实例 */ public void test02NextInstence() {
ProcessInstance pi = executionService .signalExecutionById("helloworld.10001");
System.out.println(pi.isEnded()); } |
可以看到,通过
ProcessInstance pi = executionService.signalExecutionById("helloworld.10001");方法将流程继续执行下去,这里就是外部干预了,之后流程归入END节点。
下面可以看一下可以选择不同的State的流程,流程图如下:
代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<process name="StateChoice" xmlns="http://jbpm.org/4.4/jpdl"> <start name="start1" g="35,96,96,48"> <transition name="to wait" to="wait" g="-44,-22" /> </start> <state name="wait" g="131,97,154,52"> <transition name="ok" to="OK" g="-29,-18" /> <transition name="canle" to="Canle" g="-6,-21" /> </state> <state name="OK" g="59,223,92,52" /> <state name="Canle" g="251,223,92,52" /> </process> |
测试代码如下:
// 开始process流程 ProcessInstance processInstance = executionService .startProcessInstanceByKey("StateChoice");
// 流程实例的ID String eid = processInstance.getProcessInstance().getId();
String pid = processInstance.getId();
processInstance= executionService.createProcessInstanceQuery().processInstanceId(pid).uniqueResult();
processInstance = executionService.signalExecutionById(eid, "ok");
boolean isAction = processInstance.isActive("OK");
System.out.println(isAction); |