流程定義時(shí),分配任務(wù)有多種方法:
1. 直接分配給成員:assignee="user1" 可以同時(shí)分配多人:candidate-users("user1","user2","user3")
2. 分配給組:candidate-groups="it_dept" 分配給多個(gè)組:用逗號(hào)隔開部門id組列表。
3. 利用任務(wù)泳道進(jìn)行分配:
1.任務(wù)泳道分配的特點(diǎn):一個(gè)單子可以有多個(gè)人填寫,一旦A填寫了,別人就不能 填寫。而且當(dāng)A提交的單子被退回的時(shí)候還應(yīng)該有A來繼續(xù)。
2.泳道定義:<swimlane candidate-groups="it_dept" name="test"/>,也可以為 candidate-users.
3.使用泳道:在task定義時(shí) swimlane="test" 使用泳道,任務(wù)分配給it_dept部 門
4.使用任務(wù)分配器assignment-handler標(biāo)簽 使用方法:<assignment-handler class = "">
<field name="test"><string value="ttttttt"/></field>
</assignment-handler>
在class里面動(dòng)態(tài)分配assignable.setAssignee(test);
通過傳參數(shù),設(shè)置 test的值。實(shí)現(xiàn)動(dòng)態(tài)分配
List<Task> taskList = taskService.findPersonalTasks(username);
List<Task> taskList = taskService.findGroupTasks(username);
由于任務(wù)有轉(zhuǎn)交,加簽等功能,所以一個(gè)人想要得到自己的任務(wù)就包括 組成員任務(wù)和 成員任務(wù)兩部分組成。
得到任務(wù)列表后,如果任務(wù)有對(duì)應(yīng)的表單,就先跳到表單,填寫,然后執(zhí)行。表單的綁定:在task標(biāo)簽中使用 form = "xxxx.jsp",執(zhí)行語句:
taskService.completeTask(taskId,"toFork1",map);
taskId 是任務(wù)id
toFork1 是outcome,即任務(wù)的出口
Map 是 傳遞的任務(wù)參數(shù),通過任務(wù)就可以得到這些參數(shù):
得到指定的參數(shù)值:taskService.getVariable(taskId, "user")
得到所有的參數(shù):taskService.getvariableNames(java.lang.String.taskId);
taskService.assignTask(taskId,"用戶Id");
taskService.addTaskParticipatingUser(taskId,"用戶Id",Participation.CANDIDATE);
<fork g="276,239,48,48" name="fork1">
<transition g="-54,-18" name="to 計(jì)劃部" to="計(jì)劃部"/>
<transition g="-54,-18" name="to 法務(wù)部" to="法務(wù)部"/>
<transition g="-64,-18" name="to IT規(guī)劃部" to="IT規(guī)劃部"/>
</fork>
Fork join 處理并發(fā)的情況,分配給的三個(gè)部門當(dāng)執(zhí)行完后,都流入到join標(biāo)簽。
Join標(biāo)簽屬性: multiplicity="3" multiplicity 的意思是當(dāng)有幾個(gè)執(zhí)行到了join時(shí),流程繼續(xù)。
decision中會(huì)運(yùn)行并判斷每一個(gè)transition 里的判斷條件。 當(dāng)遇到一個(gè)嵌套條件是true 或者沒有
設(shè)置判斷條件的轉(zhuǎn)移,那么轉(zhuǎn)移就會(huì)被運(yùn)行。
例子:當(dāng)天數(shù)大于3天,總經(jīng)理審批 否則 結(jié)束
<decision expr="#{day > 3 ? 'to 總經(jīng)理' : 'to 結(jié)束}" g="361,280,48,48" name="exclusive1">
<transition g="-42,-18" name="to end1" to="end1"/>
<transition g="-44,-18" name="to task2" to="總經(jīng)理審核"/>
</decision>
Decision屬性: expr 表達(dá)式 必填
當(dāng)一個(gè)流程通過這一點(diǎn)時(shí),事件監(jiān)聽器就會(huì)被提醒。
用法:在流程的任何地方都可以加入監(jiān)聽
<on event="start">
<event-listener class="org.jbpm.examples.eventlistener.LogListener">
// 參數(shù)
<field name="msg"><string value="start on process definition"/></field>
</event-listener>
開始節(jié)點(diǎn) 流程開始,每個(gè)流程定義文件 只能有一個(gè)開始節(jié)點(diǎn)。
任務(wù)節(jié)點(diǎn) 人工參與,調(diào)用processEngine.getTaskService().complete()完 成任務(wù)
狀態(tài)節(jié)點(diǎn)
需要使用execution.signalExcution()觸發(fā)流程流轉(zhuǎn)
流程流向判斷節(jié)點(diǎn)
指定condition條件或者DesisionHandler
分支節(jié)點(diǎn),任務(wù)并行處理
任務(wù)聚合節(jié)點(diǎn)
任務(wù)結(jié)束節(jié)點(diǎn) 可以有多個(gè)結(jié)束節(jié)點(diǎn)
控制任務(wù)流向
事件觸發(fā) 可以在任何節(jié)點(diǎn)加事件觸發(fā)處理
具體參看${JPBM.HOME}/doc/userguide文檔 關(guān)于JPDL的描述
(1)JBPM4_DEPLOYMENT、
(2)JBPM4_DEPLOYPROP
(3)JBPM4_LOB:
存儲(chǔ) 上傳一個(gè)包含png和jpdl.xml的zip包 的相關(guān)數(shù)據(jù)
jbpm4_deployment表多了一條記錄
jbpm4_deployprop表多了四條記錄,對(duì)應(yīng)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的執(zhí)行信息,Execution機(jī)制代替了JBPM3的Token機(jī)制
(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,多個(gè)Task可以一次分配到 同一Actor身上。
(10)JBPM4_VARIABLE
存的是進(jìn)行時(shí)的臨時(shí)變量。
(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
這三張表很常見了,基本的權(quán)限控制,關(guān)于用戶認(rèn)證方面建議還是自己開發(fā)一套,JBPM4 的功能太簡單了,使用中有很多需要難以滿足。
(17)JBPM4_JOB
存放的是Timer的定義。
(18)JBPM4_PROPERTY
聯(lián)系客服