做一个带有分支的流向流程
在执行seperate状态的时候分成了200和400两种情况
描述文件的内容如下:
测试代码如下:
执行流程的结果如下:
使流程向下执行
executionservice.signalexecutionbyid();
该方法有多个重载:
processinstance signalexecutionbyid(string executionid);
//若在流程定义某一个节点没有分支时(只有一个transition时),调用此方法,可将流程继续向下执行 executionid为流程实例id
processinstance signalexecutionbyid(string executionid, string signalname);
//若在流程定义某一个节点有多个分支时(有多个transition时),调用此方法,可将流程沿着transition所指的方向向下执行
executionid为流程实例id, signalname为流程定义中transition节点的name属性的值
processinstance signalexecutionbyid(string executionid, string signalname, map<string, ?> parameters);
用于将流程沿着signalname方向(transition的name属性所指的方向)向下继续执行,在执行的过程中顺便传递参数parameters
processinstance signalexecutionbyid(string executionid, map<string, ?> parameters);
用于将流程向下继续执行,在执行的过程中顺便传递参数parameters
注:当一个节点有多个分支时,若要通过signalexecutionbyid()方法将流程向下执行必须明确指出signalname即(transition的name属性所指的方向),否则流程不会向下执行,仍会停留在当前节点。因为jbpm不确定流程该流向那个方向。
接下来是一个decision的例子,这个是一个分支判断的节点,相当于我们程序中的switch case
下面画一个选择向左还是向右的例子
定义文件如下:
其中有几种方式可以处理流程的走向
第一种,内置条件
即在流程定义中设置每一个transition的子节点condition,并为每一个condition填充expr属性
形如:
<condition expr="${coder=='left'}"></condition>
对应的测试流程如下,需要增加
如果map中order的值指定的有问题那么就会抛出异常
测试程序如下:
执行结果如图所示:
因为在开始的时候指定了流程处理的方向,所以流程向left方向自动执行。
第二种,更像switch case
在decision节点上指定
<decision g="252,204,48,48" name="exclusive1" expr="${towhere}">
修改代码为:
其它部分不变,可以看到结果和原来的相同。
第三种,配置handler子类
在流程定义中在decision节点内部配置<handler/>子节点,并设置该元素的class属性为你自己的类)该类实现了org.jbpm.api.jpdl.decisionhandler.你需要重写
string decide(openexecution execution);方法即可,在该方法最终返回decision活动后的下一个transition的name属性的值。
修改配置文件
添加handlerdecision并且实现decisionhandler
代码如下:
测试代码只需将map中的值进行简单修改即可