日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JBPM回退功能的实现

發(fā)布時(shí)間:2025/7/14 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JBPM回退功能的实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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代碼
  • SELECT?node.ID_,node.NAME_?FROM? ??
  • tjsoadba.JBPM_NODE?node,tjsoadba.JBPM_PROCESSINSTANCE?instance, ??
  • tjsoadba.JBPM_PROCESSDEFINITION?definition? ??
  • WHERE?instance.PROCESSDEFINITION_??=?definition.ID_? ??
  • and?definition.ID_=node.PROCESSDEFINITION_?and?instance.ID_=#流程實(shí)例化ID#??
  • SELECT node.ID_,node.NAME_ FROM tjsoadba.JBPM_NODE node,tjsoadba.JBPM_PROCESSINSTANCE instance, tjsoadba.JBPM_PROCESSDEFINITION definition WHERE instance.PROCESSDEFINITION_ = definition.ID_ and definition.ID_=node.PROCESSDEFINITION_ and instance.ID_=#流程實(shí)例化ID#

    ?

    表名前加了所有者,各位注意一下。另外我在項(xiàng)目中用的IBATIS所以變量前后加了##.

    這樣我們把一個(gè)流程的所有節(jié)點(diǎn)都查出來了。在頁面上顯示就OK了。

    第二步:

    在JSP頁面上顯示是我顯示多個(gè)單選按鈕讓客戶選擇。大家看見我查出的結(jié)果是有一個(gè)ID,和一個(gè)NAME字段。

    在JSP顯示

    Html代碼
  • <input?type="radio"?name="node"?value="<%=節(jié)點(diǎn)ID%>,<%=節(jié)點(diǎn)名稱%>"/><%=節(jié)點(diǎn)名稱?%>??
  • <input type="radio" name="node" value="<%=節(jié)點(diǎn)ID%>,<%=節(jié)點(diǎn)名稱%>"/><%=節(jié)點(diǎn)名稱 %>

    ?之所以頁面上的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代碼
  • update????tjsoadba.JBPM_TASKINSTANCE???set?ISOPEN_=0,ISSIGNALLING_=0,END_=?#當(dāng)前日期#? ??
  • ?where??PROCINST_?=#流程實(shí)例ID#??and?END_?is?null??
  • update tjsoadba.JBPM_TASKINSTANCE set ISOPEN_=0,ISSIGNALLING_=0,END_= #當(dāng)前日期# where PROCINST_ =#流程實(shí)例ID# and END_ is null

    ?接下來把客戶選擇的節(jié)點(diǎn)上的TASK重新激活

    sql

    Java代碼
  • update????tjsoadba.JBPM_TASKINSTANCE?? ??
  • ?set?ISOPEN_=1,ISSIGNALLING_=1,END_=?null?? ??
  • ?where??PROCINST_?=?#流程實(shí)例ID#?and?NAME_=?#任務(wù)名稱#??
  • update tjsoadba.JBPM_TASKINSTANCE set ISOPEN_=1,ISSIGNALLING_=1,END_= null where PROCINST_ = #流程實(shí)例ID# and NAME_= #任務(wù)名稱#

    ?這里的任務(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代碼
  • update???tjsoadba.JBPM_TOKEN???set?NODE_?=?#節(jié)點(diǎn)ID#??where??ID_?=?#流程實(shí)例ID#??
  • update tjsoadba.JBPM_TOKEN set NODE_ = #節(jié)點(diǎn)ID# where ID_ = #流程實(shí)例ID#

    ?

    ?這里說明一下流程的實(shí)例ID和他的Token的ID是一樣的所以可以把它的流程實(shí)例ID當(dāng)做令牌ID這么寫。

    ?

    總結(jié)

    以上是生活随笔為你收集整理的JBPM回退功能的实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。