jbpm4.3總結

2.9任務管理2.9.1 分配任務

流程定義時,分配任務有多種方法:

1. 直接分配給成員:assignee="user1" 可以同時分配多人:candidate-users("user1","user2","user3")

2. 分配給組:candidate-groups="it_dept" 分配給多個組:用逗號隔開部門id組列表。

3. 利用任務泳道進行分配:

1.任務泳道分配的特點:一個單子可以有多個人填寫,一旦A填寫了,別人就不能 填寫。而且當A提交的單子被退回的時候還應該有A來繼續。

2.泳道定義:<swimlane candidate-groups="it_dept" name="test"/>,也可以爲 candidate-users.

3.使用泳道:在task定義時 swimlane="test" 使用泳道,任務分配給it_dept部  門

4.使用任務分配器assignment-handler標籤 使用方法:<assignment-handler class = "">

<field name="test"><string value="ttttttt"/></field>

</assignment-handler>

在class裏面動態分配assignable.setAssignee(test);

通過傳參數,設置 test的值。實現動態分配

 

2.9.2 成員任務列表

List<Task> taskList = taskService.findPersonalTasks(username);

2.9.3 組成員任務列表

List<Task> taskList = taskService.findGroupTasks(username);

由於任務有轉交,加簽等功能,所以一個人想要得到自己的任務就包括 組成員任務和 成員任務兩部分組成。

2.9.4 執行任務

得到任務列表後,如果任務有對應的表單,就先跳到表單,填寫,然後執行。表單的綁定:在task標籤中使用 form = "xxxx.jsp",執行語句:

taskService.completeTask(taskId,"toFork1",map);

taskId 是任務id 

toFork1 是outcome,即任務的出口

Map 是 傳遞的任務參數,通過任務就可以得到這些參數:

得到指定的參數值:taskService.getVariable(taskId, "user")

    得到所有的參數:taskService.getvariableNames(java.lang.String.taskId);

2.9.5 轉交任務

taskService.assignTask(taskId,"用戶Id");

2.9.6 任務加簽

taskService.addTaskParticipatingUser(taskId,"用戶Id",Participation.CANDIDATE);

2.9.7 fork  join 異步分支

<fork g="276,239,48,48" name="fork1">

      <transition g="-54,-18" name="to 計劃部" to="計劃部"/>

      <transition g="-54,-18" name="to 法務部" to="法務部"/>

      <transition g="-64,-18" name="to IT規劃部" to="IT規劃部"/>

</fork>

Fork join 處理併發的情況,分配給的三個部門當執行完後,都流入到join標籤。

Join標籤屬性: multiplicity="3" multiplicity 的意思是當有幾個執行到了join時,流程繼續。

2.9.8 decision 決定條件

decision中會運行並判斷每一個transition 裏的判斷條件。 當遇到一個嵌套條件是true 或者沒有

設置判斷條件的轉移,那麼轉移就會被運行。

例子:當天數大於3天,總經理審批 否則 結束

<decision expr="#{day > 3 ? 'to 總經理' : 'to 結束}" g="361,280,48,48"  name="exclusive1">

      <transition g="-42,-18" name="to end1" to="end1"/>

      <transition g="-44,-18" name="to task2" to="總經理審覈"/>

   </decision> 

Decision屬性: expr 表達式 必填

2.9.9 Events 事件

 當一個流程通過這一點時,事件監聽器就會被提醒。

用法:在流程的任何地方都可以加入監聽 

<on event="start"> 

<event-listener class="org.jbpm.examples.eventlistener.LogListener"> 

// 參數

      <field name="msg"><string value="start on process definition"/></field> 

    </event-listener> 

2.9.10 JPDL簡 介1. Start state

開始節點 流程開始,每個流程定義文件 只能有一個開始節點。

2. Task node

任務節點  人工參與,調用processEngine.getTaskService().complete()完 成任務

3.State node

狀態節點

需要使用execution.signalExcution()觸發流程流轉

4. Descision Node

流程流向判斷節點

指定condition條件或者DesisionHandler

5. Fork node

分支節點,任務並行處理

6.Join node

任務聚合節點

7. End State

任務結束節點 可以有多個結束節點

8. Transition

控制任務流向

9. Event

事件觸發 可以在任何節點加事件觸發處理

 

具體參看${JPBM.HOME}/doc/userguide文檔 關於JPDL的描述

3數據庫表說明

(1)JBPM4_DEPLOYMENT、

(2)JBPM4_DEPLOYPROP

(3)JBPM4_LOB:
存儲 上傳一個包含png和jpdl.xml的zip包 的相關數據 
jbpm4_deployment表多了一條記錄 
jbpm4_deployprop表多了四條記錄,對應langid,pdid,pdkey,pdversion 
jbpm4_lob 表多了二條記錄,保存流程圖png圖片和jpdl.xml 
(4)JBPM4_HIST_PROCINST與(5)JBPM4_HIST_ACTINST
分別存放的是Process Instance、Activity Instance的歷史記錄。 
(6)JBPM4_EXECUTION
主要是存放JBPM4的執行信息,Execution機制代替了JBPM3的Token機制 
(7)JBPM4_TASK
存放需要人來完成的Activities,需要人來參與完成的Activity被稱爲Task。 
(8)JBPM4_PARTICIPATION
存放Participation的信息,Participation的種類有Candidate、 Client、Owner、Replaced  Assignee和Viewer。而具體的Participation既可以是單一用戶,也可以是用戶組。 
(9)JBPM4_SWIMLANE
Swim Lane是一種Runtime Process Role。通過Swim Lane,多個Task可以一次分配到 同一Actor身上。 
(10)JBPM4_VARIABLE 
存的是進行時的臨時變量。 
(11)JBPM4_HIST_DETAIL
保存Variable的變更記錄。 
(12)JBPM4_HIST_VAR
保存歷史的變量。 
(13)JBPM4_HIST_TASK
Task的歷史信息。 
(14)JBPM4_ID_GROUP(15)JBPM_ID_MEMBERSHIP(16)JBPM4_ID_USER 
這三張表很常見了,基本的權限控制,關於用戶認證方面建議還是自己開發一套,JBPM4 的功能太簡單了,使用中有很多需要難以滿足。 
(17)JBPM4_JOB 
存放的是Timer的定義。 
(18)JBPM4_PROPERTY

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章