這是我目前正在進行的工作,記錄下來順便理理思路
背景:我於今年入職這家公司,由於歷史等原因,公司內部軟體系統處於沒有軟體架構的狀態,同時待開發的功能較多,其中工作流審批部分使用的引擎是乙個叫captaris的完全找不到任何資料,且其開發者疑似倒閉,使用它的原因是因為集團在使用,而開發時沒有設計人員,所以程式設計師沒細想就用了,同時由於沒有任何資料,這個工作流引擎用的面目全非沒有給開發帶來任何好處,並且無法完成有些特殊需求。
針對這種情況,當時決定將這種開發方式廢棄,短時間內封裝乙個可以完成支援當時審批需求的單據流轉功能,當時用了5天(非常簡陋),但至少開發效率提高了不止一倍;但是,原本執行著的流程要一點一點的平穩移動過來,同時有些技術以外的原因,原來的個別流程不會移植,面對這種情況,我採用了依賴注入的方式,把原來的工作流封裝了下和我新做的這個借助配置檔案在不同的流程採取不同的注入模組,讓流程外部完全不關心流程內部的實現情況,方面以後會遇到的各種變動。
下面進入正題:
來了不能拒絕的需求,1.審批後要發郵件,可以通過郵件進行審批;2.審批同時要把下一步的審批人列出來(這個要特殊說一下,我的審批流,下一步的審批人是不確定的,根據配置和當前業務資料條件來決定下一步審批人)等等;
實現這類需求,我有兩種選擇:一是在流程內部實現,但是這樣會導致業務與流轉混雜,流程流轉相關業務與流轉的是一定要分離,而且這種業務在我的公司變化的情況很多,開閉原則就不多說了;二是在流程外部實現,當然第一種pass了我只能選這個了。
在流程外部實現,面臨的問題是:1.依賴注入了流程實現,所以流程過程中的資訊完全獲取不到;2.兩種流轉機制差異極大,難以統一,無法統一返回資訊的結構。
第乙個問題的解決辦法,既然外部取不到,理所當然會想到,將外部需要流傳過程資訊的方法傳給工作流的實現模組,由工作流去執行,比如在審批結束時的後置事件:
//定義乙個委託public delegate void executionendeventhandler
//在工作流實現部分提供外部乙個註冊的方法
public override void registerexecutionendevent(delegate executionend, string userid)
}public void registerexecutionendevent(delegate executionend)
//當外部需要時,只需要將事件註冊進來即可
workflowfactory.registerexecutionendevent(new workflowevent.executionendeventhandler(onexecutioncompleted), "userid ");
第二個問題,費了些腦筋,最開始用了巢狀hashtable的方式實現的,但是始終感覺不舒服,看著就各種不舒服,最後終於在群裡朋友深藍醫生的提醒下,想起微軟還有個.data的命名空間,有個東西叫dataset,它可以返回任意的結構,可結構的資訊,這個…,著實太久不用下意識的就忘記了。
public void onexecutioncompleted(dataset process)
至此,大體思路就確定下來了,剩下的比如註冊事件的許可權,比如可以返回的資訊控制等等,都是細節,我去鼓搗了,再見!
業務流轉與表單的整合
有用過工作流的朋友都知道通常業務流轉需要表單來表達實際的業務,乙個好的工作流管理系統必定是有乙個好的表單功能的。否則就很難滿足企業的需求了。因此說工作流系統需要與表單進行整合具有非常重要的業務意義,與表單的整合通常包括表單資料的自動獲取 儲存 修改,域的許可權控制 流程相關資料的維護以及流程環節表單...
OA審批流轉的需求與方案
審批流轉 1,為什麼要有審批流轉 目的 2,審批流轉模組要實現的功能 要求 3,解決方案與介面 1,目的 1,審批流轉就是把單位內部的各項審批電子化,如工作請示 出差申請 採購申 請 報銷等日常工作流程。2,審批流轉所用的流程是表單流轉的步驟,其核心是表單 或叫做文件 流程 是為表單服務的,且乙個表...
呼叫中心系統的工單流轉處理流程
呼叫中心系統中的工單管理功能,在坐席工作中起到了重要作用,這篇文章我們就來深入了解一下 呼叫中心系統工單流轉處理流程。呼叫中心工單的流轉流程 建立工單 提交工單 分派工單 處理工單 工單驗收 完成工單 工單處理結果反饋。下面以技術服務工單為例 1 呼叫中心坐席接到使用者來電,根據使用者需求建立業務工...