JBPM回退功能的实现
1:
我們知道JBPM系統(tǒng),決定一個(gè)流程當(dāng)前在什么環(huán)節(jié)的關(guān)鍵是task 和toker。他們在數(shù)據(jù)庫中的表分別是JBPM_TASKINSTANCE,JBPM_TOKEN。我的設(shè)計(jì)思想是,放棄JBPM自身的API,因?yàn)槲铱戳艘欢螘r(shí)間的JBPM的API,沒有找到可以靈活操作taskinstance,和token的方法。于是自己寫sql語句自己操作這兩張表。
在項(xiàng)目中之所以使用回退功能,主要是可是在流程過程中的某個(gè)環(huán)節(jié)的辦理是發(fā)生了錯(cuò)誤,所有客戶要求把流程退回到指定的環(huán)節(jié)重新辦理。
從理論上只要辦當(dāng)前流程中活動(dòng)的TASK,用我們的程序把它變成已辦理的狀態(tài),把客戶想要回退到的環(huán)節(jié)的TASK從新激活,最后把TOKEN的節(jié)點(diǎn)ID指向到回退后的NODE。
所以只要我們自己操作這兩個(gè)表就OK了。
JBPM_TASKINSTANCE 表中有三個(gè)字段是表示這個(gè)任務(wù)是辦理完了還是沒有辦理。他們是:END_,ISOPEN_,ISSIGNALLING_,其中END_是一個(gè)日期類型表示這個(gè)任務(wù)什么時(shí)候辦完,ISOPEN_,ISSIGNALLING_這兩個(gè)字段為1時(shí)表示未辦完,0時(shí)表示辦完了。另外PROCINST_字段也很重要,他是維護(hù)的這個(gè)任務(wù)屬于的流程實(shí)例化ID。我在項(xiàng)目中是利用流程實(shí)例ID和業(yè)務(wù)表聯(lián)系,比如一個(gè)公文系統(tǒng)中,一定是有一個(gè)公文的信息表,里面放著這個(gè)文件的標(biāo)題,文號等信息。其中有一個(gè)字段放著流程實(shí)例化ID,這樣每個(gè)公文可以和一個(gè)流程關(guān)聯(lián)。
還有一張表JBPM_NODE他存放著每個(gè)流程(注意是定義流程而不是實(shí)例化流程)的各個(gè)節(jié)點(diǎn),我們需要把它列出來這樣才可以選擇流程回退到哪個(gè)環(huán)節(jié)。可是這個(gè)表里的各個(gè)環(huán)節(jié)是個(gè)流程定義ID關(guān)聯(lián)而不是實(shí)例流程ID關(guān)聯(lián),所以只能是JBPM_NODE,JBPM_PROCESSDEFINITION,JBPM_PROCESSINSTANCE三張表關(guān)聯(lián)查詢。SQL語句如下:
Sql代碼?
表名前加了所有者,各位注意一下。另外我在項(xiàng)目中用的IBATIS所以變量前后加了##.
這樣我們把一個(gè)流程的所有節(jié)點(diǎn)都查出來了。在頁面上顯示就OK了。
第二步:
在JSP頁面上顯示是我顯示多個(gè)單選按鈕讓客戶選擇。大家看見我查出的結(jié)果是有一個(gè)ID,和一個(gè)NAME字段。
在JSP顯示
Html代碼?之所以頁面上的value的內(nèi)容我用id,name的方式處理,因?yàn)槲伊鞒讨械乃械墓?jié)點(diǎn)和task的名字一樣,這樣后面的task表的任務(wù)計(jì)劃簡單一些。節(jié)點(diǎn)ID是以后操作TOKER表時(shí)候用的。
第三步:
我們顯示了用戶可以選擇的后退的環(huán)節(jié)后提交表單。action中把task表中的所有激活的記錄全部終止。
sql語句如下:
Sql代碼?接下來把客戶選擇的節(jié)點(diǎn)上的TASK重新激活
sql
Java代碼?這里的任務(wù)名稱就是上面的JSP頁面中的節(jié)點(diǎn)名稱,大家一定要注意這里的節(jié)點(diǎn)名稱和taskinstance表里的NAME_字段是兩個(gè)完全不同的東西。只是我在項(xiàng)目中的所有的環(huán)節(jié)的名字和這個(gè)環(huán)節(jié)的TASK的名字是一樣的所以才這么寫,如果不一樣各位只能自己再查。而且我建議各位在項(xiàng)目中把節(jié)點(diǎn)和TASK的名字設(shè)置成一樣。
第四步:
最后我們只要把token表中的NODE_設(shè)置成上面JSP頁面中傳過來的節(jié)點(diǎn)ID就OK了。
sql
Sql代碼?
?這里說明一下流程的實(shí)例ID和他的Token的ID是一樣的所以可以把它的流程實(shí)例ID當(dāng)做令牌ID這么寫。
?
總結(jié)
以上是生活随笔為你收集整理的JBPM回退功能的实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hibernate3的配置参数汇总
- 下一篇: jbpm已办任务