工作流的價(jià)值
之前做過一版工作流引擎,自己開發(fā)的。這段時間又以jbpm為內(nèi)核做了一版流程系統(tǒng),有些思考就記錄下來。
有一句話說的好,如果你手里有一把錘子你就看什么都像釘子。做流程系統(tǒng)的時候也遇到這類現(xiàn)象,因?yàn)閷α鞒滔到y(tǒng)的不熟悉,在開發(fā)過程中就想到處都用工作流來處理問題。
其實(shí)引入一個新的東西,一定要先搞明白的它的適用場景,有什么價(jià)值。把握了這點(diǎn)后結(jié)合具體場景,就能很好的使用,而不會亂用。

.jpg)
有一句話說的好,如果你手里有一把錘子你就看什么都像釘子。做流程系統(tǒng)的時候也遇到這類現(xiàn)象,因?yàn)閷α鞒滔到y(tǒng)的不熟悉,在開發(fā)過程中就想到處都用工作流來處理問題。
其實(shí)引入一個新的東西,一定要先搞明白的它的適用場景,有什么價(jià)值。把握了這點(diǎn)后結(jié)合具體場景,就能很好的使用,而不會亂用。
一、工作流適用場景
以下兩種情況需要引入流程系統(tǒng)
1.分散系統(tǒng)整合(企業(yè)應(yīng)用集成)
2.簡化業(yè)務(wù)系統(tǒng)的開發(fā);
工作流的價(jià)值
1.業(yè)務(wù)流程獨(dú)立化;
2.優(yōu)化改進(jìn)流程更容易;
3.提供統(tǒng)一的監(jiān)控頁面。
Ⅰ 、相對于分散系統(tǒng),提供了統(tǒng)一的操作和監(jiān)控頁面。對用戶更友好,過程可監(jiān)控,業(yè)務(wù)規(guī)則更明確。
1.業(yè)務(wù)流程獨(dú)立化,業(yè)務(wù)規(guī)則不僅僅存在與工作人員的頭腦中。
2.提供了統(tǒng)一的監(jiān)控界面,實(shí)現(xiàn)業(yè)務(wù)過程可監(jiān)控;
3.有明確的規(guī)則,可以監(jiān)控運(yùn)行情況,為流程的優(yōu)化提供了便利;
4.對用戶更友好;
Ⅱ 、相對于傳統(tǒng)業(yè)務(wù)系統(tǒng)方式
1.業(yè)務(wù)流程獨(dú)立化,業(yè)務(wù)規(guī)則不會淹沒于業(yè)務(wù)系統(tǒng)代碼中。避免業(yè)務(wù)系統(tǒng)開發(fā)完成后再次改動成本高的情況。
2.提供了統(tǒng)一的監(jiān)控界面,實(shí)現(xiàn)業(yè)務(wù)過程可監(jiān)控;原業(yè)務(wù)系統(tǒng)提供的報(bào)表對環(huán)節(jié)執(zhí)行時間可能信息不足,一般只是簡單反應(yīng)狀態(tài)變化。
3.有明確的規(guī)則,可以監(jiān)控運(yùn)行情況,為流程的優(yōu)化提供了便利;
4.對于工作人員來講,這些改進(jìn)其實(shí)是透明的,從用戶體驗(yàn)的角度沒有什么變化。
所以對原業(yè)務(wù)系統(tǒng)的用戶來講,變化不大。引入流程系統(tǒng)更多的是為了監(jiān)控和優(yōu)化流程的方便,是從管理的角度考慮問題。
從流程系統(tǒng)提供的待辦事項(xiàng)列表進(jìn)行操作,還是從業(yè)務(wù)系統(tǒng)的功能菜單進(jìn)行操作,哪個更友好是UE設(shè)計(jì)的問題,跟流程系統(tǒng)無關(guān)。
業(yè)務(wù)系統(tǒng)功能菜單的劃分可能相對于待辦事項(xiàng)列表更直觀、定位更準(zhǔn)確。(見下圖紅色箭頭對兩種方式的表示)
考慮到業(yè)務(wù)流程的復(fù)雜性,對于企業(yè)信息化系統(tǒng)引入流程系統(tǒng)可以便于優(yōu)化流程,對于成熟的業(yè)務(wù)系統(tǒng)如財(cái)務(wù)軟件引入流程系統(tǒng)完全沒有必要。

.jpg)
補(bǔ)充說明:
1.當(dāng)前任務(wù)列表方式,需要用戶不停的查看有沒有新任務(wù)到來;優(yōu)點(diǎn)是在一個頁面可以看到全部待辦事項(xiàng)。
2.業(yè)務(wù)系統(tǒng)功能菜單方式,需要用戶不停的查詢工作進(jìn)展并作出處理。優(yōu)點(diǎn)是任務(wù)類型劃分更明確;
二、業(yè)務(wù)系統(tǒng)接入方式
1.在jsp頁面增加環(huán)節(jié)信息(環(huán)節(jié)編號,流程編號...);
2.業(yè)務(wù)系統(tǒng)aciton不變;
3.在業(yè)務(wù)系統(tǒng)action完成操作后,流程攔截器處理流程變化并記錄到數(shù)據(jù)庫;
4.流程監(jiān)控頁面和待辦事項(xiàng)列表,不斷從流程數(shù)據(jù)庫查詢。
5.對于專業(yè)性比價(jià)強(qiáng)的的狀態(tài)值還是在業(yè)務(wù)系統(tǒng)維護(hù),避免流程系統(tǒng)壓力過大。在需要監(jiān)控改進(jìn)的業(yè)務(wù)點(diǎn)交由流程系統(tǒng)調(diào)度,其它部分還是由業(yè)務(wù)系統(tǒng)處理。
.jpg)
--------------------------------------
下邊是對struts項(xiàng)目接入流程系統(tǒng)的一個分析
1.業(yè)務(wù)系統(tǒng)jsp,action調(diào)用關(guān)系


.jpg)
2.采用攔截器在業(yè)務(wù)系統(tǒng)action執(zhí)行完成后,進(jìn)行流程驅(qū)動,并在下一個jsp頁面注入流程信息。
.jpg)

主要邏輯都在beforeResult()方法中。
3.數(shù)據(jù)結(jié)構(gòu)


.jpg)
數(shù)據(jù)結(jié)構(gòu)說明:
1.對于通用的流程數(shù)據(jù)可以在beforeResult()方法自動嵌入,為考慮交互效果在jsp自行設(shè)置流程信息;
2.jsp頁面流程數(shù)據(jù)應(yīng)該包括:
1.nodeName
節(jié)點(diǎn)名稱,環(huán)節(jié)在流程定義中的名稱;
節(jié)點(diǎn)名稱,環(huán)節(jié)在流程定義中的名稱;
2.transitionNames
流向名稱列表,需要作出選擇的列表。
流向名稱列表,需要作出選擇的列表。
3.entityId
實(shí)體id,用于查詢流程實(shí)例ID。
實(shí)體id,用于查詢流程實(shí)例ID。
3.在action執(zhí)行完成后驅(qū)動流程所需要的數(shù)據(jù):
1.definitionId
流程定義,說明是新啟動一個流程。
流程定義,說明是新啟動一個流程。
2.nodeName
節(jié)點(diǎn)名稱,根據(jù)流程實(shí)例ID和節(jié)點(diǎn)名稱查詢?nèi)蝿?wù)ID,每個節(jié)點(diǎn)只能是單任務(wù)的,否則jsp頁面無法提供taskId.
節(jié)點(diǎn)名稱,根據(jù)流程實(shí)例ID和節(jié)點(diǎn)名稱查詢?nèi)蝿?wù)ID,每個節(jié)點(diǎn)只能是單任務(wù)的,否則jsp頁面無法提供taskId.
3.transitionName
流向名稱,根據(jù)流向選擇流程下一步跳轉(zhuǎn)的節(jié)點(diǎn)。串行節(jié)點(diǎn)不用transitionName 可為空。
流向名稱,根據(jù)流向選擇流程下一步跳轉(zhuǎn)的節(jié)點(diǎn)。串行節(jié)點(diǎn)不用transitionName 可為空。
4.entityId
實(shí)體id,查詢流程實(shí)例ID用。
實(shí)體id,查詢流程實(shí)例ID用。
4.對與工作流無關(guān)的action實(shí)行過濾,不做處理。
兩種過濾方式:
1.在action方法加注解;
2.在數(shù)據(jù)結(jié)構(gòu)中增加數(shù)據(jù)項(xiàng)標(biāo)記。
5.對與工作流無關(guān)的jsp頁面,不使用工作流tag即可。
-----------------------------
上邊是我一開始的想法,后來和同事討論后又做了些調(diào)整。編輯web文字比較麻煩,就不合在一起了。
1.對執(zhí)行業(yè)務(wù)操作的action和進(jìn)入jsp頁面的初始化action進(jìn)行分類;
.jpg)

2.參數(shù)傳遞過程補(bǔ)充說明


一個分為三步
倒著說
第三步,功能頁面jsp在提交參數(shù)時需附加(節(jié)點(diǎn)名稱、流向名稱、工單編號),流程引擎才能驅(qū)動流程;
第二步,要能夠向第三步提供數(shù)據(jù),jsp頁面必須包含(節(jié)點(diǎn)名稱、流向名稱列表、工單編號),這些數(shù)據(jù)有兩個來源:1.收到在jsp頁面寫入;2.從第一步接收。
第一步,有同事建議,提供節(jié)點(diǎn)和資源路徑的關(guān)系表,通過資源路徑查找節(jié)點(diǎn)名稱。減少流程系統(tǒng)對業(yè)務(wù)系統(tǒng)的侵入。
.jpg)
----------------------------------
上傳的時候圖片丟了,重新補(bǔ)一下。
上傳的時候圖片丟了,重新補(bǔ)一下。