李健輝
(埃森哲(中國(guó))有限公司 上海市 200072)
(1)受理負(fù)責(zé)人在接受終端用戶的呼叫時(shí),利用本系統(tǒng)的報(bào)價(jià)注冊(cè)功能制作概算報(bào)價(jià)(可以輸出概算報(bào)價(jià)單)。
(2)在上流的PILOT系統(tǒng)中注冊(cè)對(duì)CE的作業(yè)做指示處理。
(3)在FITS-CE系統(tǒng)中,從CE(負(fù)責(zé)修理的人)處登記出差、現(xiàn)場(chǎng)作業(yè)的各種時(shí)間和。
(4)在估算實(shí)績(jī)系統(tǒng)中提取夜間批處理完成的工作。
(5)通過估算實(shí)績(jī)系統(tǒng)進(jìn)行實(shí)績(jī)登記→實(shí)際成績(jī)批準(zhǔn)→實(shí)際成果發(fā)送。
1.無償作業(yè):直接在實(shí)績(jī)批準(zhǔn)畫面上承認(rèn),并在夜間批量向SAP側(cè)發(fā)送實(shí)績(jī)。
2.有償作業(yè):在有償作業(yè)實(shí)績(jī)登記畫面中登記實(shí)際成績(jī)信息,計(jì)算請(qǐng)求金額的費(fèi)用后進(jìn)行實(shí)際工數(shù)和費(fèi)用的登錄。
(6)在實(shí)際工數(shù)以及費(fèi)用完成后,通過實(shí)際成績(jī)批準(zhǔn)畫面,夜間批量向SAP側(cè)發(fā)送數(shù)據(jù)進(jìn)行后續(xù)處理。
OracleADF是ApplicationDevelopmentFramework的縮寫,是端對(duì)端的程序開發(fā)框架,該框架通過虛擬開發(fā)設(shè)置和基礎(chǔ)架構(gòu),能加速構(gòu)建面向服務(wù)的應(yīng)用程序。例如使用無線網(wǎng)絡(luò)和桌面應(yīng)用程序來檢索、顯示以及更新數(shù)據(jù)等處理,使開發(fā)得到大大的簡(jiǎn)化。ADF的框架可以分割視圖層、控制業(yè)務(wù)邏輯層和數(shù)據(jù)接口層三者之間的關(guān)系,體現(xiàn)了經(jīng)典的MVC模式的靈魂。如圖1所示。
1.3.1 Business Service業(yè)務(wù)服務(wù)層
包括ADF底層接口層(ADFApplicationModule),業(yè)務(wù)數(shù)據(jù)訪問層(DataAccess)和業(yè)務(wù)持久層(PersistentBusinessObject)。創(chuàng)建的步驟是先創(chuàng)建和定義Entity對(duì)象(EntityObject),接著創(chuàng)建和定義View對(duì)象(ViewObject),之后是創(chuàng)建和定義ADF底層接口層。Entity對(duì)象是指對(duì)象數(shù)據(jù)庫(kù)中所有的表或?qū)ο箨P(guān)聯(lián)表結(jié)合后的View視圖,View對(duì)象是根據(jù)Entity對(duì)象來創(chuàng)建的,它主要用于數(shù)據(jù)庫(kù)訪問。ADF底層接口層是Business Service業(yè)務(wù)服務(wù)層和中間Model層的接口,其中上述被創(chuàng)建好的View對(duì)象需要被定義到ADF底層接口層。通過這樣的定義方式可以進(jìn)行訪問下述的中間Model層。
1.3.2 Model層
Model層有兩部分(詳細(xì)參照?qǐng)D1),一是ADFDataControl部分,二是ADFBindings部分。ADFDataConrol部分是在上述介紹的ADF底層接口層中被定義好的View對(duì)象,ADFBindings部分主要用于綁定。實(shí)際的項(xiàng)目開發(fā)過程中Model層幾乎沒有開發(fā)步驟。
1.3.3 Controller層
ADF的Controller層有很多擴(kuò)充,其中最主要是提供了畫面流轉(zhuǎn)圖,其目的在于簡(jiǎn)化整個(gè)程序的開發(fā)過程。開發(fā)過程中開發(fā)人員可以直接拖拽需要的各種組件拖入到Controller層內(nèi),同時(shí)相關(guān)的配置信息自動(dòng)同步更新到畫面流轉(zhuǎn)圖的相關(guān)聯(lián)的Strutsconfig配置文件,簡(jiǎn)化開發(fā)步驟提高效率。另外被開發(fā)人員喜愛的組件是DataPage組件,它主要是創(chuàng)建對(duì)象畫面并且創(chuàng)建相關(guān)聯(lián)的DataForwardAction,根據(jù)業(yè)務(wù)邏輯開發(fā)人員可以覆寫創(chuàng)建好的DataForwardAction來擴(kuò)展功能。
1.3.4 View層
視圖View層融入了ORACLE 強(qiáng)有力的UIX 技術(shù),提供了功能強(qiáng)大的開發(fā)組件豐富了整個(gè)視圖層,根據(jù)業(yè)務(wù)需求能夠更好的選擇相應(yīng)的組件實(shí)現(xiàn)各種功能。其中可視化畫面編輯器Jdeveloper被開發(fā)人員大力推崇,可以在使用組件面板中加入客戶業(yè)務(wù)需要的特色組件,并自由地定義,編輯和更新對(duì)象組件的屬性。由于編輯器和代碼的同步性,在編輯屬性的同時(shí)與之相關(guān)的代碼也會(huì)發(fā)生變化,大大提高效率減少開發(fā)過程的工作。
該系統(tǒng)是使用Fusion Web應(yīng)用程序的制作和構(gòu)建的,JDeveloper作為應(yīng)用程序的開發(fā)以及調(diào)試工作。JDeveloper提供了若干可用于創(chuàng)建應(yīng)用程序和項(xiàng)目的模板應(yīng)用程序。模板應(yīng)用程序是根據(jù)開發(fā)各種各樣的應(yīng)用程序所需的基本技術(shù)事先構(gòu)成。為了構(gòu)建工作環(huán)境,在選擇最符合需求的模板后,根據(jù)需要進(jìn)行追加預(yù)定使用的技術(shù)的設(shè)定。開發(fā)流程步驟如圖2所示。
圖1:ADF整體架構(gòu)圖
圖2:ADF的開發(fā)流程步驟
圖3:創(chuàng)建工程Model
如圖3所示。
圖4:創(chuàng)建DataSource
圖5:創(chuàng)建Business Service
如圖4所示。
Business Service是指連接到數(shù)據(jù)庫(kù),進(jìn)行數(shù)據(jù)取得和更新的服務(wù)器方面的處理。ADF商務(wù)組件是為了創(chuàng)建只在開發(fā)者的最小限度的代碼描述中可再使用的數(shù)據(jù)庫(kù)對(duì)應(yīng)的BusinesssService的技術(shù)。開發(fā)者可以使用向?qū)Ш鸵曈X編輯器,在不描述Java代碼的情況下創(chuàng)建ADF業(yè)務(wù)組件服務(wù),還可以擴(kuò)展核心ADF業(yè)務(wù)組件類,ADF商務(wù)組件服務(wù)也使用在應(yīng)用程序的視圖層的ADF模型。下面做成的列子是數(shù)據(jù)庫(kù)表的Business Service。如圖5所示。
然后就可以可以對(duì)作成好的控件進(jìn)行數(shù)據(jù)表的字段匹配。
在ViewController按照設(shè)計(jì)書采用拖拽控件作成JSF畫面。查看自動(dòng)生成的代碼。如圖6所示。
如圖7所示。
返回到Model,在按鈕事件中編寫Java邏輯代碼實(shí)現(xiàn)客戶的各種業(yè)務(wù)需求。
流程:上流系統(tǒng)數(shù)據(jù)受理→預(yù)定工數(shù)/實(shí)際工數(shù)錄入→批準(zhǔn)→數(shù)據(jù)送入下流系統(tǒng)。
3.1.1 概要描述
使用Oracle的PL/SQL創(chuàng)建業(yè)務(wù)邏輯的Package,啟動(dòng)服務(wù)器上的JobCenter軟件調(diào)用Package實(shí)現(xiàn)每天20 點(diǎn)到早上8點(diǎn)每間隔1個(gè)小時(shí)把上流的相關(guān)數(shù)據(jù),21條為單位同步工數(shù)管理系統(tǒng)的各個(gè)業(yè)務(wù)表中。
3.1.2 難點(diǎn)分析及解決方法
難點(diǎn)在于系統(tǒng)上線后JobCenter啟動(dòng)時(shí)總是發(fā)生原因不明的異常。為了解決這個(gè)問題,我們從三方面進(jìn)行了確認(rèn),一是確認(rèn)服務(wù)器的環(huán)境配置以及JobCenter的參數(shù)是否正確。二是確認(rèn)程序的性能,業(yè)務(wù)邏輯是從上流系統(tǒng)抽取對(duì)象數(shù)據(jù)更新到本系統(tǒng)的業(yè)務(wù)表,前期做壓力測(cè)試時(shí)更新處理對(duì)性能的影響較小,確認(rèn)連接上流系統(tǒng)的數(shù)據(jù)庫(kù)配置沒有問題后針對(duì)上流系統(tǒng)的抽出部分SQL語句以及該當(dāng)SQL語句的實(shí)行計(jì)劃進(jìn)行分析但是結(jié)果還是沒有找到原因。三是在上流系統(tǒng)抽出處理的SQL語句附近加輸出日志代碼在來確認(rèn)生產(chǎn)環(huán)境下看抽數(shù)據(jù)的情況,結(jié)果每次抽到第21條數(shù)據(jù)時(shí)就會(huì)出錯(cuò)不能處理了。針對(duì)調(diào)查出的結(jié)果,我們?cè)谏狭飨到y(tǒng)抽出處理的SQL語句的抽出條件中加了【ROWNUM < 21】此問題得到解決。但是為什么會(huì)發(fā)生推測(cè)最大的可能就是上流系統(tǒng)的數(shù)據(jù)庫(kù)中有處理對(duì)象數(shù)據(jù)件數(shù)的設(shè)置,很遺憾我們沒有權(quán)限去查看客戶上流系統(tǒng)的服務(wù)器,后跟客戶確認(rèn)了服務(wù)器情況客戶說明上流系統(tǒng)數(shù)據(jù)庫(kù)的建立初期時(shí)沒有留下資料,客戶方也沒有辦法確認(rèn)。雖然原因不明但是解決了問題,得到了客戶的高度好評(píng)。
圖6:創(chuàng)建JSF畫面
3.2.1 概要描述
需要錄入信息多,被錄入的信息來做工數(shù)以及費(fèi)用的算出的邏輯處理很復(fù)雜,被錄入的信息組合大約3000種情況。需要錄入的信息如下。
(1)關(guān)聯(lián)的作業(yè)登錄碼信息錄入;
(2)客戶信息自動(dòng)反映;
(3)發(fā)生工數(shù)后承擔(dān)費(fèi)用的管理信息自動(dòng)反映;
(4)擔(dān)當(dāng)工作的個(gè)人信息錄入;
(5)相關(guān)制品,信息錄入;
(6)工作類型的信息錄入;
(7)使用部件的信息錄入;
(8)發(fā)生各種工數(shù)信息錄入;
(9)發(fā)生各種費(fèi)用信息錄入。
圖7:DB數(shù)據(jù)反映到關(guān)聯(lián)的畫面的流程圖
圖8:DB ADF框架問題
3.2.2 難點(diǎn)分析及解決方法
由于需要輸入的信息很多,利用JSF開發(fā)對(duì)象功能畫面簡(jiǎn)化了拖拽控件的方式節(jié)省了很多時(shí)間。這一點(diǎn)得到了客戶的很高的認(rèn)可。本環(huán)節(jié)的問題在于ADF框架的問題導(dǎo)致發(fā)生系統(tǒng)障害。畫面的項(xiàng)目輸入值后放置30秒左右被輸入的值會(huì)變成【0】,并且從可輸入的狀態(tài)變成不能輸入的狀態(tài)。詳細(xì)如圖8所示。
因?yàn)檫@個(gè)現(xiàn)象是偶發(fā)的,最初雖然我們做了很多方向的調(diào)查但是不知道發(fā)生的原因。為了再現(xiàn)這個(gè)現(xiàn)象重復(fù)操作大約用了3天時(shí)間才得到一些方向,推測(cè)是ADF框架發(fā)生數(shù)據(jù)庫(kù)的瞬斷并且自動(dòng)清除緩存信息,再次自動(dòng)進(jìn)行了數(shù)據(jù)庫(kù)的再連接、SQL語句的自動(dòng)再執(zhí)行處理導(dǎo)致畫面數(shù)據(jù)發(fā)生了變化。通過客戶去咨詢了OracleADF的技術(shù)支持,OracleADF技術(shù)部門的擔(dān)當(dāng)者回復(fù)他們目前沒有類似的例子且由于客戶的信息安全原因不能提供相應(yīng)的程序給OracleADF相關(guān)的技術(shù)部門做調(diào)查,所以需要自己調(diào)查怎么解決問題。另外這樣的現(xiàn)象是偶發(fā)的且發(fā)生的時(shí)間不固定難度很高,所以推測(cè)最大的原因應(yīng)該是ADF的某些對(duì)象控件的有特殊的設(shè)定而沒有去調(diào)查后臺(tái)的數(shù)據(jù)庫(kù)相關(guān)的設(shè)定。后來把控件的相關(guān)屬性做了調(diào)查,發(fā)現(xiàn)List一覽控件有個(gè)【受動(dòng)化】的屬性沒有被設(shè)置上。嘗試著設(shè)置好【受動(dòng)化】的屬性并測(cè)試了沒有在發(fā)生控件的值和狀態(tài)變化。這個(gè)問題是在沒有OracleADF技術(shù)支持的情況自發(fā)解決的,雖然用了很長(zhǎng)時(shí)間但是得到了客戶的認(rèn)可。
3.3.1 為已發(fā)生的工數(shù)以及費(fèi)用做批準(zhǔn)處理
查詢出需要得到承認(rèn)的已發(fā)生的工數(shù)以及費(fèi)用的對(duì)象數(shù)據(jù)做批準(zhǔn)/取消批準(zhǔn)的處理。還可以對(duì)象數(shù)據(jù)由于特殊原因不需要被承認(rèn)的處理,此外還可以查看對(duì)象數(shù)據(jù)的相關(guān)的信息。
3.3.2 批準(zhǔn)者的基準(zhǔn)
在實(shí)現(xiàn)本機(jī)能時(shí),不需要任何前臺(tái)的處理,后臺(tái)各種邏輯判斷。畫圖雖然看上去很簡(jiǎn)單,其實(shí)非常的難。特別利用Oracle技術(shù)的階層查詢SQL語句。如表1所示。
表1
通過上述3.2到3.3介紹的工數(shù)以及各種費(fèi)用會(huì)被輸出到下流的系統(tǒng)中,特別是SAP的ERP系統(tǒng)的結(jié)算費(fèi)用的模塊。如錯(cuò)誤錄入信息時(shí),需要聯(lián)動(dòng)各個(gè)部門聯(lián)絡(luò)手動(dòng)改數(shù)據(jù)再次輸出到下層系統(tǒng)或者總務(wù)部門修改賬票的數(shù)據(jù)。
整個(gè)系統(tǒng)由多個(gè)層級(jí)結(jié)構(gòu)的虛擬網(wǎng)站構(gòu)成,每個(gè)站點(diǎn)可單獨(dú)按用戶或其角色進(jìn)行訪問授權(quán)。在單個(gè)站點(diǎn)內(nèi)部,存儲(chǔ)信息的文檔庫(kù)和列表(如項(xiàng)目文檔庫(kù),聯(lián)系人列表)也可以在庫(kù)/列表一級(jí),文件夾一級(jí)和單個(gè)文檔/條目一級(jí)按用戶或角色進(jìn)行授權(quán)。各級(jí)管理員可通過定義角色或共享已定義的角色來方便的進(jìn)行授權(quán)設(shè)置。
系統(tǒng)支持多種用戶認(rèn)證機(jī)制,LDAP,和自帶的用戶認(rèn)證機(jī)制;可采用HTTPS(The secure hypertext transfer protocol)來傳輸加密的用戶登錄信息,加密存儲(chǔ)用戶的信息。并且加密后的密碼存儲(chǔ)在上層系統(tǒng)中。
基于系統(tǒng)安全訪問控制,我們對(duì)訪問用戶的賬戶類型進(jìn)行分類管理。針對(duì)內(nèi)部用戶我們通過采用雙因素的身份驗(yàn)證方式,保證系統(tǒng)訪問安全。
該系統(tǒng)架構(gòu)能夠提供7*24小時(shí)的高可靠性。在該種部署模式中,每臺(tái)服務(wù)器(Windows Server,Oracle均通過負(fù)載均衡或群集方式排出了單點(diǎn)故障可能。此外,Oracle也提供了完善的數(shù)據(jù)備份/恢復(fù)工具幫助用戶快速備份/恢復(fù)數(shù)據(jù)。
系統(tǒng)平臺(tái)的管理工作全部集中在一個(gè)單獨(dú)的管理中心站點(diǎn)上,用戶界面完全基于Web。管理員可通過遠(yuǎn)程方便的完成對(duì)系統(tǒng)的管理。服務(wù)器提供了用戶訪問統(tǒng)計(jì),搜索統(tǒng)計(jì)等的數(shù)據(jù)分析功能,以圖表或文件方式幫助管理員了解門戶日常使用情況。而且也提供了完善的日志功能,通過對(duì)日志的分析,可以獲得更詳細(xì)的分析報(bào)表。
OracleADF框架減少代碼的開發(fā),編程者只需要處理業(yè)務(wù)邏輯問題。使用起來也很方便。但是同時(shí)也存在著一些問題,只能用提供的標(biāo)準(zhǔn)畫面不能自主地改變。會(huì)使用本框架的開發(fā)者少,意味著未來可能會(huì)消失。希望以后的開發(fā)框架也能這么使用方便,能節(jié)省很多時(shí)間。本系統(tǒng)上線后,得到了客戶的好評(píng)。