https://yunmel.gitbooks.io/snakerflow/
七張核心表
表定義詳細(xì)
-
WF_PROCESS
流程定義,例如請(qǐng)假申請(qǐng)宾巍,用車申請(qǐng)等流程定義
WF_ORDER
流程實(shí)例翎承,當(dāng)前運(yùn)行中的流程實(shí)例的信息肌厨,比如嫁乘,我申請(qǐng)了一條請(qǐng)假流程杯瞻,流程編號(hào)“請(qǐng)假-001”瓣戚,這個(gè)請(qǐng)假流程“請(qǐng)假-001”就是一個(gè)流程實(shí)例WF_HIST_ORDER
歷史流程實(shí)例端圈,只要啟動(dòng)過的流程,歷史流程實(shí)例表中就會(huì)存儲(chǔ)流程的實(shí)例信息子库,比如這條流程是否結(jié)束WF_TASK
任務(wù)舱权,某個(gè)流程中某個(gè)節(jié)點(diǎn),叫做任務(wù)實(shí)例仑嗅。比如“請(qǐng)假-001”中需要上級(jí)審批宴倍,“上級(jí)審批”這個(gè)節(jié)點(diǎn)就是一個(gè)任務(wù)實(shí)例WF_HIST_TASK
歷史任務(wù)(就是執(zhí)行完了的任務(wù)),所有任務(wù)結(jié)束以后都會(huì)在歷史任務(wù)信息表里存一條記錄WF_TASK_ACTOR
每個(gè)任務(wù)對(duì)應(yīng)的參與者(記住誰(shuí)可以簽收或處理)仓技,可能會(huì)有多個(gè)人或者用戶組鸵贬。WF_HIST_TASK_ACTOR
歷史的參與者表,任務(wù)處理完以后脖捻,對(duì)應(yīng)處理人的信息會(huì)存到這個(gè)表里面
詳細(xì)講解
WF_PROCESS:存放流程定義阔逼,通過編輯一個(gè)后綴為.snaker的xml文檔來定義流程的走向;在前端流程定義管理里有個(gè)部署流程的按鈕地沮,可以將編輯好的xml文檔保存到WF_PROCESS表中嗜浮,并產(chǎn)生一條記錄。xml文檔里有流程的名字摩疑,如果這個(gè)名字在WF_PROCESS已經(jīng)存在了危融,則保存時(shí)產(chǎn)生的新的記錄的version字段值會(huì)自動(dòng)加1。processId是唯一的雷袋,不重復(fù)吉殃。
WF_ORDER:存放流程實(shí)例的。開啟一個(gè)流程實(shí)例時(shí)楷怒,WF_ORDER表有個(gè)字段PROCESS_ID和流程定義的process_id相關(guān)聯(lián)寨腔,他們是一對(duì)多的關(guān)系。當(dāng)開啟一個(gè)流程實(shí)例WF_ORDER時(shí)率寡,在WF_ORDER和WF_HIST_ORDER都新增一條記錄迫卢,并且同時(shí)產(chǎn)生的那兩條記錄的主鍵id是一樣的。冶共,其中WF_HIST_ORDER比WF_ORDER多一個(gè)字段ORDER_STATUS 流程實(shí)例狀態(tài)(0:結(jié)束乾蛤;1:活動(dòng))每界。
當(dāng)流程沒跑完時(shí),ORDER_STATUS的值是1家卖;
當(dāng)整個(gè)事件流程跑完了眨层,WF_ORDER表的那條記錄會(huì)被刪除,WF_HIST_ORDER表對(duì)應(yīng)的那條記錄的ORDER_STATUS的值變成0上荡,表示流程實(shí)例跑完了趴樱。WF_TASK:存當(dāng)前任務(wù)的;當(dāng)流程執(zhí)行完當(dāng)前任務(wù)節(jié)點(diǎn)時(shí)酪捡,WF_TASK的這條記錄會(huì)被剪切到WF_HIST_TASK表中叁征,然后在WF_TASK表中新增下一個(gè)任務(wù)節(jié)點(diǎn)的信息記錄。新增的下一任務(wù)節(jié)點(diǎn)的task有個(gè)字段parent_task_id記住上一個(gè)任務(wù)節(jié)點(diǎn)在WF_HIST_TASK表里的WF_HIST_TASK_ID(上一個(gè)任務(wù)節(jié)點(diǎn)從WF_TASK表剪切到WF_HIST_TASK了)逛薇;這樣就可以實(shí)現(xiàn)回退等功能捺疼。
WF_TASK_ACTOR:存哪個(gè)任務(wù)關(guān)聯(lián)了那些參與者的,就是哪些人可以簽收或者處理永罚。如果當(dāng)前任務(wù)節(jié)點(diǎn)被執(zhí)行了啤呼,則相關(guān)的參與者會(huì)被剪切到WF_HIST_TASK_ACTOR表里,和WF_TASK、WF_HIST_TASK類似,這樣回退時(shí)延塑,就知道以前這一步是誰(shuí)處理的。
假如現(xiàn)在執(zhí)行節(jié)點(diǎn)的任務(wù)是A2惕蹄,上述中wf_task存的是執(zhí)行中的記錄,也就是說在執(zhí)行A2前坯临,wf_task中肯定會(huì)有一條執(zhí)行中的任務(wù)記錄,假設(shè)為A1恋昼,那么執(zhí)行A2時(shí)的增刪改為先將wf_task和wf_task_actor表中A1的記錄插入wf_hist_task和wf_hist_task_actor中看靠;其次是刪除wf_task和wf_task_actor中A1記錄,然后將A2的信息插入到wf_task和wf_task_actor中液肌。此時(shí)wf_task表的parent_task_id是歷史表A1記錄的Id挟炬,通過此可將所有任務(wù)串聯(lián)起來。task表的variable中的值為局部變量只能在當(dāng)前task中使用嗦哆。有人會(huì)有疑問谤祖,假設(shè)有如下流程圖,執(zhí)行task1時(shí)會(huì)怎么樣老速?
因?yàn)殚_始節(jié)點(diǎn)是一個(gè)比較特殊的nodemodel粥喜,群主稱之為流轉(zhuǎn)邏輯元素(下面總體設(shè)計(jì)思路中會(huì)有詳細(xì)介紹),它只負(fù)責(zé)流轉(zhuǎn)到下一節(jié)點(diǎn)不負(fù)責(zé)執(zhí)行橘券,也就沒有數(shù)據(jù)庫(kù)的增刪改额湘。這樣直接流轉(zhuǎn)到task1卿吐,插入wf_hist_task和wf_hist_task_actor,并且又直接流轉(zhuǎn)到end節(jié)點(diǎn)锋华,end節(jié)點(diǎn)也是一個(gè)流轉(zhuǎn)元素嗡官,它會(huì)直接刪除wf_order表的記錄并更改該流程實(shí)例wf_hist_order表的order_state的狀態(tài)。
至此一個(gè)流程的所有增刪改查結(jié)束毯焕。