?

基于WF狀態機工作流的日常工作管理系統的設計與實現

2015-01-27 01:30錢維平
機電產品開發與創新 2015年1期
關鍵詞:狀態機責任人實例

錢維平,王 堅

(同濟大學 CIMS 研究中心,上海 201804)

0 引言

Windows Workflow Foundation(WF)是關于工作流的架構,它提供了可視化的界面工具,并且支持在ASP.NET 應用程序中直接執行工作流[1]。這些優點使得開發者可以在WF 中建模并定義規則來描述系統的處理過程,從而能夠有效地實現業務的自動化處理。

本文以企業日常工作管理系統為例,以ASP.NET為開發平臺,通過分析工作業務處理過程中所要經歷的步驟,然后在WF 工作流的設計平臺下使用工作流模型模擬相關業務的處理過程,從而有效地解決了傳統日常工作管理系統由于流程變化所帶來的許多問題。

1 系統設計

1.1 系統架構設計

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

圖1 MVC 三層體系架構設計模式Fig.1 MVC three-layer architecture design pattern

模型封裝了系統數據庫中的字段及相應的業務規則和邏輯關系,并包含了數據驗證等相關的業務操作。

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

控制器將數據發送給模型,執行模型中的操作,最后呈現合適的工作管理系統頁面。

1.2 系統數據庫設計

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

表1 系統數據表Tab.1System datasheet

2 系統中的主要技術與實現

2.1 WF 的基本工作原理

工作流實例的執行按照預先定義好的規則進行,工作流實例執行時的環境由工作流運行時提供[4]。宿主應用程序承載工作流運行時類的實例,并由工作流引擎實現和管理工作流運行。

通信Service 服務實現宿主程序與工作流之間的數據交換。開發者也可以設計通信信道,并定義接口,使宿主程序與活動之間通過事件傳遞參數的方式進行通信并完成數據交換。

工作流管理系統[5,6]是一種人機交互的系統。未完成的工作流實例不能一直保存在內存當中,需要進行工作流持久化操作。工作流的持久化就是在持久化存儲(如SQL數據庫)里,保存工作流的一些狀態信息,如實例Id。

2.2 工作流類型

WF 中的工作流類型有順序工作流和狀態機工作流。順序工作流按照一定的順序和過程執行各項定義的活動。狀態機工作流從初始狀態開始到終止狀態結束由宿主應用程序觸發的外部事件驅動。

日常工作管理系統業務過程涉及到提交和回退動作,且開發者無法事先知道業務的執行順序。順序工作流的思想會將這種業務類型的處理變得很復雜,根據狀態機工作流的思想來建模卻可以高效地完成業務的處理[7]:通過在業務實體之間建立若干個狀態(其中必須建立一個起始狀態和終止狀態,分別代表工作流的開始與結束),每個狀態包括多個活動用來對業務數據進行處理。在狀態發生變化時,通過事件驅動實現一系列復雜的操作。

2.3 狀態機工作流實現

本系統業務流程為:安環處發布一項工作,責任人填寫并提交工作,安環處對責任人提交的工作進行審核,若審核通過,則流程結束,若退回責任人提交的工作,則責任人需要重新提交工作直到審核通過為止。相關業務流程如圖2 所示。

圖2 日常工作管理業務流程Fig.2 Business process of daily work management

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

在工作流設計界面添加“PublisherState”、“ResponsiblePersonState”、“DoneWithWorkState”等State 活動,分別對應發布人狀態、責任人狀態和工作流結束三個狀態。然后按照業務流程向各個State 狀態中添加所需要的EventDriven 活動,并且需要為個EventDriven 活動添加一個HandleExternalEvent 子活動,用來將活動與IDaily-WorkPlan 接口中的事件綁定起來,并通過各個Handle-ExternalEvent 活動的Invoked 屬性創建相關的事件。最后,將添加好的狀態之間的關系進行關聯,如圖3 所示。

圖3 日常工作計劃管理業務邏輯圖Fig.3 Business logic of daily work management

當發布人發布一條工作時,PublisherPublishEvent 事件指向ResponsiblePersonState 狀態,責任人提交工作后,PersonSubmitEvent 事件指向PublisherState 狀態,若發布人對工作審核通過,即PublisherPassEvent 事件,則轉向DoneWithWorkState 狀態,代表工作流結束。若對工作進行退回操作,即PublisherRetreatedEvent 事件,則再次返回到ResponsiblePersonState 狀態。

2.4 宿主應用程序實現

完成了工作流持久化數據庫的配置及狀態機工作流的實現后,需要實現MVC 設計模式下的ASP.NET Web宿主應用程序。

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

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

圖4 責任人填寫工作頁面Fig.4 Page for the responsible to fill out a job

目前該系統在企業使用,可以解決流程變化和軟件維護所帶來的很多問題。

3 結束語

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

[1]Dharma Shukla,Bob Schmidt;周?。ㄗg).WF 本質論/(美)[M].北京:機械工業出版社,2007.

[2]林舒萍,等.設計模式的應用研究[J].計算機工程與設計,2005,11.

[3]張麗君,齊建卓,吳宏波.基于MVC 模式的Struts 框架在Web 系統開發中的應用[J].內蒙古大學學報,2005,1.

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

[5]業寧,張愛珍,董逸生.一種可視化OA 工作流設計工具[J].計算機應用,2003,5.

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

[7]陳誼,侯堃,新吉樂,等.基于XML 和關系數據庫的可視化工作流系統[J].系統仿真學報,2012,1.

[8]楊琦. 工作流技術在高校教務管理系統中的應用與研究[J].IT 技術論壇,2008,16.

猜你喜歡
狀態機責任人實例
遵守安全生產法 當好第一責任人
新娘敬酒時受傷 責任人依法賠償
漏電保護器失效 連環責任人須賠償
做好新冠疫情常態化防控 履行“健康第一責任人”職責
基于有限狀態機的交會對接飛行任務規劃方法
完形填空Ⅱ
完形填空Ⅰ
FPGA設計中狀態機安全性研究
基于反熔絲FPGA的有限狀態機加固設計
基于VHDL的一個簡單Mealy狀態機
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合