何 鵬,董 巖,曾衛(wèi)平
(中國直升機設(shè)計研究所,江西 景德鎮(zhèn) 333001)
CHRDI LCA流程系統(tǒng)是直升機所產(chǎn)品數(shù)據(jù)流程管理的平臺,用于型號數(shù)據(jù)的設(shè)計、校對、審核、會簽、打印、歸檔等一系列流程的管理。目前直升機所大部分的型號數(shù)據(jù)都采用了電子文件審簽的方式,但是有一部分型號還是采用紙質(zhì)文件審簽的方式,其中打印和歸檔環(huán)節(jié)需由檔案部門集中處理流程文件。隨著型號研制任務(wù)的更加繁重,為了保證上述環(huán)節(jié)的工作效率,檔案部門希望流程系統(tǒng)提供這部分型號流程文件的批量打印和歸檔功能,然而流程系統(tǒng)目前并沒有實現(xiàn)上述兩個功能。
LCA流程系統(tǒng)是經(jīng)典的基于B/S架構(gòu)的web應(yīng)用系統(tǒng),實現(xiàn)批量打印和歸檔功能需要調(diào)用本地資源,即調(diào)用本地應(yīng)用打印接口、本地文件系統(tǒng)等。傳統(tǒng)的做法是在流程系統(tǒng)的框架基礎(chǔ)上開發(fā)ActiveX控件來實現(xiàn)批量打印和歸檔功能,但是這種做法本身存在很多問題。ActiveX控件是當用戶瀏覽到特定網(wǎng)頁時,IE瀏覽器自動下載并提示用戶安裝[1],然而這樣的安裝過程需要用戶事先配置繁瑣的IE安全設(shè)置,增加了用戶的負擔。另外,ActiveX控件技術(shù)僅在IE內(nèi)核的瀏覽器上支持[2],其它非IE內(nèi)核的瀏覽器(如火狐、chrome、360等)并不支持ActiveX控件,加大了使用的局限性。
實現(xiàn)LCA流程系統(tǒng)批量打印和歸檔功能,其核心問題是如何便捷地訪問本地資源,這個問題使用基于C/S架構(gòu)的客戶端開發(fā)將會迎刃而解。由此本文提出了一種基于客戶端實現(xiàn)LCA流程系統(tǒng)批量打印和歸檔功能的解決方案,該解決方案使用winform開發(fā)、XPATH、Http請求與響應(yīng)等技術(shù)完成。
考慮到用戶使用習(xí)慣與數(shù)據(jù)來源的一致性,該解決方案利用客戶端內(nèi)嵌瀏覽器加載LCA流程系統(tǒng),并在客戶端上提供打印歸檔工具集。用戶可以打開客戶端,在界面上選擇加載相應(yīng)版本的LCA流程系統(tǒng),并在流程系統(tǒng)上鉤選多個流程號,之后通過工具集批量下載流程文件至本地完成批量打印和歸檔操作,最后把打印和歸檔狀態(tài)反饋至流程系統(tǒng)。綜上所述,該解決方案的目標是用戶可以通過客戶端訪問LCA流程系統(tǒng),使用客戶端工具集完成批量打印和歸檔操作,期待的用戶使用場景如圖1所示。
圖1 用戶使用場景
要想實現(xiàn)解決方案的目標,必須解決下面三個問題:1)客戶端集成多個版本的LCA流程系統(tǒng)供用戶選擇;2)LCA流程文件的批量下載以及文件信息的存儲方式;3)調(diào)用本地資源完成批量打印和歸檔操作并把結(jié)果反饋至LCA流程系統(tǒng)。
由此,解決方案的總體設(shè)計如圖2所示,客戶端系統(tǒng)主要分為頁面加載與解析模塊、本地資源管理模塊、工具集成模塊。其中頁面加載與解析模塊主要負責客戶端界面的布局,多版本LCA流程系統(tǒng)入口的集成,LCA流程系統(tǒng)的加載以及流程文件信息的解析。本地資源管理模塊主要負責流程文件的批量下載,流程文件及其文件信息的存儲,本地應(yīng)用程序接口的提供。工具集成模塊主要負責批量打印和歸檔工具的實現(xiàn),打印和歸檔狀態(tài)的反饋。
圖2 總體設(shè)計
為了保證流程數(shù)據(jù)直接來源于LCA流程系統(tǒng),解決方案通過客戶端加載流程系統(tǒng)。此模塊主要負責實現(xiàn)一個客戶端盒子,通過這個客戶端盒子能夠加載LCA流程系統(tǒng)并把工具集界面納入到其中。這里選用Winform技術(shù)完成客戶端盒子的開發(fā)。Winform在.net開發(fā)平臺中用于設(shè)計窗體和可視控件,以創(chuàng)建豐富的基于Windows操作系統(tǒng)的桌面應(yīng)用程序[3]??蛻舳撕凶硬捎胒orm窗體控件作為主界面, webbrowser控件作為內(nèi)置瀏覽器來加載LCA流程系統(tǒng)??蛻舳撕凶拥脑O(shè)計如圖3所示。
圖3 客戶端設(shè)計
此模塊的關(guān)鍵點在于如何獲取流程文件信息。前面提到過,LCA流程系統(tǒng)是通過webbrowser控件來訪問加載,而webbrowser控件下的DOM對象包含了當前頁的全部數(shù)據(jù)。這里使用Xpath技術(shù)定位并獲取LCA流程系統(tǒng)網(wǎng)頁中的流程文件信息標簽數(shù)據(jù)。Xpath是一門在Xml文檔中查看信息的語言,主要用于在Xml文檔中通過元素和屬性進行導(dǎo)航[4]。Xpath表達式包括標簽路徑匹配和屬性匹配的匹配方式。由于頁面DOM對象的標簽種類繁多、層級復(fù)雜,使用標簽路徑匹配去獲取標簽數(shù)據(jù)的代價太大且不穩(wěn)定。通過給LCA流程系統(tǒng)網(wǎng)頁上的流程文件信息標簽設(shè)置獨特的屬性值,之后使用Xpath屬性匹配的表達式來獲取各種類型的頁面數(shù)據(jù)。一部分的文件信息類型與其對應(yīng)的屬性值見表1。
如表1所示,使用xpath技術(shù)可以獲取LCA流程系統(tǒng)中流程文件的文件路徑、文件名稱、文件號、型號、設(shè)計者等信息,之后把這些信息發(fā)送至本地資源管理模塊。
表1 文件信息與標簽屬性對應(yīng)表
為了實現(xiàn)LCA流程文件的批量打印與歸檔,需要把流程文件下載至本地,之后通過本地應(yīng)用程序接口實現(xiàn)打印命令的發(fā)送與歸檔文件的上傳。此模塊通過頁面加載和解析模塊傳過來的流程文件路徑,生成相應(yīng)的HTTP請求發(fā)送至LCA流程系統(tǒng)服務(wù)器下載對應(yīng)的文件。
在LCA流程系統(tǒng)中,流程文件數(shù)據(jù)都有規(guī)范的結(jié)構(gòu),一個流程號下可能有圖樣文件、技術(shù)文檔和更改類文檔等文件。本地資源管理模塊也需要把獲取來的文件按照一定規(guī)則存放在本地。這里使用本地文件系統(tǒng)來結(jié)構(gòu)化地存放流程文件并通過不同的文件夾來區(qū)分文件的打印歸檔狀態(tài),文件夾層級結(jié)構(gòu)如圖4所示。
圖4 工作目錄層級結(jié)構(gòu)
圖4可以看出,不同版本的LCA流程系統(tǒng)分別建立單獨的目錄,每個版本的目錄下流程依據(jù)不同的處理狀態(tài)存放。系統(tǒng)的流程狀態(tài)分別為:新任務(wù)(new)、已打印(printed)、已歸檔(archived)、R18打印(R18printed),其中R18打印存放catia R18版本的工程圖,由于catia R18無法通過命令行方式打印,系統(tǒng)單獨保存至一個目錄讓用戶手動通過catia R18打印。
由于后續(xù)歸檔需要上傳記錄了流程文件信息的符合格式要求的XML文件,系統(tǒng)在文件下載完成后依據(jù)頁面加載和解析模塊傳過來的流程文件信息生成XML文件,生成的XML文件與物理文件存放在同一目錄下,XML格式如下:
< pagenum> XX1
< projnum> XX1 projnum>
該模塊不僅僅用于本地存放LCA的流程數(shù)據(jù),還需要提供調(diào)用本地應(yīng)用處理流程數(shù)據(jù)的接口。這些接口用于工具集成模塊調(diào)用,用于實現(xiàn)批量打印歸檔功能。用到的接口包括:Word文檔打印接口、catia工程圖打印接口、流程文件下載接口、XML文件上傳接口。
為了讓用戶可以便捷地對LCA流程文件進行批量打印,工具集成模塊提供直觀的交互界面,界面分為新任務(wù)、已打印、已歸檔三個選項卡,用于展示這三種狀態(tài)的流程文件,每個選項卡以列表樹的方式顯示流程號及其流程文件。流程文件列表項包含名稱、頁數(shù)、大小、型號、狀態(tài)等信息,用戶可以通過這些信息規(guī)劃流程文件打印歸檔的安排。
下面給出每個選項卡的數(shù)據(jù)源、集成的功能按鍵、需要調(diào)用的應(yīng)用接口,如表2所示。
表2 選項卡與其功能按鍵以及應(yīng)用接口對應(yīng)表
流程系統(tǒng)批量打印歸檔客戶端開發(fā)完成后,檔案部門的用戶可以直接在客戶端登陸界面上選擇進入相應(yīng)版本的LCA流程系統(tǒng),之后在流程系統(tǒng)上鉤選需要批量處理的流程號并添加至打印歸檔工具集。用戶可以在工具集的流程文件列表樹上依據(jù)文件名和文件大小,合理地規(guī)劃流程文件的打印次序,如集中打印catia工程圖。
該解決方案快速完成了LCA流程系統(tǒng)批量打印功能的開發(fā),填補了流程系統(tǒng)批量打印歸檔功能的空白,滿足了檔案部門特殊的批量打印需求,提升了檔案部門的工作效率;客戶端系統(tǒng)實現(xiàn)流程數(shù)據(jù)文件批量打印歸檔及狀態(tài)反饋,保證了數(shù)據(jù)的一致性及流程狀態(tài)的可控。