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活動。
發佈了1 篇原創文章 · 獲贊 0 · 訪問量 2885
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章