符浩 李峰


關鍵詞:辦公自動化;低代碼開發平臺;表單;流程;自定義化
0 引言
云南省質檢院使用OA主要用于以下三類功能:發文管理、收文管理和事項管理,它們都屬于流程流轉。在實際應用中,流轉的過程不再固定,而應隨業務需求的變更而變化,例如刪減審批環節、添加判決條件、新增跳轉流程等。傳統OA開發在實踐中存在三個較為明顯的缺陷:一是軟件編寫會將OA流程固化,一旦業務流程發生變更,則須二次開發,消耗較大的人力、財力與時間成本;二是傳統開發模式采用各類編程語言、框架、運行環境等,對開發人員要求較高,開發進度較慢,部署周期長[4];三是純語言開發模式容易觸發BUG(程序錯誤),尤其是隱式BUG只有在OA業務運行階段才能發現,不僅修復困難,而且耗費時間,影響正常業務的運行[5]。為了克服以上缺陷,LCDP應運而生,經過多年的發展,LCDP已經做到了低代碼量甚至無代碼開發,普通業務人員經過短期培訓就能快速上手搭建新的業務流程,而且BUG極少,尤其適用于業務類信息系統的開發,此次云南省質檢院OA系統改造與升級就是基于云南昆遠睿方科技有限公司自研的LCDP。
1 自定義設計
LCDP本質上是軟件公司依據多年來的開發經驗將各個功能模塊細化,然后進行抽象封裝,通過可視化的方式操控各類控件,自定義配置控件屬性,調用相關系統回調函數,最后將控件通過組合、鏈接、復用等形式綜合起來用于新流程的開發。一個新流程的開發主要包含以下四個方面:界面設計、流轉設計、數據耦合和腳本輔助,下面逐一詳細說明。
1.1 界面設計
LCDP具有豐富的界面設計控件,如標簽、按鍵、文本框、菜單欄、布局器等,由于OA流程不涉及復雜的界面渲染,所以一般的流程界面只須使用標簽、按鍵、文本框這基礎三大件即可。以外出報備流程為例,圖1為職工發起申請的界面,首先創建白底模板,然后通過拖拽的方式將菜單欄里的各個控件拖放到合適的位置,虛線框內即為各個控件。對于單個控件,通過右擊可以編輯屬性,主要包括控件大小、位置、名稱、背景色、對齊方式、樣式等,設計完成后可以點擊預覽,如果對效果不滿意,可以刪除某個控件,重新拖拽新控件并設置屬性。
通過LCDP,可以將界面設計完全可視化,簡單的拖拉拽放與屬性設置就可以完成絕大部分界面的設計,不僅操作簡單,而且可以實時預覽,這一操作幾乎不會產生BUG。如果需要復雜的功能,例如控件疊放或動畫效果,則須點擊高級設置,再用腳本語言進行輔助設計。
1.2 流轉設計
流程的流轉過程設計比界面更簡單,只須簡單的節點和路由即可,以派車申請流程為例,圖2是派車申請流程圖,各節點注明部門及人員,路由注明流轉方向,使用方向線連接即可完成流程的初步設計。
1.3 數據耦合
先前的界面設計中有按鍵和文本框,流程設計中有節點和路由,內部包含大量字段與函數,用于數據的交互和邏輯的控制,只有數據和邏輯耦合起來,流程才能正常流轉。
1.3.1 表單設置
表單用于記錄一個界面所有文本框里的字段,包括字段名、字段類型、初始值等信息。對于字段的命名,須包含盡可能多的信息,例如所屬流程名、表單名等信息,因此每個字段名都會較長,字段名須映射到數據庫表中,不可與其他表單里相同含義的文本框字段重名,否則將引起數據串擾[6];對于字段的編輯屬性,字段需要限定編碼格式、取值范圍等,當前端界面輸入超范圍數值或非法字符時,需要提示用戶重新輸入,以便正確解析;對于字段的讀寫屬性,將其分為可讀與可寫,同時須配置相關回調函數進行條件約束,便于數據依不同用戶或操作劃分不同的權限。
1.3.2 回調函數
界面中每一個按鍵都須配置回調函數,通過多年累積,在LCDP中將常用的函數API進行了高級封裝,分為無返回值函數和有返回值函數[7]。對于無返回值函數,先按操作方法選擇函數名,然后配置傳入參數,函數參數分為操作屬性與操作數據,數據只能選擇該表單里已配置的字段,常用的操作方法有將字段保存到數據庫,更新狀態信息表等。對于有返回值的函數,還須配置返回參數,返回參數可為續調函數或數據,如果返回數據,系統默認其為臨時對象,此時必須配置續調函數對其繼續處理,且最后一個續調函數必須是無返回值函數,否則LCDP編譯時會報錯。回調函數除系統流轉功能外,還包括數據運算功能,例如基本運算、大小比較、賦值與讀取等操作,能滿足絕大部分的場景應用需求。
1.3.3 節點處理
各類事項在流轉的過程中會路經各個節點,節點按屬性可分為發起節點和審批節點,節點的處理主要包括人員的配置和回調函數的設置。在發起節點,發起人一般不作限制,只須配置下一節點審核部門和審核人,申請按鍵須配置一系列回調函數,首先是信息預審核函數,主要用于檢查數字范圍是否越界,字符能否正確解析,然后會調用數據存儲函數,在數據庫新建表單存儲本次事項流轉的所有信息,接著調用系統狀態函數,記錄并更新當前事項流轉的進度,最后調用推送函數,將表單數據與流程狀態推送至節點判決器。在審批節點,對于中間審批節點,需要配置當前節點和下一節點的審核人和審核部門,提交按鍵需要配置的回調函數與申請按鍵基本相似,唯一不同是調用新的數據存儲函數,不再創建新表單,只須追加寫入即可;對于末端審批節點,只須配置最終審核人和審核部門,終審意見也不再調用推送函數,而是調用完結函數,通知系統流程無須再流轉。
1.3.4 流向判決
節點處調用推送函數后,會將節點表單數據與流程狀態推送至路由判決器,路由判決器須提取關鍵字段進行二次判決,并調用新的回調函數將流程推向新的節點。首選須設置判決器的關鍵字段,字段可以從系統表里選取,對于最基礎的審批意見字段,若為同意,則提取節點審核人簽名并調用電子簽名函數,接著提取下一審批部門、審批人的字段,作為參數繼續調用路由推送函數;若為不同意,則調用路由回退函數,將流程打回到上一節點處,對于被打回的流程,系統狀態刷新后,則應在上一節點處,將完結按鍵的屬性從隱藏變為顯示,同時配置完結函數用以終結該流程。
流程的流轉除了基礎的審批意見外,更多的是按照不同的關鍵字跳轉不同的分支,路由判決器可以從數據庫表里添加多個關鍵字,按照判決條件的先后順序依次配置回調函數,有返回值的回調函數會生成中間臨時變量,對于復雜的邏輯判斷,可以將中間變量作為參數調用路由推送函數,進而推送至正確的分支流程中,同時要確保下一節點要有匹配的字段能接收上一節點的關鍵臨時變量,從而實現數據隨流程一起流轉。
1.3.5 文件讀寫
一個流程在流轉過程中,可能會掛載相應的文件,對于有文件作為附件的流程,界面須配置上傳與下載按鍵,回調函數里除了上傳與下載函數外,還須配置用戶權限函數,解析當前賬號是否有權限下載文件或者上傳新文件,若無權限,可以設置彈窗函數告知用戶。
對于表單數據,某些流程會配置標準模板,用戶可以下載并填寫好標準模板后,將其導入表單,此時需要調用數據導入函數;一個流程在完成全部流轉后,一般會生成一個表格作為電子存檔,導出函數可以將流轉過程中所需的字段寫入到表格對應的單元格中。數據的導入導出都是依賴于Office的書簽功能[8],不論Word還是Excel,都可以對指定單元格進行書簽標記,以外出報備審批表為例,LCDP數據庫表中須設置與圖3中書簽同名的字段,其數值才能被導入導出函數識別并處理。
1.4 腳本輔助
對于一些流轉邏輯較為復雜的流程,或判決條件為多條件聯合判決,或流程流轉需要形成閉環二次審批,或子流程需要分發多個部門聯合審批,此時配置回調函數則顯得力不從心,LCDP為解決復雜功能的自定義事項流轉,配備了腳本輔助功能[9]。腳本與回調函數可以獨立使用,也可以混合使用,腳本函數體內還可以調用預設好的系統回調函數。實際應用中,用腳本語言(此LCDP支持Python和JavaScript) 寫好函數名與函數體后,只須將其函數名注冊為回調函數即可,腳本輔助功能大大提高了復雜流轉邏輯的設計能力。
2 流程實現
流程完成自定義設計后,須經過嚴格的測試才能部署到OA系統里,下面詳細說明。
2.1 編譯與測試
如果流程的設計使用了腳本輔助功能,則應先進行腳本測試,對于腳本編寫的函數,可以使用常規的自動化測試或單元測試,測試合格后再將其注冊為自定義回調函數,以供控件調用。
LCDP自帶組合編譯功能,編譯時主要檢查數據接口的匹配性與流程流轉的連通性,編譯報錯時能快速定位到錯誤的控件設置或流程設置。編譯通過后,整個自定義流程的測試分為兩步:第一步是編寫測試腳本,讓流程自動化流轉并輸出想要的測試結果,測試功能是否達到設計目的;第二步是人工創建并登錄多個賬號,模擬實際流程流轉的過程,進一步測試功能有無紕漏,同時還能直觀地測試性能問題,對于明顯卡頓的地方,可以再次編寫測試腳本,進行單環節或單函數測試,排查卡頓原因。
2.2 部署與應用
LCDP 自帶的系統回調函數都是經過高度優化的,簡單的二次封裝一般不會帶來額外的性能開銷,而使用腳本編寫的自定義回調函數,利用自動化測試并對算法與數據結構進行優化,能將其運行時間控制在限定的范圍內,從而解決操作的卡頓問題。完成測試后,則可以在系統管理中,將自定義流程添加到事項管理中,OA系統內部會同步將新流程加入狀態監控表中。由于OA采用了B/S架構,只要服務端完成部署,用戶端可以做到無感升級,用戶重新登錄后,不僅可以發起、審批新的流程,而且可以在消息提示欄里查閱未處理的新流程。
3 結束語
本文較為完整地闡述了OA系統里基于LCDP的自定義流程的設計、測試與部署過程。實踐證明,LCDP的使用,使得普通業務人員通過簡單培訓即可完成自定義流程的設計,有一定代碼基礎的人可以通過腳本輔助實現更復雜功能的設計,不僅不易觸發BUG,而且性能幾乎沒有損失,顯著提高了開發效率;當業務流程出現變更需求時,使用LCDP能快速實現新流程的自定義設計、部署與應用,不再需要軟件公司的深度介入,節約大量的財力與時間成本,具有良好的經濟效益。