我用的版本是jBPM4.3。
《jBPM user guide》6.2.7 sub-process小节的Table 6.17说:outcome是sub-process的一个属性;它的类型是表达式;当(sub-process的)transition指定了outcome-value子元素时必填;sub-process结束时,outcome这个表达式会被计算,得到的值用来匹配transition
从jBPM自带的示例程序(jbpm4.3/examples/src/org.jbpm.examples.subprocess.outcomevalue)来看:
<sub-process name="review" outcome="#{result}" sub-process-key="SubProcessReview"> <transition name="ok" to="next step"> <transition name="nok" to="update"/> <transition name="reject" to="close"/> </sub-process>
如果"#{result}"的值为"ok",sub-process结束后就会走name="ok"这个transition。这整个过程与outcome-value无关。
但《jBPM user guide》6.2.7 sub-process小节的Table 6.21又说了,outcome-value是transition的一个子元素,如果outcome的值与之匹配,则sub-process结束后就会走这个transition。但是jBPM中又没有这样的示例程序。
我自己做了些试验也都没法实现outcome和outcome-value匹配这种情况。
现在完全不清楚outcome-value这个子元素到底该怎么用……
P.S. 问答频道的人气好少啊,我只好又copy到论坛来了……
上传了patch,可以解决这个问题。附带对应的单元测试。
https://jira.jboss.org/browse/JBPM-2867
惭愧,现在才知道原来还有outcome-value这种情况。
根据jbpm-4.3的源代码来看,outcome-value是专门为了搞定非String类型返回值的情况来设定的,如果outcome="#{}"的结果不是String类型,就要为transition指定outcome-value来设置对应关系。
examples中确实没有对应实例,请在jbpm jira上提交一个issue,以便之后补充实例。谢谢。
辛苦了,有了issue就好办了,等我今天忙完了手头的,就上去研究一下,等有了结果就通知你。:)
一直抱NullPointerException。估计是一个bug。等有了更进一步的解释再来通知。