• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于WF狀態(tài)機(jī)工作流的日常工作管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

    2015-01-27 01:30:52錢維平
    關(guān)鍵詞:狀態(tài)機(jī)責(zé)任人實(shí)例

    錢維平,王 堅(jiān)

    (同濟(jì)大學(xué) CIMS 研究中心,上海 201804)

    0 引言

    Windows Workflow Foundation(WF)是關(guān)于工作流的架構(gòu),它提供了可視化的界面工具,并且支持在ASP.NET 應(yīng)用程序中直接執(zhí)行工作流[1]。這些優(yōu)點(diǎn)使得開發(fā)者可以在WF 中建模并定義規(guī)則來描述系統(tǒng)的處理過程,從而能夠有效地實(shí)現(xiàn)業(yè)務(wù)的自動(dòng)化處理。

    本文以企業(yè)日常工作管理系統(tǒng)為例,以ASP.NET為開發(fā)平臺(tái),通過分析工作業(yè)務(wù)處理過程中所要經(jīng)歷的步驟,然后在WF 工作流的設(shè)計(jì)平臺(tái)下使用工作流模型模擬相關(guān)業(yè)務(wù)的處理過程,從而有效地解決了傳統(tǒng)日常工作管理系統(tǒng)由于流程變化所帶來的許多問題。

    1 系統(tǒng)設(shè)計(jì)

    1.1 系統(tǒng)架構(gòu)設(shè)計(jì)

    本系統(tǒng)采用的是基于MVC 的三層體系架構(gòu)。它將整個(gè)系統(tǒng)業(yè)務(wù)的處理按照Model(模型)、View(視圖)、Controller(控制器)的方式進(jìn)行分離,三個(gè)核心部件處理各自的任務(wù)[2]。MVC 三層體系架構(gòu)設(shè)計(jì)模式如圖1 所示。

    圖1 MVC 三層體系架構(gòu)設(shè)計(jì)模式Fig.1 MVC three-layer architecture design pattern

    模型封裝了系統(tǒng)數(shù)據(jù)庫(kù)中的字段及相應(yīng)的業(yè)務(wù)規(guī)則和邏輯關(guān)系,并包含了數(shù)據(jù)驗(yàn)證等相關(guān)的業(yè)務(wù)操作。

    視圖代表用戶交互界面,如本系統(tǒng)中發(fā)布人發(fā)布工作頁(yè)面等,視圖頁(yè)沒有任何邏輯代碼,用于將用戶動(dòng)作傳遞給控制器,并以可視化界面的形式將相應(yīng)模型中的數(shù)據(jù)顯示出來[3]。

    控制器將數(shù)據(jù)發(fā)送給模型,執(zhí)行模型中的操作,最后呈現(xiàn)合適的工作管理系統(tǒng)頁(yè)面。

    1.2 系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)

    本系統(tǒng)需建立日常工作數(shù)據(jù)庫(kù)(DailyWork)和持久化服務(wù)數(shù)據(jù)庫(kù)(WorkflowPersistence)。日常工作數(shù)據(jù)庫(kù)(DailyWork)用來存儲(chǔ)和管理系統(tǒng)中的數(shù)據(jù),該數(shù)據(jù)庫(kù)中有總公司日常工作記錄表、子公司日常工作記錄表、企業(yè)信息表以及企業(yè)職員信息表。持久化服務(wù)數(shù)據(jù)庫(kù)保存了未完成的工作流實(shí)例。系統(tǒng)數(shù)據(jù)表詳見表1。

    表1 系統(tǒng)數(shù)據(jù)表Tab.1System datasheet

    2 系統(tǒng)中的主要技術(shù)與實(shí)現(xiàn)

    2.1 WF 的基本工作原理

    工作流實(shí)例的執(zhí)行按照預(yù)先定義好的規(guī)則進(jìn)行,工作流實(shí)例執(zhí)行時(shí)的環(huán)境由工作流運(yùn)行時(shí)提供[4]。宿主應(yīng)用程序承載工作流運(yùn)行時(shí)類的實(shí)例,并由工作流引擎實(shí)現(xiàn)和管理工作流運(yùn)行。

    通信Service 服務(wù)實(shí)現(xiàn)宿主程序與工作流之間的數(shù)據(jù)交換。開發(fā)者也可以設(shè)計(jì)通信信道,并定義接口,使宿主程序與活動(dòng)之間通過事件傳遞參數(shù)的方式進(jìn)行通信并完成數(shù)據(jù)交換。

    工作流管理系統(tǒng)[5,6]是一種人機(jī)交互的系統(tǒng)。未完成的工作流實(shí)例不能一直保存在內(nèi)存當(dāng)中,需要進(jìn)行工作流持久化操作。工作流的持久化就是在持久化存儲(chǔ)(如SQL數(shù)據(jù)庫(kù))里,保存工作流的一些狀態(tài)信息,如實(shí)例Id。

    2.2 工作流類型

    WF 中的工作流類型有順序工作流和狀態(tài)機(jī)工作流。順序工作流按照一定的順序和過程執(zhí)行各項(xiàng)定義的活動(dòng)。狀態(tài)機(jī)工作流從初始狀態(tài)開始到終止?fàn)顟B(tài)結(jié)束由宿主應(yīng)用程序觸發(fā)的外部事件驅(qū)動(dòng)。

    日常工作管理系統(tǒng)業(yè)務(wù)過程涉及到提交和回退動(dòng)作,且開發(fā)者無法事先知道業(yè)務(wù)的執(zhí)行順序。順序工作流的思想會(huì)將這種業(yè)務(wù)類型的處理變得很復(fù)雜,根據(jù)狀態(tài)機(jī)工作流的思想來建模卻可以高效地完成業(yè)務(wù)的處理[7]:通過在業(yè)務(wù)實(shí)體之間建立若干個(gè)狀態(tài)(其中必須建立一個(gè)起始狀態(tài)和終止?fàn)顟B(tài),分別代表工作流的開始與結(jié)束),每個(gè)狀態(tài)包括多個(gè)活動(dòng)用來對(duì)業(yè)務(wù)數(shù)據(jù)進(jìn)行處理。在狀態(tài)發(fā)生變化時(shí),通過事件驅(qū)動(dòng)實(shí)現(xiàn)一系列復(fù)雜的操作。

    2.3 狀態(tài)機(jī)工作流實(shí)現(xiàn)

    本系統(tǒng)業(yè)務(wù)流程為:安環(huán)處發(fā)布一項(xiàng)工作,責(zé)任人填寫并提交工作,安環(huán)處對(duì)責(zé)任人提交的工作進(jìn)行審核,若審核通過,則流程結(jié)束,若退回責(zé)任人提交的工作,則責(zé)任人需要重新提交工作直到審核通過為止。相關(guān)業(yè)務(wù)流程如圖2 所示。

    圖2 日常工作管理業(yè)務(wù)流程Fig.2 Business process of daily work management

    在Visual Studio 2010 中,使用“狀態(tài)機(jī)工作流”模板新建WorkPlanWorkflows項(xiàng)目。在項(xiàng)目中新建一個(gè)名為 IDaily-WorkPlan 的 C# 接口,在接口中定義本地服務(wù)公開給工作流的事件和方法[8]。

    在工作流設(shè)計(jì)界面添加“PublisherState”、“ResponsiblePersonState”、“DoneWithWorkState”等State 活動(dòng),分別對(duì)應(yīng)發(fā)布人狀態(tài)、責(zé)任人狀態(tài)和工作流結(jié)束三個(gè)狀態(tài)。然后按照業(yè)務(wù)流程向各個(gè)State 狀態(tài)中添加所需要的EventDriven 活動(dòng),并且需要為個(gè)EventDriven 活動(dòng)添加一個(gè)HandleExternalEvent 子活動(dòng),用來將活動(dòng)與IDaily-WorkPlan 接口中的事件綁定起來,并通過各個(gè)Handle-ExternalEvent 活動(dòng)的Invoked 屬性創(chuàng)建相關(guān)的事件。最后,將添加好的狀態(tài)之間的關(guān)系進(jìn)行關(guān)聯(lián),如圖3 所示。

    圖3 日常工作計(jì)劃管理業(yè)務(wù)邏輯圖Fig.3 Business logic of daily work management

    當(dāng)發(fā)布人發(fā)布一條工作時(shí),PublisherPublishEvent 事件指向ResponsiblePersonState 狀態(tài),責(zé)任人提交工作后,PersonSubmitEvent 事件指向PublisherState 狀態(tài),若發(fā)布人對(duì)工作審核通過,即PublisherPassEvent 事件,則轉(zhuǎn)向DoneWithWorkState 狀態(tài),代表工作流結(jié)束。若對(duì)工作進(jìn)行退回操作,即PublisherRetreatedEvent 事件,則再次返回到ResponsiblePersonState 狀態(tài)。

    2.4 宿主應(yīng)用程序?qū)崿F(xiàn)

    完成了工作流持久化數(shù)據(jù)庫(kù)的配置及狀態(tài)機(jī)工作流的實(shí)現(xiàn)后,需要實(shí)現(xiàn)MVC 設(shè)計(jì)模式下的ASP.NET Web宿主應(yīng)用程序。

    首先,需要在模型中封裝工作計(jì)劃(WorkPlan)類的屬性,并實(shí)現(xiàn)對(duì)日常工作數(shù)據(jù)庫(kù)中數(shù)據(jù)的添加、查詢、更新等操作方法。其次,在控制器中實(shí)現(xiàn)工作流運(yùn)行時(shí)初始化,然后通過工作流類型啟動(dòng)工作流實(shí)例。

    安環(huán)處對(duì)應(yīng)的頁(yè)面有“添加工作”、“審核工作”等多個(gè)頁(yè)面。責(zé)任人對(duì)應(yīng)有“填寫工作”,“編輯工作”“提交工作”等頁(yè)面。其中“添加工作”頁(yè)面中的“發(fā)布”按鈕的Click 事件處理程序包含了啟動(dòng)工作流實(shí)例的代碼。責(zé)任人“填寫工作”頁(yè)面的“提交”按鈕的Click 事件會(huì)觸發(fā)工作流的HandleExternal 類型的活動(dòng),未完成的工作流實(shí)例被重新加載后安環(huán)處就可以執(zhí)行審核通過和退回的操作。責(zé)任人填寫工作頁(yè)面如圖4 所示。

    圖4 責(zé)任人填寫工作頁(yè)面Fig.4 Page for the responsible to fill out a job

    目前該系統(tǒng)在企業(yè)使用,可以解決流程變化和軟件維護(hù)所帶來的很多問題。

    3 結(jié)束語(yǔ)

    本文首先分析了WF 基本工作原理及模型,然后以企業(yè)日常工作管理系統(tǒng)為例,并建立狀態(tài)機(jī)工作流模型,實(shí)現(xiàn)了完整的工作流管理系統(tǒng)。MVC 設(shè)計(jì)模式將模型、視圖、控制器分離,使得軟件層次分明,真正意義上實(shí)現(xiàn)了工作流系統(tǒng)的靈活性和重用率。

    [1]Dharma Shukla,Bob Schmidt;周健(譯).WF 本質(zhì)論/(美)[M].北京:機(jī)械工業(yè)出版社,2007.

    [2]林舒萍,等.設(shè)計(jì)模式的應(yīng)用研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2005,11.

    [3]張麗君,齊建卓,吳宏波.基于MVC 模式的Struts 框架在Web 系統(tǒng)開發(fā)中的應(yīng)用[J].內(nèi)蒙古大學(xué)學(xué)報(bào),2005,1.

    [4]Bruce Bukovics;柴曉偉(譯).WF 高級(jí)程序設(shè)計(jì)/(美)[M].北京:人民郵電出版社,2009.

    [5]業(yè)寧,張愛珍,董逸生.一種可視化OA 工作流設(shè)計(jì)工具[J].計(jì)算機(jī)應(yīng)用,2003,5.

    [6]Holling Sworth D.WorkFlow Manamgement Coalition Specifieation:Terminology&Glossary.Doeument Number WFMC-TC-1011,Brussels,1996.

    [7]陳誼,侯堃,新吉樂,等.基于XML 和關(guān)系數(shù)據(jù)庫(kù)的可視化工作流系統(tǒng)[J].系統(tǒng)仿真學(xué)報(bào),2012,1.

    [8]楊琦. 工作流技術(shù)在高校教務(wù)管理系統(tǒng)中的應(yīng)用與研究[J].IT 技術(shù)論壇,2008,16.

    猜你喜歡
    狀態(tài)機(jī)責(zé)任人實(shí)例
    當(dāng)好“四種人” 履行好第一責(zé)任人責(zé)任
    遵守安全生產(chǎn)法 當(dāng)好第一責(zé)任人
    四問蘭州布菌事件:怎么賠償? 責(zé)任人處理太輕?
    新娘敬酒時(shí)受傷 責(zé)任人依法賠償
    公民與法治(2020年4期)2020-05-30 12:31:28
    基于有限狀態(tài)機(jī)的交會(huì)對(duì)接飛行任務(wù)規(guī)劃方法
    完形填空Ⅱ
    完形填空Ⅰ
    FPGA設(shè)計(jì)中狀態(tài)機(jī)安全性研究
    基于反熔絲FPGA的有限狀態(tài)機(jī)加固設(shè)計(jì)
    基于VHDL的一個(gè)簡(jiǎn)單Mealy狀態(tài)機(jī)
    龙南县| 平陆县| 台湾省| 婺源县| 杭州市| 龙州县| 吕梁市| 马龙县| 荔浦县| 沛县| 外汇| 克什克腾旗| 宜黄县| 台州市| 呼玛县| 米林县| 扬中市| 迭部县| 阳新县| 乌审旗| 南雄市| 姜堰市| 五峰| 谷城县| 寻乌县| 漳浦县| 淮滨县| 亚东县| 蓝田县| 信宜市| 博爱县| 凤阳县| 观塘区| 稻城县| 莲花县| 格尔木市| 大竹县| 林口县| 连州市| 民权县| 章丘市|