decision
decision活动会运行并判断其中的每一个transition元素里的转移条件。当遇到一个transition的condition为true时,那么流程立即流向这个transition。流程引擎不会等待decision活动,它会马上执行这个decision。
expr属性:用一个三目运算符来判断到底要流向拿个transition。
transition元素的condition子元素:用expr来判断是否流向这个transition。
decision活动的handler子元素:如果以上两种方法还是不能满足我们的要求,就可以通过实现DecisionHandler接口来在Java代码中决定到底要流向哪个transition。
1.条件
决策节点会顺序执行并判断每一个transition里的条件。当遇到一个条件为true或者没有设置判断条件的transition时,这个transition就会被执行。
demo如下:
decision01.jpdl.xml
<?xml version="1.0" encoding="UTF-8"?>
<process name="decision01" xmlns="http://jbpm.org/4.4/jpdl">
<start g="20,135,48,48" name="start1">
<transition g="-42,-14" name="to exclusive1" to="exclusive1"/>
</start>
<decision g="130,134,48,48" name="exclusive1">
<transition g="154,83:24,-16" name="to readbook" to="readbook">
<condition expr="#{reason == 'work'}"></condition>
</transition>
<transition g="-40,-14" name="to watchgames" to="watchgames">
<condition expr="#{reason == 'football'}"></condition>
</transition>
<transition g="156,246:41,-14" name="to sleep" to="sleep"/>
</decision>
<state g="282,56,92,52" name="readbook"/>
<state g="280,135,92,52" name="watchgames"/>
<state g="284,218,92,52" name="sleep"/>
</process>
测试代码如下:
package com.itstudio.jbpm.decision.demo;
import java.util.HashMap;
import java.util.Map;
import javax.rmi.PortableRemoteObject;
import org.jbpm.api.Configuration;
import org.jbpm.api.ExecutionService;
import org.jbpm.api.HistoryService;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.ProcessInstance;
import org.jbpm.api.Rep