jBPM4.0的用户指南(五-2)

[size=x-large]续第5章 JPDL[/size]

[size=large]5.2.3. exclusive唯一性[/size]

在多个选择中选择一条路径。也可以当做是一个决定。一个外挂活动拥有很多个向外的跳转。当一个流向到达一个外挂活动时,会自动评估并决定交给哪个向外的跳转。
[size=medium]5.2.3.1. exclusive唯一性条件[/size]

exclusive中会运行并判断每一个transition里的判断条件。当遇到一个嵌套条件是true或者没有设置判断条件的跳转,那么跳转就会被运行。

[size=medium]表 5.5. exclusive.transition.condition 属性[/size]
属性 类型 默认值 是否必须? 描述
expr expression required必须 将被运行的指定脚本
lang expression language 从第 7 章 Scripting脚本配置里得到的默认代表性语言(default-expression-language) 可选 指定expr中执行的脚本语言的种类

例子:
流程处理的唯一性条件例子

图 5.3. 流程处理的唯一性条件例子

<process name="ExclusiveConditions" xmlns="http://jbpm.org/4/jbpdl">
<start>
<transition to="evaluate document" />
</start>

<exclusive name="evaluate document">
<transition to="submit document">
<condition expr="#{content=="good"}" />
</transition>
<transition to="try again">
<condition expr="#{content=="not so good"}">
</transition>
<transition to="give up" />
</exclusive>

<state name="submit document" />

<state name="try again" />

<state name="give up" />
</process>


[size=medium]5.2.3.2. exclusive expression唯一性表达式[/size]

exclusive表达式返回类型为字符串的向外跳转的名字。
[size=medium]
表 5.6. 外挂属性[/size]
属性 类型 默认值 是否必须? 描述
expr expression required必须 将被运行的指定脚本
lang expression language 从第 7 章 Scripting脚本配置里得到的默认指定的脚本语言(default-expression-language) 可选 指定expr中执行的脚本语言的种类

例子:
流程处理的外挂代表例子

图 5.4. 流程处理的外挂代表例子

<process name="Poolcar" xmlns="http://jbpm.org/4/jpdl">
<start>
<transition to="How far?" />
</start>

<exclusive name="How far?" expr="#{distance}">
<transition name="far" to="Big car" />
<transition name="nearby" to="Small car" />
</exclusive>

<state name="Big car" />
<state name="Small car" />
</process>


当你启动一个新的流程实例,代码如下:

Map<String,Object> variables = new HashMap<String,Object>();
variables.put("distance","far");
Execution execution = executionService.startProcessInstanceByKey("Poolcar", variables);


然后流向会执行Big car
[size=medium]5.2.3.3. Exclusive handler唯一性管理[/size]

唯一性管理是继承了ExclusiveHandler接口的java类。唯一性管理负责向外跳转的选择。

public interface ExclusiveHandler{
String select(OpenExecution execution);
}


这个handler被列为exclusive的子元素。

[size=medium]表 5.7. exclusive.handler 属性[/size]
属性 类型 默认值 是否必须? 描述
class classname required必须 handler的完整类名

下面是一个唯一性使用ExclusiveHandler的流程处理例子:
流程处理的exclusive管理例子

图 5.5. 流程处理的exclusive管理例子

<process name="Exclusive Handler" xmlns="http://jbpm.org/4/jpdl">
<start>
<transition to="exclusive document" />
</start>

<exclusive name="exclusive document">
<handler class="org.jbpm.examples.exclusive.handler.ContentEvaluation" />
<transition name="good" to="submit document" />
<transition name="bad" to="try again" />
<transition name="ugly" to="give up" />

<state name="submit document" />

<state name="try again" />

<state name="give up" />
</exclusive>
</process>


下面是ContentEvalation类:

public class ContentEvalation implement ExclusiveHandler {
public select(OpenExecution execution) {
String content = execution.getVariable("content");

if (content.equals("you're great")) {
return "good";
} else if (content.equals("you gotta improve")) {
return bad;
}

return "ugly";
}
}


当你启动流程处理实例,并为变量content提供值you're great时,ContentEvalation就会返回字符串good,流程处理实例便会到达Submit document活动。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值