通常,在Decision中通过实现DecisionHandler接口的Handler类来进行 分支选择.
除此之外,还可以Decision中还可以使用expression_r(表达式).
Expression类似JSP中的EL表达式,不同之处是EL是${...},而Expression是#{...}的.除了使用在Decision中,还可以使用在
Action,assingments中.具体的语法可以参考这里http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSPIntro7.html
在jBPM中,jBPM中的流程变量,任务变量都可以被Expression访问到.这个Expression必须返回一个String类型的值,这个值对应Decision可选的分支中的一个分支的name.
下面通过一个例子来看看如何在Decision中使用Expression表达式
流程定义文件:
<?xml version="1.0"encoding="UTF-8"?>
<process-definition
xmlns="urn:jbpm.org:jpdl-3.1"name="decproc">
<start-statename="start">
<task name="task">
<controller>
<variable name="var1" access="read,write,required"mapped-name="变量1"></variable>
</controller>
</task>
<transition name=""to="判断"></transition>
</start-state>
<decisionname="判断"expression="#{var1>10?'tr1':'tr2'}">
<transition name="tr1"to="判断为真"></transition>
<transition name="tr2"to="判断为假"></transition>
</decision>
<task-nodename="判断为真">
<taskname="task1"></task>
<transition name=""to="end1"></transition>
</task-node>
<task-nodename="判断为假">
<taskname="task1"></task>
<transition name=""to="end1"></transition>
</task-node>
<end-statename="end1"></end-state>
</process-definition>
expression="#{var1>10?'tr1':'tr2'}"的意思就是如果任务变量的值大于10,则流程从"tr2"分支流向"判断为真"的节点去;如果小于10,则从"tr1"分支流向"判断为假"节点去
启动这个流程,给var1赋一个类型为Integer(或者其他数值类型)的值,decision就可以根据var1的值,自动地选择分支了.