snakerflow教程文檔.doc_第1頁(yè)
snakerflow教程文檔.doc_第2頁(yè)
snakerflow教程文檔.doc_第3頁(yè)
snakerflow教程文檔.doc_第4頁(yè)
snakerflow教程文檔.doc_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1、 snakerflow工作流概述1、 snakerflow工作流運(yùn)作機(jī)制,其實(shí)就是圍繞7張核心的增刪改查進(jìn)行運(yùn)作。1) 首先你需要定義一個(gè)流程文件也就是*.snaker文件,這個(gè)文件是對(duì)流程的描述。2) 部署流程文件*.snaker,也就是在數(shù)據(jù)庫(kù)中對(duì)wf_process新增一條記錄,其中表wf_process的content字段就是存的流程文件內(nèi)容。這表中的一條記錄相當(dāng)于一個(gè)模板,所有的流程實(shí)例都已據(jù)此生成。3) 啟動(dòng)一個(gè)流程,也就是我們所說(shuō)的生成一個(gè)流程實(shí)例;生成時(shí)要指定wf_process表的一條記錄的id。啟動(dòng)成功后會(huì)在數(shù)據(jù)庫(kù)中wf_order和wf_hist_order表中分別插

2、入一條記錄,兩個(gè)表的id是相同的,不帶hist的表都是存儲(chǔ)當(dāng)前有效(執(zhí)行中)的記錄。帶hist是存儲(chǔ)的結(jié)束的(下同)。wf_hist_order比wf_order表多一個(gè)字段order_state,用來(lái)表示該流程實(shí)例是否已經(jīng)結(jié)束,1進(jìn)行中;0結(jié)束。所有字段的含義和枚舉值都在源碼bean中有解釋。(下同)。order表中variable字段存的是該流程實(shí)例的全局變量,你可以在任何節(jié)點(diǎn)的時(shí)候獲取使用。4) 執(zhí)行節(jié)點(diǎn)的任務(wù)a2,上述中wf_task存的是執(zhí)行中的記錄,也就是說(shuō)在執(zhí)行a2前,wf_task中肯定會(huì)有一條執(zhí)行中的任務(wù)記錄,假設(shè)為a1,那么執(zhí)行a2時(shí)的增刪改為先將wf_task和wf_ta

3、sk_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是歷史表a2記錄的id,通過(guò)此可將所有任務(wù)串聯(lián)起來(lái)。task表的variable中的值為局部變量只能在當(dāng)前task中使用。有人會(huì)有疑問(wèn),假設(shè)有如下流程圖,執(zhí)行task1時(shí)會(huì)怎么樣?因?yàn)殚_(kāi)始節(jié)點(diǎn)是一個(gè)比較特殊的nodemodel,群主稱(chēng)之為流轉(zhuǎn)邏輯元素(下面總體設(shè)計(jì)思路中會(huì)有詳細(xì)介紹),它只負(fù)責(zé)流轉(zhuǎn)到下一節(jié)點(diǎn)不負(fù)責(zé)執(zhí)行

4、,也就沒(méi)有數(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é)束。2、 snakerflow工作流執(zhí)行過(guò)程此處結(jié)合源碼分析整個(gè)執(zhí)行過(guò)程:1、 工作流的入口類(lèi),是你在配置文件中配置snakerengine的實(shí)現(xiàn)類(lèi)。比如集成spring你需要配置如下內(nèi)容該入口類(lèi)包含5大服務(wù)和一個(gè)配置解析類(lèi)從上圖可知,流程引擎snakerengine對(duì)象是由conf

5、iguration根據(jù)snaker.xml構(gòu)建所得,并且包含五項(xiàng)服務(wù):1)processservice:負(fù)責(zé)部署、卸載、更新流程,并且可創(chuàng)建無(wú)流程定義的自由流程2)orderservice:負(fù)責(zé)創(chuàng)建、更新、完成、終止流程實(shí)例3)taskservice:負(fù)責(zé)創(chuàng)建、完成任務(wù),并且可創(chuàng)建自由任務(wù)4)managerservice:負(fù)責(zé)提供與流程相關(guān)的管理服務(wù)5)queryservice:負(fù)責(zé)與流程相關(guān)的查詢(xún)操作對(duì)于不使用其他框架ioc容器創(chuàng)建對(duì)象,就像上面所述流程引擎snakerengine對(duì)象是由configuration根據(jù)snaker.xml構(gòu)建所得,其他服務(wù)也配置在snaker.xml中,我們

6、稱(chēng)之非托管容器,即所有對(duì)象的創(chuàng)建由snaker自身創(chuàng)建。如何做到的?說(shuō)白了就是把類(lèi)名存到內(nèi)存map中需要的時(shí)候反射創(chuàng)建出一個(gè)對(duì)象來(lái)。對(duì)于托管型容器,比如交給spring的ioc來(lái)創(chuàng)建對(duì)象,那么就應(yīng)該在spring的配置文件里定義了。1) 不依賴(lài)其他框架時(shí),入口類(lèi)定義的是用到的創(chuàng)建對(duì)象ioc容器是如何構(gòu)建流程引擎parser方法往下都是從ioc容器中創(chuàng)建五大服務(wù)對(duì)象,關(guān)鍵是parser方法都干了什么。讀取了幾個(gè)配置文件,iscmb就是判斷是否是容器托管,就是是否使用snaker自身的ioc容器。也就是說(shuō)會(huì)讀取ext.config.xml文件2) 對(duì)于托管類(lèi),據(jù)spring為例,配置了spring

7、snakerengine使用了springconfigurationioc容器交給了spring的applicationcontext,是否容器托管設(shè)置為了true,也就是說(shuō)不會(huì)讀取ext.config.xml至此,在啟動(dòng)服務(wù)器時(shí),snaker的初始化工作完成。2、 流程部署,那肯定是去找iprocess的實(shí)現(xiàn)類(lèi)processservice啊沒(méi)什么好說(shuō)的組織一個(gè)bean存到數(shù)據(jù)庫(kù)wf_process表,關(guān)鍵是交給誰(shuí)去saveprocess。這是在配置文件中配置的orm工具,交給mybatis的具體配置如下。這里還要提到cache方法,為什么要提到它,因?yàn)樗姆椒ɡ锩嬗薪馕隽鞒涛募榫唧w哪個(gè)no

8、demodel。snaker崇尚簡(jiǎn)單,所以組件模型非常精簡(jiǎn),主要由兩類(lèi)元素組成:1)流轉(zhuǎn)邏輯元素:startmodel,decisionmodel,forkmodel,joinmodel,endmodel2)業(yè)務(wù)邏輯元素:taskmodel,custommodel,subprocessmodel也就是說(shuō)你部署流程的同時(shí),會(huì)在內(nèi)存中緩存一個(gè)process對(duì)象,并且這個(gè)對(duì)象中有processmodel包含了解析流程文件的所有節(jié)點(diǎn)信息。3、 啟動(dòng)實(shí)例先從數(shù)據(jù)庫(kù)獲取指定id的流程bean,上述中提到cache方法,獲取的同時(shí)也會(huì)緩存,解析成對(duì)應(yīng)的nodemodel。然后啟動(dòng),1) 創(chuàng)建一個(gè)執(zhí)行單元ex

9、ecution,該執(zhí)行單元包含了流程引擎對(duì)象,process bean,order bean 和執(zhí)行人和參數(shù)。此處對(duì)數(shù)據(jù)庫(kù)新增order相關(guān)表。2) 任務(wù)節(jié)點(diǎn)執(zhí)行注釋寫(xiě)得很清楚,不贅述。3、 snakerflow的總體設(shè)計(jì)思路此處不再做贅述,參考5/design.html4、 snakerflow詳細(xì)介紹5、 snakerflow擴(kuò)展6、 snakerflow使用1、 首先進(jìn)入系統(tǒng),并分配流程管理權(quán)限2、 選擇其中一個(gè)流程點(diǎn)設(shè)計(jì)按鈕,進(jìn)入流程設(shè)計(jì)畫(huà)面此時(shí)你將看到流程設(shè)計(jì)頁(yè)面,畫(huà)流程圖的原則是必須要有一個(gè)開(kāi)始節(jié)點(diǎn)和一個(gè)結(jié)束節(jié)點(diǎn)。3、 流程屬性點(diǎn)擊空白處會(huì)出現(xiàn)該流程文件的屬性名稱(chēng)為必填項(xiàng),實(shí)例啟動(dòng)url也是必填項(xiàng),指示流程啟動(dòng)時(shí)跳轉(zhuǎn)顯示業(yè)務(wù)數(shù)據(jù)的地址。4、 任務(wù)節(jié)點(diǎn)介紹新增任務(wù)節(jié)點(diǎn)或者其他節(jié)點(diǎn)時(shí),只需要點(diǎn)擊左側(cè)某類(lèi)型節(jié)點(diǎn)不松鼠標(biāo),并將其拖至右側(cè)畫(huà)板區(qū)域即可顯示該類(lèi)型節(jié)點(diǎn)。單擊一個(gè)任務(wù)節(jié)點(diǎn)會(huì)彈出如下一個(gè)任務(wù)屬性框,名稱(chēng)是必填項(xiàng)且不能與其他節(jié)點(diǎn)重復(fù),參與者也是必填項(xiàng),參與類(lèi)型如果是普通任務(wù)就選普通參與,如果是會(huì)簽任務(wù),則必須選擇會(huì)簽參與,前、后置攔截器是用于更新業(yè)務(wù)數(shù)據(jù),需要編寫(xiě)java代碼,并將完整類(lèi)名填寫(xiě)于此。用鍵盤(pán)delete鍵可以

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論