jBPM4.0的用戶指南(五-1)

第5章的內容太多了,所以我分開寫了

[size=x-large]第 5 章 jPDL[/size]

jPDL文件描述的是流程的過程,這篇文章也可以作爲jPDL的快速參考文檔。

下面是一個jPDL流程文件的例子:

<?xml encoding="utf-8"?>
<process name="Purchase" xmlns="http://jbpm.org/4/jpdl">
<start>
<transition to="Verify supplier" />
</start>
<state name="Verify supplier">
<transition name="Supplier ok" to="Check supplier data" />
<transition name="Supplier not ok" to="Error" />
</state>
<exclusive name="Check supplier data">
<transition name="nok" to="Error" />
<transition name="ok" to="Completed">
</exclusive>
<end name="Completed" />
<end name="Error" />
</process>


[size=large]5.1. process流程處理[/size]

頂級元素(element)是流程處理定義

[size=medium]表 5.1. process流程處理的屬性[/size]
屬性 類型 默認值 是否必須 描述
name名稱 文本 必須 在與用戶交互時,作爲流程名字顯示的一個名字或是標籤。
key鍵 字母或數字字符 如果省略,key會被非字母和非數字的字符替換。 可選(optional) 用來辨別不同的流程定義。擁有同一個key的流程會有多個版本。對於所有已發佈的流程版本,key:name這種組合都必須是完全一樣的。
version版本 整型 比已部署的key相同的流程版本號高1,如果還沒有與之相同的key的流程被部署,那麼版本就從1開始。 可選 流程的版本號

[size=medium]表 5.2. process流程的元素[/size]
元素 個數 描述
description描述 0個或1個 描述文本
activities活動 至少1個 流程中會有很多活動,至少要有1個是啓動的活動。

[size=large]5.2. Activities活動[/size]

BPMN(Business Process Modeling Notation,業務流程建模符號):我們在這裏不僅涉及了BPMN活動,而且還介紹了BPMN的事件(events)和網關(gateways)
[size=medium]5.2.1. start啓動[/size]

簡單的說是流程啓動的流向(execution),準確地說是流程的一個啓動活動(activity)。一個流程至少有一個啓動(start)活動(activity),一個啓動活動必須有一個向外的跳轉(transition),這個跳轉會在流程啓動的時候被執行。

已知的限制:一個流程處理只能有一個啓動節點(start)。
[size=medium]
表 5.3. start啓動的屬性[/size]
屬性 類型 默認值 是否必須 描述
name名稱 文本 可選 活動的名字,在啓動活動沒有內部的跳轉(transition)時,name名稱是可選的。

[size=medium]表 5.4. start啓動的元素[/size]
元素 個數 描述
transition跳轉 1 向外的跳轉
[size=medium]
5.2.2. State狀態節點[/size]

一個等待狀態節點。流程處理的流向會在外部觸發器調用提供的API之前一直等待。狀態節點和其他的活動不一樣,它沒有其他任何屬性或元素。
[size=small]5.2.2.1. 序列狀態節點[/size]

讓我們看一個用序列連接狀態和跳轉的例子。
序列狀態節點

圖 5.1. 序列狀態節點

<process name="StateSequence" xmlns="http://jbpm.org/4/jpdl">
<start>
<transition to="a" />
</start>
<state name="a">
<transition to="b" />
</state>
<state name="b">
<transition to="c" />
</state>
<state name="c" />
</process>


下列代碼將啓動一個流向:

Execution execution = executionService.startProcessInstanceByKey("StateSequence");


創建的流程處理實例會停留在狀態節點a的位置,使用signalExecution的方法就會觸發一個外部觸發器。

String executionId = exectuion.getId();
execution = executionService.signalExectuionById(executionId);


[size=small]5.2.2.2. 可選擇的狀態節點
[/size]
在第2個狀態節點的例子裏,我們將演示如何使用狀態節點實現路徑的選擇。
狀態節點中的選擇

圖 5.2. 狀態節點中的選擇

<process name="State" xmlns="http://jbpm.org/4/jpdl">
<start>
<transition to="wait for response" />
</start>
<state name="wait for response">
<transition name="accept" to="submit document" />
<transition name="reject" to="try again" />
</state>
<sate name="submit document" />
<state name="try again" />


讓我們在這個流程處理定義裏啓動一個新的流程實例。

Execution execution = executionService.startProcessInstanceByKey("StateSequence");


現在,流向到達wait for response狀態節點了。流向會一直等待到外部觸發器的出現。這裏的狀態節點擁有多個向外的跳轉,外部觸發器將爲向外的跳轉提供不同的信號名(signalName),下面我們將提供accept信號名(signalName):

executionService.signalExecutionById(executionId,"accept");


流向會沿着名字是accept的向外的跳轉繼續進行。同樣,當使用reject作爲參數觸發signalExecutionXxx方法時。流向會沿着名字是reject的向外的跳轉繼續進行。
發佈了1 篇原創文章 · 獲贊 0 · 訪問量 2896
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章