web工作流管理系統(tǒng)開發(fā)6_第1頁
web工作流管理系統(tǒng)開發(fā)6_第2頁
web工作流管理系統(tǒng)開發(fā)6_第3頁
web工作流管理系統(tǒng)開發(fā)6_第4頁
web工作流管理系統(tǒng)開發(fā)6_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、二十六 .net工作流系統(tǒng)之?dāng)U展性.net工作流系統(tǒng)之?dāng)U展性最近為用戶做工作流實(shí)施時(shí),都無一例外的提出工作流系統(tǒng)的擴(kuò)展性問題。事件一:eworkflow工作流系統(tǒng)預(yù)置了一些系統(tǒng)的條件,前置后置函數(shù)等。如果這些不能滿足業(yè)務(wù)需要,用戶需要定制自己的業(yè)務(wù)規(guī)則,業(yè)務(wù)過程,該如何做?解決方案:eworkflow系統(tǒng)預(yù)置了很多系統(tǒng)的條件類,前置后置函數(shù)類。簡單一些的業(yè)務(wù)規(guī)則,可以直接用自定義腳本,寫個(gè)表達(dá)式的方式來實(shí)現(xiàn)。 如條件類的:判斷用戶是否有某個(gè)角色  .fcsoft.workflow.util.UserHasRoleCondition    

2、60;          判斷是否是競爭型任務(wù)的簽收人 .fcsoft.workflow.util.CompetitionTaskCondition             .                 事件類:將指定步驟的執(zhí)行人保存

3、到mostRecentCaller變量中 .fcsoft.workflow.util.MostRecentCaller        .         打開我們的任意一個(gè)條件類 ,可以看到,條件類必須實(shí)現(xiàn)Condition接口,實(shí)現(xiàn)passesCondition()方法   / <summary> 判斷調(diào)用者caller是否屬于role參數(shù)所指的角色 / caller: userid 

4、; role: roleid / </summary> public class UserHasRoleCondition : Condition   / Methods /    public virtual bool passesCondition(System.Collections.IDictionary transientVars, System.Collections.IDictionary args, PropertySet ps)  .   流程的

5、上下文、相關(guān)的業(yè)務(wù)參數(shù)、數(shù)據(jù)庫連接、當(dāng)前操作員id等,均可以在passesCondition的三個(gè)參數(shù)中獲得。  因 此在需要擴(kuò)展業(yè)務(wù)規(guī)則的時(shí)候,可以擴(kuò)展這種條件類,只需要在用戶的應(yīng)用系統(tǒng)中引用eworkflow.dll(java版的就是引入 eworkflow.jar),新建業(yè)務(wù)規(guī)則類,實(shí)現(xiàn)Condition接口,在passesCondition方法中寫業(yè)務(wù)規(guī)則就可以了,所有和流程相 關(guān)的信息,節(jié)點(diǎn)定義的屬性,業(yè)務(wù)參數(shù),均可以從passesCondition方法的三個(gè)參數(shù)中獲得。  將寫好的條件類注冊到 WF_DSN_CLASS表中,在流程定義的時(shí)候,

6、從節(jié)點(diǎn)的屬性頁中選擇出這些擴(kuò)展的業(yè)務(wù)規(guī)則,掛接到流程的節(jié)點(diǎn)上。在流程實(shí)例運(yùn)行到此節(jié)點(diǎn)的時(shí)候,就會執(zhí)行這些節(jié)點(diǎn)上定義的業(yè)務(wù)規(guī)則類,作出規(guī)則判斷。    下面是一個(gè)判斷 當(dāng)前操作員用戶,是否屬于某個(gè)區(qū)域的業(yè)務(wù)規(guī)則的判斷          -條件和事件的分隔線-  打開任意一個(gè)事件函數(shù)類,可以看到,事件函數(shù)類的,必須實(shí)現(xiàn)FunctionProvider接口,實(shí)現(xiàn)execute()方法   public class MostRecentCall

7、er : FunctionProvider   / Methods /    public virtual void  execute(System.Collections.IDictionary transientVars, System.Collections.IDictionary args, PropertySet ps)    和條件類的接口一樣,流程的上下文、相關(guān)的業(yè)務(wù)參數(shù)、數(shù)據(jù)庫連接、當(dāng)前操作員id等,均可以在execute的三個(gè)參數(shù)中獲得。集成開發(fā)文檔中會有這

8、三個(gè)參數(shù)的詳細(xì)描述。    在 需要擴(kuò)展業(yè)務(wù)事件,業(yè)務(wù)過程的時(shí)候,只需要在用戶的應(yīng)用系統(tǒng)中引用eworkflow項(xiàng)目或者eworkflow.dll((java版的就是引入 eworkflow.jar),新建這種事件類,實(shí)現(xiàn)FunctionProvider接口,在execute()方法中寫業(yè)務(wù)實(shí)現(xiàn),所有和流程相關(guān)的信 息,節(jié)點(diǎn)定義的屬性,業(yè)務(wù)參數(shù),均可以從execute方法的三個(gè)參數(shù)中獲得。  將寫好的類注冊到 WF_DSN_CLASS 表中,在流程定義的時(shí)候,從節(jié)點(diǎn)的屬性頁中選擇出這些擴(kuò)展的業(yè)務(wù)事件類,掛接到流程上。這樣流程實(shí)例運(yùn)行的

9、時(shí)候,流轉(zhuǎn)到相應(yīng)的節(jié)點(diǎn),就會執(zhí)行節(jié)點(diǎn)上定義的這些業(yè)務(wù)事件。    例如將當(dāng)前操作員信息保存到流程的上下文中:   事件二:我們的eworkflow工作流系統(tǒng)的 待辦任務(wù)列表 只有流程相關(guān)的信息,業(yè)務(wù)信息部分較少,集成到用戶系統(tǒng)時(shí),用戶希望能自定義一些業(yè)務(wù)列信息。解決方案: eworkflow工作流系統(tǒng)的任務(wù)表中,任務(wù)名稱,是支持表達(dá)式的,在表達(dá)式中可以引入業(yè)務(wù)信息。例如任務(wù)名稱為:審核 業(yè)務(wù)部 李明 的報(bào)銷單。  業(yè)務(wù)部 李明 這兩個(gè)信息均來自表達(dá)式,獲取的是報(bào)銷單中的記錄信息。  如

10、果這樣還是不能滿足用戶的需要,用戶需要擴(kuò)展列出多列業(yè)務(wù)表中的記錄值。那就只能通過調(diào)用流程的獲取待辦任務(wù)列表的api函數(shù)來做了。 具體過程如下: 先通過調(diào)用工作流的api函數(shù),獲取待辦任務(wù)列表  ArrayList getCurrentTasks(System.String type, System.String wfId, System.String stepId);  得到的是一個(gè)list,list的每一條是對應(yīng)一條任務(wù)表的一個(gè) IDictionary對象(java版的就是map對象),任務(wù)表的字段名為key,記錄值為value。&

11、#160;任務(wù)表中會記錄任務(wù)信息關(guān)聯(lián)的流程實(shí)例id, 通過流程實(shí)例id獲得 和業(yè)務(wù)表的關(guān)聯(lián),找到業(yè)務(wù)表的記錄,然后取出業(yè)務(wù)表中的多列信息,和任務(wù)信息 一起返回到頁面顯示,這樣就獲得了一個(gè) 包含多列具體業(yè)務(wù)信息的待辦任務(wù)列表了。標(biāo)簽: java工作流, 自定義工作流, web工作流, 工作流引擎, dotnet工作流引擎, .net工作流, .net工作流系統(tǒng)二十七 .net工作流系統(tǒng)集成自定義表單.net工作流系統(tǒng)集成自定義表單工作流系統(tǒng)一般都包含工作流引擎,工作流引擎是對業(yè)務(wù)流程的抽象,是實(shí)現(xiàn)流程自動化的微內(nèi)核,利用工作流引擎的基本元素能搭建出各種各樣的流程,但僅限于流程,不涉及到業(yè)務(wù)實(shí)現(xiàn)。

12、流程的每個(gè)節(jié)點(diǎn)上可以掛接需要處理的業(yè)務(wù)模塊,例如一個(gè)簡單的報(bào)銷流程,如下圖:在填寫報(bào)銷單的流程節(jié)點(diǎn)上,就可以掛接上 填寫報(bào)銷單 這樣一個(gè)業(yè)務(wù)模塊;到審批的節(jié)點(diǎn)上,掛接 審批報(bào)銷單模塊。      工作流引擎是不負(fù)責(zé)這些具體業(yè)務(wù)模塊的實(shí)現(xiàn)的,否則就不是對業(yè)務(wù)流程的抽象了。這些具體業(yè)務(wù)模塊的實(shí)現(xiàn),可以是開發(fā)人員做好的一些業(yè)務(wù)模塊,也可以是用一些表單工具做的自定義業(yè)務(wù)表單。無論是定制的業(yè)務(wù)模塊,還是利用表單工具做的自定義表單,都需要在這些模塊中集成流程。好的工作流引擎都應(yīng)該是封裝好的,對外僅提供調(diào)用的api函數(shù)。這樣才能方便的將流程與業(yè)務(wù)模塊集成在一

13、起。 工作流引擎對外提供的api應(yīng)該包含:流程的初始化函數(shù):給定一個(gè)具體的業(yè)務(wù)流程名稱,啟動流程,獲得一個(gè)流程實(shí)例id.流程的執(zhí)行函數(shù)  :給定一個(gè)具體的流程實(shí)例id, 執(zhí)行他的任務(wù),使得流程遞進(jìn),達(dá)到流程的流轉(zhuǎn)。獲得與修改流程實(shí)例的狀態(tài):獲得與修改一個(gè)具體流程實(shí)例的狀態(tài)。指流程實(shí)例的 激活,掛起,與 完成 等狀態(tài)。獲得流程定義任意節(jié)點(diǎn)的信息:獲得指定流程指定節(jié)點(diǎn)的任務(wù)信息,包括流程定義的屬性,自定義信息等等。 在業(yè)務(wù)模塊中,嵌入流程引擎的api函數(shù)的調(diào)用,啟動一個(gè)流程,或 通過給定的流程實(shí)例id,去執(zhí)行它的當(dāng)前任務(wù),將當(dāng)前任務(wù)提交,使得流程流轉(zhuǎn)。當(dāng)然,業(yè)務(wù)模塊的

14、業(yè)務(wù)數(shù)據(jù)提交和流程的流轉(zhuǎn)應(yīng)該保持在一個(gè)事務(wù)中,達(dá)到流程的長事務(wù)一致性。 下面以+為例,說明.net工作流系統(tǒng)與自定義表單系統(tǒng)的集成。還是以報(bào)銷流程為例,先將業(yè)務(wù)流程轉(zhuǎn)換成eworkflow的流程。(流程圖如上圖中簡單報(bào)銷流程)再設(shè)計(jì)好業(yè)務(wù)表,這里我們設(shè)計(jì)了兩張表,報(bào)銷主表和明細(xì)表。從上面的流程中可以看出,需要有報(bào)銷單填寫模塊,和審核模塊。用eform畫好 報(bào)銷單,如下:注:eworkflow .net工作流系統(tǒng)中已經(jīng)集成好了eform .net自定義表單系統(tǒng)了。表單屬性中 選擇 工作流工具欄工作流工具欄也是用eform設(shè)計(jì)的一個(gè)頁面,此頁面中已經(jīng)做好了和流程的集成。在表單提交到后臺保

15、存的之后,再執(zhí)行流程的相應(yīng)動作,達(dá)到流程的遞進(jìn)。用eform畫好 報(bào)銷單的審核 如下:(同樣在表單屬性中,選擇 工作流工具欄)畫好的頁面保存在workflowexample_dj目錄中。在流程設(shè)計(jì)器中,打開報(bào)銷流程,在相應(yīng)節(jié)點(diǎn)上掛接好 業(yè)務(wù)表單。  這樣報(bào)銷流程就設(shè)計(jì)好了,可以啟動執(zhí)行了。有更細(xì)一些的控制,就在流程設(shè)計(jì)器中打開報(bào)銷流程,修改流程節(jié)點(diǎn)的屬性,或修改流程的流轉(zhuǎn)。在eform自定義表單系統(tǒng)的代碼中已經(jīng)有通用的模塊集成了eworkflow .net工作流系統(tǒng)了,所以不需要再寫代碼調(diào)用流程api了。  二十八 工作流系統(tǒng)實(shí)例演練工作流系統(tǒng)實(shí)例演練有

16、了工作流引擎,工作流設(shè)計(jì)器,工作流管理平臺,自定義表單,然后業(yè)務(wù)流程確定之后,就可以快速的做好能運(yùn)行的流程了。首先業(yè)務(wù)要確定,包括業(yè)務(wù)細(xì)節(jié)部分。以一個(gè) 問題跟蹤流程為例,實(shí)戰(zhàn)演練一下,如何快速的搭建一個(gè)可以運(yùn)行的業(yè)務(wù)流程。業(yè)務(wù)需求:用戶在使用 我們公司的產(chǎn)品時(shí),經(jīng)常會遇到一些問題,有的是不會使用的問題,有的是誤解,有的是bug,也有的是對產(chǎn)品的建議等等。我們擬收集這些用戶遇到的問題以及處理過程,所以設(shè)計(jì)如下流程: 流程如上面過程,具體的細(xì)節(jié)要求:1、相關(guān)人員審核問題,通過則發(fā)送到技術(shù)人員解決問題,拒絕,則表示問題描述不夠,打回原填寫人繼續(xù)填寫。2、原填寫人收到打回的問題,可以繼續(xù)完善

17、,再次發(fā)送給審核,也可以直接作廢問題,結(jié)束這次問題描述。3、技術(shù)人員解決問題,有個(gè)鎖定問題的過程,即誰先鎖定了問題,就由誰解決。4、解決的問題反饋給用戶,用戶查看處理結(jié)果,無異議則結(jié)束流程,也可以繼續(xù)提出疑問,和技術(shù)人員繼續(xù)溝通解決。 分析需求:根據(jù)上面的需求描述,設(shè)計(jì)問題跟蹤表如下:  根據(jù)業(yè)務(wù)過程和表,得出,至少需要設(shè)計(jì)三張表單:用戶提出問題表單技術(shù)人員處理問題表單反饋給用戶時(shí)的,用戶查看和繼續(xù)提出疑問的表單 流程設(shè)計(jì)過程:根據(jù)上面的業(yè)務(wù)流程:用戶提出問題審核部門審核問題技術(shù)解決問題反饋給用戶結(jié)束可以看出整個(gè)業(yè)務(wù)流程分為,4個(gè)環(huán)節(jié),提出問題審核解決問

18、題反饋 所以用eworkflow的流程設(shè)計(jì)器,新建一流程,流程屬性頁設(shè)置業(yè)務(wù)標(biāo)簽頁面填寫 問題跟蹤表名 和主鍵字段名. 然后畫出,初始化動作。和4個(gè)步驟,每個(gè)步驟均帶上動作。用連線連接好。流程的雛形就畫好了,可以先保存一下。再根據(jù)流程的細(xì)節(jié)要求,細(xì)化每個(gè)節(jié)點(diǎn)的屬性,業(yè)務(wù)流程如下:細(xì)化的過程:節(jié)點(diǎn)名稱的修改拒絕后打回的動作結(jié)果連線,此連線為有條件結(jié)果,條件為業(yè)務(wù)表單中傳來的通過還是拒絕的選項(xiàng)。因?yàn)楸韱芜€未制作,自定義條件中,可以先設(shè)置false,如這樣設(shè)置<arg name="script">false</arg>打回后的問題,可以

19、直接作廢的動作有條件結(jié)果連線,條件為業(yè)務(wù)表單中傳來的 是否作廢的 選擇。表單未制作,自定義條件中,先設(shè)置成<arg name="script">false</arg>設(shè)置任務(wù)信息:提出問題步驟,設(shè)置直接指派的任務(wù);              審核步驟:設(shè)置直接指派任務(wù),任務(wù)參與人為相關(guān)的審核部門人員。          &#

20、160;   解決問題步驟:設(shè)置競爭型任務(wù),任務(wù)執(zhí)行人為技術(shù)部門的人員。              問題反饋步驟:設(shè)置直接指派任務(wù),任務(wù)執(zhí)行人為問題的填寫人。注意:步驟動作設(shè)置完任務(wù)節(jié)點(diǎn),再在步驟的動作中,選擇相對應(yīng)的動作條件。即:直接指派型任務(wù)  選擇 判斷直接指派任務(wù)的執(zhí)行人競爭型任務(wù)      選擇 判斷競爭型任務(wù)的簽收人動態(tài)會簽型任務(wù)  選擇 動態(tài)會簽任務(wù)的可執(zhí)行人判斷

21、條件平均分配型任務(wù)  選擇 判斷平均分配型任務(wù)的簽收人問題反饋步驟,繼續(xù)提出問題,返回的有條件結(jié)果連線的設(shè)置,以及條件腳本的設(shè)置。先設(shè)置成false,待表單制作好后,再將條件填上。審核步驟拒絕時(shí),打回原填寫人繼續(xù)填寫的設(shè)置,問題反饋步驟,返回給問題的提出人查看處理結(jié)果。業(yè)務(wù)流程設(shè)計(jì)完成。業(yè)務(wù)表單的設(shè)計(jì):將業(yè)務(wù)表建立。新建業(yè)務(wù)表單,拉下數(shù)據(jù)集,拉下grid控件。在數(shù)據(jù)集中添加好業(yè)務(wù)字段。拉下label控件,text控件,combox控件,將數(shù)據(jù)集中的字段,綁定到這些控件。業(yè)務(wù)表單的屬性頁中,設(shè)置好表單名稱,引入工作流工具條。 保存。則問題填寫表單制作完成。細(xì)節(jié)的設(shè)置,因?yàn)閷徍?/p>

22、步驟用的表單,和填寫 是同一張表單,所以,審核 是否通過等信息,需要設(shè)置控件權(quán)限,在填寫步驟不可見;審核的結(jié)果,作為條件送到流程中使用,則數(shù)據(jù)集中 審核結(jié)果字段,需要選擇 流程用。是否作廢的結(jié)果,作為條件送到流程中使用,數(shù)據(jù)集上問題狀態(tài) 字段,設(shè)置為 流程用。問題處理表單的設(shè)計(jì):將表單掛接到流程節(jié)點(diǎn)上:打開流程:在相應(yīng)動作節(jié)點(diǎn)屬性頁上,設(shè)置業(yè)務(wù)表單。再次設(shè)置條件結(jié)果,打開流程,在相應(yīng)的動作有條件結(jié)果上修改條件。保存。整個(gè)流程設(shè)計(jì)完成,流程就可以運(yùn)行了,當(dāng)然之前的保存的業(yè)務(wù)流程也能運(yùn)行,只是有些細(xì)節(jié)沒有體現(xiàn)。在工作流管理平臺,登錄,找到流程,啟動流程,就可以跑這個(gè)完整的業(yè)務(wù)流程了。啟動一個(gè)流程實(shí)

23、例,做一個(gè)登記,查看一下此流程運(yùn)行的軌跡,運(yùn)行到 審核步驟了。 換成 審核部門的人員登錄,從我的待辦任務(wù)中,找到任務(wù)連接,審核通過,則提交到技術(shù)部門。技術(shù)部門處理問題,反饋給用戶,直到問題關(guān)閉,結(jié)束一個(gè)流程實(shí)例。. 對流程設(shè)計(jì)器,eform表單熟悉的話,業(yè)務(wù)流程細(xì)節(jié)又很確定,最多2小時(shí),就能完成這樣一個(gè)能運(yùn)行的業(yè)務(wù)流程了。當(dāng)然需求是不斷變化的,我們利用eworkflow+eform的設(shè)計(jì)也可以是不斷變化的。在測試運(yùn)行階段,隨時(shí)可以調(diào)整流程,隨時(shí)可以調(diào)整業(yè)務(wù)表單;在正式運(yùn)行后,可以通過流程版本的控制,隨時(shí)調(diào)整需求,隨時(shí)調(diào)整流程,隨時(shí)隨地的調(diào)整業(yè)務(wù)表單。 二十九 詳解

24、工作流實(shí)例的一次流轉(zhuǎn)通常在利用流程設(shè)計(jì)器給業(yè)務(wù)流程建模之后,會生成一個(gè)流程描述的xml文件,業(yè)務(wù)流程的每個(gè)環(huán)節(jié)步驟,需要執(zhí)行的操作,自動的,手動的等等信息,都 被描述在這個(gè)流程建模的xml文件中。xml文件的內(nèi)容,是一些規(guī)則的預(yù)先定義的抽象的節(jié)點(diǎn)信息,流程引擎負(fù)責(zé)這些節(jié)點(diǎn)的定義,創(chuàng)建,解釋,定位等等,業(yè) 務(wù)流程利用這些節(jié)點(diǎn)建模。建模完成的業(yè)務(wù)流程,掛接上業(yè)務(wù)表單后,就可以直接運(yùn)行業(yè)務(wù)流程了。業(yè)務(wù)流程的運(yùn)行,從啟動流程實(shí)例開始,啟動一個(gè)流程實(shí)例即代表開始了一次業(yè)務(wù)流程處理。每例業(yè)務(wù)流程的處理過程,都包含從創(chuàng)建,到激活,到處理,到 結(jié)束(當(dāng)然中間也可以人為的直接終止,或掛起,再恢復(fù)),這樣一個(gè)過程

25、。流程實(shí)例創(chuàng)建后,就按照流程建模的xml文件,按照定義的節(jié)點(diǎn)路由順序一步一步的 流轉(zhuǎn),相應(yīng)業(yè)務(wù)也在相應(yīng)的步驟中處理。流程實(shí)例按照節(jié)點(diǎn)路由順序,每執(zhí)行一次,代表一次流轉(zhuǎn)。每次的流轉(zhuǎn)包含流程節(jié)點(diǎn)的狀態(tài)升遷和辦理業(yè)務(wù)數(shù)據(jù)的提交,通過工作流的事務(wù),控制這些狀態(tài)升遷和業(yè)務(wù)數(shù)據(jù)達(dá)到同步和一致性。一旦這個(gè)流程實(shí)例結(jié)束了或意外終止了,都代表業(yè)務(wù)辦理完成了,就再也不能再次發(fā)生流轉(zhuǎn)了。工作流實(shí)例的一次流轉(zhuǎn),會涉及到流程節(jié)點(diǎn)狀態(tài)的升遷和辦理業(yè)務(wù)數(shù)據(jù)的提交。下面示意圖,抽取流程一次流轉(zhuǎn)的定義示意:從步驟A環(huán)節(jié)到達(dá)步驟B當(dāng)流程實(shí)例到達(dá)步驟A的時(shí)候,當(dāng)前流程實(shí)例的狀態(tài)步驟A步驟A的狀態(tài),當(dāng)執(zhí)行動作A的時(shí)候,通過 動作A的

26、 結(jié)果導(dǎo)向 步驟B。當(dāng)?shù)竭_(dá)步驟B的時(shí)候,當(dāng)前流程實(shí)例的狀態(tài)步驟B 步驟B的狀態(tài)。流程實(shí)例的狀態(tài)通過執(zhí)行動作A達(dá)到了升遷,當(dāng)在動作A上面綁定了業(yè)務(wù)表單,業(yè)務(wù)數(shù)據(jù)也隨著動作A的執(zhí)行一起提交。業(yè)務(wù)數(shù)據(jù)的提交和流程狀態(tài) 的升遷是在同一個(gè)事務(wù)中的,保證數(shù)據(jù)的一致性。從上面的分析可以看出,流程的一次流轉(zhuǎn)涉及到如下圖中紅色框中選中的部分。為什么步驟A和步驟B會分別是一半呢,下面我們來詳細(xì)說明,流轉(zhuǎn)過程中,每個(gè)流程基本元素的流轉(zhuǎn)順序。 在工作流系統(tǒng)的基本元素中,有一些前置后置函數(shù),可以掛接到流程的節(jié)點(diǎn)上。當(dāng)流程實(shí)例到達(dá)這個(gè)節(jié)點(diǎn)的時(shí)候,會觸發(fā)前置函數(shù),離開這個(gè)節(jié)點(diǎn)會 觸發(fā)后置函數(shù),就象事件一樣。事件的

27、內(nèi)容是可以自己任意發(fā)揮的,就像一個(gè)button的點(diǎn)擊函數(shù)一樣,點(diǎn)擊后做什么事情,有編寫程序的人來編寫代碼。這里 的前置后置函數(shù)也是一樣,當(dāng)觸發(fā)了前置后置函數(shù)后,內(nèi)容可以是預(yù)置的一些系統(tǒng)函數(shù),也可以是業(yè)務(wù)流程建模者自定義做的一些業(yè)務(wù)模塊,體現(xiàn)流程的擴(kuò)展性。  上圖中只描述了動作的前置后置,步驟的前置后置,實(shí)際上動作的結(jié)果,也有前置后置函數(shù),便于做擴(kuò)展用。實(shí)際上可以引入業(yè)務(wù)模塊的不僅是前置后置函 數(shù),動作的可執(zhí)行條件也可以引入業(yè)務(wù)規(guī)則的判斷。例如一個(gè)請假的流程,在審核請假是否通過時(shí),可以引入一個(gè)判斷規(guī)則,將請假申請人的總年假已經(jīng)休的假 期可休年假天數(shù),再和當(dāng)前申請的天數(shù)比較,如

28、果大于則申請通過,否則不通過。  綜合上面的描述,我們可以看出流程的一次流轉(zhuǎn)的先后順序?yàn)椋?#160;步驟的后置函數(shù)動作的前置函數(shù)完成本步驟的任務(wù)檢查動作結(jié)果中的條件(不成立則無條件結(jié)果)動作結(jié)果的前置 創(chuàng)建新的當(dāng)前步驟(執(zhí)行新步驟的前置函數(shù))  動作結(jié)果的后置 動作的后置函數(shù)  因?yàn)閳?zhí)行動作后,會離開本步驟,所以首先是從本步驟的后置函數(shù)開始的。 其中,創(chuàng)建新的當(dāng)前步驟,關(guān)聯(lián)到任務(wù)信息,所以也有個(gè)處理過程順序:   本步驟標(biāo)記完成,轉(zhuǎn)到歷史步驟下一步為當(dāng)前步驟關(guān)閉當(dāng)前步驟的所有未完成的任務(wù)到達(dá)新

29、步驟,先生成新步驟的所有任務(wù)再執(zhí)行新的當(dāng)前步驟的前置函數(shù)。 業(yè)務(wù)流程在建模的時(shí)候,可以利用一些流程的上下文中的變量等做一些控制,也可以引入一些關(guān)鍵的業(yè)務(wù)數(shù)據(jù)做判斷用。這涉及到流程的持久變量和臨時(shí)變量。例如,獲取當(dāng)前流程實(shí)例的創(chuàng)建者,作為一個(gè)變量,傳遞給接下來的第一個(gè)步驟作為第一個(gè)步驟任務(wù)的參與者。這可以用一個(gè)流程的臨時(shí)變量來處理:在流程初始化動作(或動作結(jié)果)的前置函數(shù)中,將當(dāng)前流程實(shí)例的創(chuàng)建者保存到變量caller中。然后在下一步驟的任務(wù)參與人中,就可以引入caller變量,獲取他的值了。因?yàn)閏aller變量是個(gè)臨時(shí)變量,僅存在于流程的一次流轉(zhuǎn)的中。當(dāng)流程的這次流轉(zhuǎn)結(jié)束了,這個(gè)變量

30、就實(shí)效了。就像一個(gè)子函數(shù)一樣,在子函數(shù)的開始,給變量caller賦值,在接下來的代碼中就可以獲取這個(gè)變量的值了。  所以在用流程的臨時(shí)變量時(shí)候,通常都是在相應(yīng)節(jié)點(diǎn)的前置函數(shù)中,給變量賦值,按照流程的流轉(zhuǎn)順序,在相應(yīng)的后置節(jié)點(diǎn)中獲取變量的值。同樣的方式還適用于mostRecentCaller,mostRecentOwner 這兩個(gè)變量,獲取指定步驟的執(zhí)行者和獲取指定步驟的所有者,這兩個(gè)變量都屬于發(fā)生了的歷史步驟才能獲取到。流程的持久化變量,就與臨時(shí)變量不一樣了,只要流程的任意節(jié)點(diǎn)中保存了值,在后續(xù)的任意節(jié)點(diǎn)中都可以獲取到值。這個(gè)不局限于流程的一次流轉(zhuǎn),流程多次流轉(zhuǎn)都可以。只要在任意一次流轉(zhuǎn)中保存了變量的值了,后續(xù)的任意流轉(zhuǎn)中就都可以取值了。 例如一個(gè)報(bào)銷流程中,報(bào)銷申請是否通過,審核人將這個(gè)結(jié)果作為一個(gè)持久化的變量保存到流程中了。則在申請人查看審核結(jié)果的環(huán)節(jié),就可以取出這個(gè)審核 結(jié)果了。審核的那次流轉(zhuǎn),和查看環(huán)節(jié),這是流程的兩個(gè)環(huán)節(jié)。不是流程的一次流轉(zhuǎn),但是審核的那次流轉(zhuǎn),必須先于查看環(huán)節(jié),先將變量的值持久化進(jìn)去,然后后 續(xù)的環(huán)節(jié)就能獲取值了。 三十 流程的靜態(tài)分支與動態(tài)

溫馨提示

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

評論

0/150

提交評論