輕輕松松使用構(gòu)件化技術(shù)構(gòu)建Web應(yīng)用_第1頁
輕輕松松使用構(gòu)件化技術(shù)構(gòu)建Web應(yīng)用_第2頁
輕輕松松使用構(gòu)件化技術(shù)構(gòu)建Web應(yīng)用_第3頁
輕輕松松使用構(gòu)件化技術(shù)構(gòu)建Web應(yīng)用_第4頁
輕輕松松使用構(gòu)件化技術(shù)構(gòu)建Web應(yīng)用_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、輕輕松松使用“構(gòu)件化”技術(shù)構(gòu)建Web應(yīng)用Primeton EOS 6.0普元信息技術(shù)有限公司Primeton Technologies, Ltd.歡迎使用本手冊(cè)詳細(xì)介紹普元EOS產(chǎn)品各個(gè)部分對(duì)安裝環(huán)境的要求和限制;詳細(xì)介紹產(chǎn)品在不同操作系統(tǒng)環(huán)境中針對(duì)不同應(yīng)用服務(wù)器和數(shù)據(jù)庫安裝的操作步驟。圖標(biāo)使用約定本書使用以下圖標(biāo),代表特定含義: EOS基本概念 開發(fā)心得與小技巧 說明與注意事項(xiàng)內(nèi)容使用約定本書對(duì)文本內(nèi)容的使用有如下約定:普元EOS 或Primeton EOS:簡(jiǎn)稱EOS本出版物包含Primeton的專利信息,它在許可協(xié)議下提供,并受版權(quán)法保護(hù),本出版物包含的信息不包括任何產(chǎn)品保證。通過您當(dāng)?shù)?/p>

2、的Primeton代表或分部可訂購(gòu)出版物,或致購(gòu)出版物當(dāng)您發(fā)送信息給Primeton后,即授予Primeton非專有權(quán),Primeton對(duì)于您所提供的任何信息,有權(quán)利以任何它認(rèn)為適當(dāng)?shù)姆绞绞褂没蛏l(fā),而不必對(duì)您負(fù)任何責(zé)任Copyright (c) 2008 Primeton Technologies, Ltd. All rights reserved.目 錄第1章 前言1-11.1 準(zhǔn)備工作1-1第2章 快速開發(fā):?jiǎn)伪碓鰟h改查2-12.1 頁面效果2-12.2 數(shù)據(jù)準(zhǔn)備2-22.3 創(chuàng)建數(shù)據(jù)模型2-32.4 設(shè)置顯示屬性2-52.5 增刪改查一步完成2-92.6 E

3、OS數(shù)據(jù)庫維護(hù)功能開發(fā)訣竅2-19第3章 實(shí)現(xiàn)關(guān)聯(lián)表操作3-13.1 數(shù)據(jù)準(zhǔn)備3-13.2 創(chuàng)建數(shù)據(jù)模型3-23.3 產(chǎn)生錄入關(guān)聯(lián)數(shù)據(jù)的界面3-43.4 使用Lookup實(shí)現(xiàn)關(guān)聯(lián)表操作3-7 用Lookup來實(shí)現(xiàn)錄入界面輸入機(jī)構(gòu)3-7 在結(jié)果集中顯示關(guān)聯(lián)實(shí)體的屬性3-12第4章 實(shí)現(xiàn)從表操作4-14.1 頁面效果4-14.2 數(shù)據(jù)準(zhǔn)備4-14.3 創(chuàng)建數(shù)據(jù)模型4-24.4 使用Datacell實(shí)現(xiàn)從表數(shù)據(jù)錄入4-4 修改JSP錄入界面4-5 修改邏輯程序4-74.5 EOS應(yīng)用邏輯開發(fā)訣竅4-12第5章 還能再快嗎?5-15.1 模型設(shè)置5-15.2 主從表功能一步完成5-2第1章 前言剛拿到

4、EOS發(fā)現(xiàn)這個(gè)產(chǎn)品包含很多的概念和全新的編程思想,作為一個(gè)新手能否快速學(xué)習(xí)EOS?本文將把EOS最基本的關(guān)鍵動(dòng)作展示出來,學(xué)習(xí)基礎(chǔ)動(dòng)作可以為以后的熟練打下了基礎(chǔ)。本教程并不涉及EOS中關(guān)于安裝、SOA基本概念、部署與管理。主要是通過向?qū)Х绞介_發(fā)一個(gè)簡(jiǎn)單數(shù)據(jù)庫操作的Web功能來體驗(yàn)EOS編程思想,中間穿插介紹了一些EOS的基本概念與開發(fā)技巧。這篇文檔的讀者群設(shè)定為第一次接觸EOS的開發(fā)者,或者是EOS產(chǎn)品體驗(yàn)人員,在瀏覽這篇文檔后就能夠掌握EOS的基本開發(fā)。就像本文的題目一樣能夠真正輕輕松松構(gòu)建應(yīng)用。1.1 準(zhǔn)備工作下載EOS 6.0開發(fā)版安裝包,詳細(xì)的安裝說明請(qǐng)參見EOS產(chǎn)品安裝指南。第2章

5、快速開發(fā):?jiǎn)伪碓鰟h改查2.1 頁面效果在Web頁面上展現(xiàn)數(shù)據(jù)庫中的一張表,實(shí)現(xiàn)了對(duì)單表的數(shù)據(jù)庫查詢、增加與刪除功能操作,并且實(shí)現(xiàn)了分頁查詢,效果如圖2-1所示。圖2-1 查詢與結(jié)果效果圖圖2-2 錄入與修改表單2.2 數(shù)據(jù)準(zhǔn)備為了實(shí)現(xiàn)一個(gè)單表的增刪改查功能,需要先準(zhǔn)備一張數(shù)據(jù)庫表。在安裝過程中設(shè)置一個(gè)可用的數(shù)據(jù)庫。 說明:l 由于EOS平臺(tái)主要針對(duì)企業(yè)系統(tǒng),因此在安裝過程前需要準(zhǔn)備好一個(gè)數(shù)據(jù)庫,并且在安裝過程中初始化數(shù)據(jù)庫。l 本文后續(xù)所有的數(shù)據(jù)庫腳本都是基于Oracle的,建議準(zhǔn)備一個(gè)Oracle數(shù)據(jù)庫??梢酝ㄟ^數(shù)據(jù)庫的客戶端完成數(shù)據(jù)庫表的創(chuàng)建,以及數(shù)據(jù)庫中的初始數(shù)據(jù)的準(zhǔn)備。數(shù)據(jù)庫腳本(請(qǐng)取

6、zip包中的operator.sql): 小技巧:EOS Studio中已經(jīng)內(nèi)置了一個(gè)SQL編輯器,并且可以使用Studio通過安裝包已經(jīng)準(zhǔn)備好的數(shù)據(jù)庫連接直接執(zhí)行上面的數(shù)據(jù)庫腳本,創(chuàng)建好數(shù)據(jù)庫表。可以參考如圖2-3所示的界面進(jìn)行如下操作:(1) 可以在項(xiàng)目中創(chuàng)建一個(gè)文件夾,然后創(chuàng)建對(duì)應(yīng)數(shù)據(jù)庫腳本文件。(2) 選擇連接數(shù)據(jù)庫。(3) 在sql文件編輯器中點(diǎn)擊右鍵,選擇運(yùn)行SQL菜單即可運(yùn)行sql文件。圖2-3 運(yùn)行sql腳本文件 注意:執(zhí)行sql腳本文件后,需要重新刷新“數(shù)據(jù)庫資源管理”視圖中的“表”,才能看到新創(chuàng)建的表。2.3 創(chuàng)建數(shù)據(jù)模型步驟1: 右鍵點(diǎn)擊“資源管理器”視圖中,用戶創(chuàng)建的構(gòu)

7、件包下的“數(shù)據(jù)/數(shù)據(jù)模型”節(jié)點(diǎn),選擇創(chuàng)建/數(shù)據(jù)集菜單,如圖2-5所示,創(chuàng)建一個(gè)名為“data”的數(shù)據(jù)集。圖2-5 創(chuàng)建數(shù)據(jù)集步驟2: 在(data)數(shù)據(jù)集中直接將左下角的“數(shù)據(jù)庫資源管理”視圖中的“O_OPERATOR”表拖拽到(data)數(shù)據(jù)集編輯器的空白處。Studio將創(chuàng)建出一個(gè)“數(shù)據(jù)實(shí)體”,名稱(OOperator),如圖2-6所示。圖2-6 創(chuàng)建數(shù)據(jù)實(shí)體 EOS原理:數(shù)據(jù)實(shí)體在應(yīng)用編程中,需要建立業(yè)務(wù)域?qū)ο竽P停赵峁┑臄?shù)據(jù)建模工具可以完成企業(yè)的元數(shù)據(jù)定義。在管理應(yīng)用系統(tǒng)中,通常建立的數(shù)據(jù)定義都是通過DB數(shù)據(jù)庫進(jìn)行持久化的。通過數(shù)據(jù)庫反轉(zhuǎn)回來的數(shù)據(jù)定義就是一個(gè)可以持久化的數(shù)據(jù)實(shí)體。

8、在上面例子中創(chuàng)建的OOperator這個(gè)實(shí)體,實(shí)際上建立一個(gè)OOperator對(duì)象和數(shù)據(jù)庫表O_OPERATOR直接MAP映射關(guān)系,可以調(diào)用數(shù)據(jù)服務(wù)API實(shí)現(xiàn)數(shù)據(jù)庫持久化操作。2.4 設(shè)置顯示屬性步驟1: 打開上面創(chuàng)建的數(shù)據(jù)實(shí)體,修改所有屬性的顯示名稱,如圖2-8所示。圖2-8 修改所有屬性的顯示名稱步驟2: 設(shè)置每個(gè)字段在JSP頁面中的表現(xiàn)形式,下面介紹幾種基本的:(1) 字符串錄入,數(shù)據(jù)校驗(yàn):雙擊“userId”字段,設(shè)置“顯示屬性”,如圖2-9所示。圖2-9 設(shè)置userId的顯示屬性(2) 業(yè)務(wù)字典:某些字段數(shù)據(jù)采用編碼的方式保存,EOS產(chǎn)品提供了一套業(yè)務(wù)字典管理功能,通過業(yè)務(wù)字典提供

9、的一組TAG,即可完成代碼數(shù)據(jù)的錄入和顯示。雙擊“gender”屬性,然后給“gender”設(shè)置一個(gè)業(yè)務(wù)字典類型,如圖2-10所示。圖2-10 設(shè)置gender的業(yè)務(wù)字典類型 EOS原理:顯示屬性通過Web方式錄入和顯示數(shù)據(jù)的時(shí)候,格式會(huì)相對(duì)固定,在系統(tǒng)數(shù)據(jù)建模的過程中將頁面的錄入/顯示進(jìn)行設(shè)計(jì),然后在頁面編程中就可以直接使用數(shù)據(jù)模型中的顯示屬性了。顯示屬性中錄入/顯示,實(shí)際上對(duì)應(yīng)的就是EOS提供一組基礎(chǔ)的標(biāo)簽庫,所以在設(shè)置顯示屬性的時(shí)候配置的所有內(nèi)容實(shí)際上就是對(duì)標(biāo)簽庫的參數(shù)進(jìn)行初始值設(shè)置。目前提供的錄入TAG控件有:date、time、text、lookup、switchCheckbox、t

10、extarea、select以及一組dict(業(yè)務(wù)字典標(biāo)簽),具體的TAG控件請(qǐng)參考EOS RichWeb開發(fā)指南。2.5 增刪改查一步完成在使用EOS的技術(shù)體系架構(gòu)編程時(shí),需要了解很多概念(如頁面流、邏輯流等)才能實(shí)現(xiàn)一組功能,如何更清楚的了解這些內(nèi)容呢?下面用一個(gè)向?qū)У姆绞絹硗瓿蓡伪砭S護(hù)功能。前面已經(jīng)完成了數(shù)據(jù)建模和顯示屬性的配置,我們下面正式進(jìn)入編程。步驟1: 右鍵點(diǎn)擊左側(cè)“資源管理器”視圖中,已節(jié)點(diǎn),選擇功能向?qū)?單表維護(hù)功能向?qū)Р藛危鐖D2-12所示。圖2-12 選擇單表維護(hù)功能向?qū)Р襟E2: 選擇數(shù)據(jù)實(shí)體:選擇前面創(chuàng)建的OOperator數(shù)據(jù)實(shí)體,如圖2-13所示。圖2-13 選擇數(shù)

11、據(jù)實(shí)體步驟3: 設(shè)置查詢條件:(1) 給“userName”屬性設(shè)置一個(gè)模糊查詢條件,看到“標(biāo)簽配置”了嗎?很熟悉吧。其實(shí)這些配置和顯示屬性一樣,實(shí)際上這些配置就是直接使用上節(jié)已經(jīng)配置好的顯示屬性。圖2-14 設(shè)置userName查詢條件(2) 我們?cè)賮碓O(shè)置性別的查詢條件吧,如圖2-15所示。圖2-15 設(shè)置gender查詢條件 小技巧:如何產(chǎn)生in的查詢提交?在數(shù)據(jù)庫開發(fā)中,某些字段采用編碼方式保存,編碼通常是一組固定的數(shù)據(jù),在查詢的時(shí)候可能希望產(chǎn)生“in (1, 2)”這樣的條件,但是在頁面中如何構(gòu)造呢?EOS提供了一個(gè)簡(jiǎn)單的方案:查詢條件操作符選擇“in”。使用業(yè)務(wù)字典的d:checkb

12、ox標(biāo)簽,將submitMethod屬性設(shè)置為:special方式。通過上面的條件就可以實(shí)現(xiàn)in的查詢操作了。(3) 設(shè)置完查詢條件后,如圖2-16所示。圖2-16 查詢條件設(shè)置完成步驟4: 點(diǎn)擊按鈕,進(jìn)入查詢結(jié)果集的設(shè)置,如圖2-17所示。圖2-17 設(shè)置查詢結(jié)果集步驟5: 點(diǎn)擊按鈕,進(jìn)入錄入“OOperator”表單的配置,如圖2-18所示。圖2-18 錄入“OOperator”表單的配置步驟6: 點(diǎn)擊按鈕,進(jìn)入選擇目錄,通過向?qū)纱a的最后一環(huán)了。給邏輯流、頁面流選擇一個(gè)文件生成目錄“”,web資源的保存目錄可以直接輸入“operator”(向?qū)蛇^程中會(huì)自動(dòng)創(chuàng)建不存在的目錄),如圖

13、2-19所示。圖2-19 選擇目錄最后點(diǎn)擊按鈕,生成了所有的程序代碼,產(chǎn)生的代碼文件如下:文件名類型目錄說明OOperatorQuery.jspJsp頁面頁面資源/operator查詢條件與查詢結(jié)果頁面OOperatorInput.jspJsp頁面頁面資源/operator數(shù)據(jù)錄入頁面OOperatorMaintain.flowx頁面流com.primeton.eos.OOperatorMaintain.flowx維護(hù)功能的頁面流,描述了查詢頁面和錄入頁面之間關(guān)系addOOx邏輯流com.primeton.eos.ooperatorbiz.addOO

14、x增加操作員業(yè)務(wù)邏輯deleteOOx邏輯流com.primeton.eos.ooperatorbiz.deleteOOx刪除操作有邏輯getOOx邏輯流com.primeton.eos.ooperatorbiz.getOOx根據(jù)編號(hào)獲得操作員邏輯queryOOx邏輯流com.primeton.eos.ooperatorbiz.queryOOx帶分頁的查詢邏輯updateOOx邏輯流com.primeton.eos.ooperator

15、biz.updateOOx更新操作員信息的邏輯文件對(duì)應(yīng)的資源樹如圖2-20所示。圖2-20 文件對(duì)應(yīng)的資源樹步驟7: 完成功能向?qū)Р僮骱?,?zhí)行剛才生成的代碼。(1) 啟動(dòng)server,如圖2-21所示。圖2-21 啟動(dòng)server(2) 啟動(dòng)成功后,通過下面的方式獲得訪問URL,如圖2-22所示。圖2-22 復(fù)制URL(3) 打開一個(gè)瀏覽器輸入復(fù)制的URL請(qǐng)求:如果你看到了下面的界面,那么恭喜你完成了上面的所有功能。圖2-23 運(yùn)行結(jié)果2.6 EOS數(shù)據(jù)庫維護(hù)功能開發(fā)訣竅 EOS快速開發(fā):表維護(hù)功能很簡(jiǎn)單,三步即可成完成:先建數(shù)據(jù)模型,關(guān)鍵設(shè)置顯示屬性,向?qū)Чδ軄眚?qū)動(dòng),代

16、碼自然就完成。第3章 實(shí)現(xiàn)關(guān)聯(lián)表操作在業(yè)務(wù)系統(tǒng)中,用戶通常需要在業(yè)務(wù)實(shí)體之間建立關(guān)聯(lián)關(guān)系,而且希望在頁面中能夠體現(xiàn)這些關(guān)聯(lián)關(guān)系。通常關(guān)聯(lián)關(guān)系體現(xiàn)在關(guān)聯(lián)實(shí)體的選擇錄入以及在頁面中可以顯示關(guān)聯(lián)實(shí)體的信息。因此本章會(huì)介紹如何實(shí)現(xiàn)關(guān)聯(lián)表在頁面中的錄入以及如何顯示關(guān)聯(lián)實(shí)體屬性。3.1 數(shù)據(jù)準(zhǔn)備我們給“第2章 快速開發(fā):?jiǎn)伪碓鰟h改查”案例中的“操作員”對(duì)象增加一個(gè)關(guān)聯(lián),在操作員表中增加“orgId”字段,然后將這個(gè)字段關(guān)聯(lián)到一個(gè)機(jī)構(gòu)表上。因此我們將建立如圖3-1所示的關(guān)系模型:圖3-1 關(guān)系模型對(duì)應(yīng)的數(shù)據(jù)庫表的腳本:請(qǐng)取zip包中的Org.sql。同樣可以參照“2.2 數(shù)據(jù)準(zhǔn)備”中的小技巧實(shí)現(xiàn)數(shù)據(jù)庫表創(chuàng)建

17、。3.2 創(chuàng)建數(shù)據(jù)模型步驟1: 我們重新打開“第2章 快速開發(fā):?jiǎn)伪碓鰟h改查”中創(chuàng)建好的數(shù)據(jù)集“data”。然后參照“3.2 創(chuàng)建數(shù)據(jù)模型”的操作,將“數(shù)據(jù)庫資源管理器”中的“O_ORG”表拖拽到數(shù)據(jù)集中,系統(tǒng)將自動(dòng)創(chuàng)建出下面的模型,如圖3-3所示。圖3-3 數(shù)據(jù)集步驟2: 然后我們?cè)赿ata數(shù)據(jù)集的空白處點(diǎn)擊右鍵,選擇重新加載菜單,我們就會(huì)創(chuàng)建出OOperator與OOrg實(shí)體之間的關(guān)聯(lián)關(guān)系。雙擊關(guān)聯(lián)關(guān)系連線就可以設(shè)置關(guān)聯(lián)關(guān)系屬性,如圖3-4所示。圖3-4 設(shè)置關(guān)聯(lián)屬性 小技巧:建立實(shí)體之間的關(guān)聯(lián)關(guān)系后可以配置“是否加載關(guān)聯(lián)實(shí)體”,如果配置了“true”,那么從數(shù)據(jù)庫中查找OOperator

18、實(shí)體的時(shí)候,會(huì)采用join方式自動(dòng)將OOrg實(shí)體查詢出來,這樣對(duì)于一些關(guān)聯(lián)關(guān)系的數(shù)據(jù)庫操作,只需要配置就可以解決開發(fā)的問題。 注意:l 因?yàn)镋OS的數(shù)據(jù)服務(wù)引擎會(huì)自動(dòng)產(chǎn)生關(guān)聯(lián)查詢操作,如果關(guān)聯(lián)關(guān)系的兩張表的數(shù)據(jù)量都超過百萬級(jí)以上的數(shù)據(jù),不建議采用自動(dòng)加載關(guān)聯(lián)實(shí)體的方式。如果“1”端的數(shù)據(jù)在十萬級(jí)以內(nèi)的數(shù)據(jù)量,這種操作對(duì)系統(tǒng)性能影響會(huì)非常小。l 目前join方式是依賴在Studio中配置n端的外鍵字段是否“必填”來控制的:外鍵字段必填產(chǎn)生inner內(nèi)連接查詢;外鍵字段不是必填產(chǎn)生outer外連接查詢。3.3 產(chǎn)生錄入關(guān)聯(lián)數(shù)據(jù)的界面我們?cè)阡浫氩僮鲉T所在的機(jī)構(gòu)時(shí),不可能讓用戶自己直接填寫機(jī)構(gòu)編號(hào),沒

19、有人能夠記住公司的機(jī)構(gòu)編號(hào)是多少,通常會(huì)提供一個(gè)錄入界面選擇一個(gè)機(jī)構(gòu)來錄入。那我們?cè)趺丛O(shè)計(jì)這個(gè)界面呢?答案只有一個(gè):還是向?qū)?。下面我們就介紹如何通過“Lookup對(duì)話框向?qū)А碑a(chǎn)生錄入機(jī)構(gòu)編號(hào)的操作。步驟1: 選擇功能向?qū)?Lookup對(duì)話框向?qū)в益I菜單,如圖3-6所示。圖3-6 選擇Lookup對(duì)話框向?qū)Р襟E2: 選擇數(shù)據(jù)實(shí)體,并且選擇在頁面中用該屬性的值來顯示,對(duì)于機(jī)構(gòu)來說當(dāng)然是“orgName”的值在頁面中顯示出來,如圖3-7所示。圖3-7 選擇數(shù)據(jù)實(shí)體步驟3: 設(shè)置選擇機(jī)構(gòu)的時(shí)候可以進(jìn)行過濾的查詢條件,在這里我們?cè)O(shè)置了orgName(機(jī)構(gòu)名稱)可以通過模糊查詢,也可以通過orgCode(

20、機(jī)構(gòu)代碼)直接查詢,如圖3-8所示。圖3-8 設(shè)置查詢條件步驟4: 然后配置一個(gè)數(shù)據(jù)顯示列表(viewList)方式來選擇一個(gè)機(jī)構(gòu)填入,在此處我們什么都不需要設(shè)置,系統(tǒng)已經(jīng)默認(rèn)填好了,如圖3-9所示。圖3-9 顯示列表設(shè)置步驟5: 進(jìn)入最后一環(huán),選擇生成的程序的所在目錄,如圖3-10所示。圖3-10 選擇目錄3.4 使用Lookup實(shí)現(xiàn)關(guān)聯(lián)表操作上面又生成了一些程序,還沒有看到對(duì)OOperator的功能的操作,我們?cè)趺慈ソY(jié)合Lookup來完成真正的業(yè)務(wù)操作呢?3.4.1 用Lookup來實(shí)現(xiàn)錄入界面輸入機(jī)構(gòu)步驟1: 我們打開“第2章 快速開發(fā):?jiǎn)伪碓鰟h改查”中產(chǎn)生的錄入OOperator的界面

21、程序“OOperatorInput.jsp”,找到錄入“備注”部分進(jìn)行代碼調(diào)整。原始代碼如下: 備注將上面的代碼修改為:所在機(jī)構(gòu)備注上面增加了一個(gè)很重要的Tag,就是:其中l(wèi)ookupUrl就是上一節(jié)中向?qū)Мa(chǎn)生的頁面流。步驟2: 我們通過,進(jìn)入查詢界面,選擇一個(gè)操作員,然后點(diǎn)擊按鈕,就出現(xiàn)了如圖3-12所示的界面。通過點(diǎn)擊“所在機(jī)構(gòu)”錄入框右邊的按鈕,就會(huì)彈出一個(gè)選擇機(jī)構(gòu)的窗口。圖3-12 運(yùn)行界面 EOS原理:關(guān)聯(lián)實(shí)體屬性通過上面的操作,我們就可以錄入操作員的所在機(jī)構(gòu)信息,而且是在沒有修改任何邏輯代碼的情況下,只調(diào)整了JSP頁面就達(dá)到了這個(gè)效果。我們看一下關(guān)聯(lián)實(shí)體屬性,打開data數(shù)據(jù)集,在

22、屬性列表中增加一個(gè)oOrg屬性:如果定義了一個(gè)變量ooperator(類型是OOperator實(shí)體),那么我們可以通過Xpath方式訪問當(dāng)前變量中的屬性。例如:oopeartor/userName訪問ooperator變量的實(shí)體中的“姓名”屬性值;ooperator/oOrg/orgId我們就可以訪問到變量ooperator的子實(shí)體屬性oOrg的orgId屬性值。 小技巧:Xpath訪問對(duì)象就像在java對(duì)象中使用“.”的方式訪問對(duì)象一樣。 注意:在EOS的實(shí)體定義中,如果使用了關(guān)聯(lián)實(shí)體方式,主實(shí)體的外鍵屬性是不存在,且不可訪問的。例如上面的例子:ooperator/orgId這個(gè)屬性是不存在

23、的,必須通過ooperator/oOrg/orgId才能訪問操作員所在的機(jī)構(gòu)的編號(hào)。這個(gè)方式和我們常用的數(shù)據(jù)庫的訪問方式完全不同,這是因?yàn)槲覀兘⒌臉I(yè)務(wù)域?qū)ο竽P停贠Operator這個(gè)對(duì)象中只有OOrg這個(gè)對(duì)象,orgId這個(gè)屬性必須依賴一個(gè)OOrg對(duì)象才能夠存在。 EOS原理:頁面流的參數(shù)提交通過上面的操作,我們?cè)陧撁嬷型ㄟ^Xpath方式就可以將數(shù)據(jù)提交到實(shí)體對(duì)象中,這是如何實(shí)現(xiàn)的呢?我們打開操作員維護(hù)的頁面流,打開“OOperatorInput.jsp”圖元,我們看到了在這里可以輸入“輸出參數(shù)”,在這里我們就可以定義“OOperatorInput.jsp”通過HTTP可以提交的參數(shù)。我

24、們看到上圖中有一個(gè)名稱為“ooperator”,類型是“OOperator”實(shí)體的參數(shù)。這樣通過HTTP提交的所有“oopeartor/”開頭的參數(shù)和OOperator實(shí)體中的定義是相匹配的。 注意:在頁面流中沒有定義的任何參數(shù)是不允許提交到頁面流引擎中的。頁面流中可以接受瀏覽器提交的參數(shù)可以在下面三個(gè)地方配置:1、頁面流定義中的變量定義(即頁面流數(shù)據(jù),可以參考EOS基礎(chǔ)開發(fā)指南中的“頁面流開發(fā)”部分),對(duì)當(dāng)前頁面流任何請(qǐng)求都有效。2、頁面視圖的“輸出參數(shù)”,對(duì)當(dāng)前頁面視圖的所有action操作有效。3、頁面視圖連出的“action”連線上,只對(duì)當(dāng)前action有效。3.4.2 在結(jié)果集中顯示

25、關(guān)聯(lián)實(shí)體的屬性我們前面已經(jīng)實(shí)現(xiàn)了關(guān)聯(lián)實(shí)體的錄入,到底數(shù)據(jù)是否提交到系統(tǒng)中了呢?我們需要在頁面中顯示關(guān)聯(lián)實(shí)體的屬性信息。打開“OOperatorQuery.jsp”文件,我們對(duì)結(jié)果列表中增加一列顯示機(jī)構(gòu)名稱,下面是對(duì)文件的修改。(1) 我們先增加一個(gè)表頭,原內(nèi)容如下:姓名修改后的內(nèi)容如下:姓名機(jī)構(gòu)(2) 然后在迭代循環(huán)中輸出機(jī)構(gòu)名稱,原內(nèi)容如下:修改后的內(nèi)容如下:現(xiàn)在我們?cè)倏匆幌虏樵兘Y(jié)果集頁面,就能看到前面錄入的機(jī)構(gòu)名了。圖3-13 查詢結(jié)果集頁面為什么不修改查詢就能達(dá)到這個(gè)效果呢?因?yàn)槲覀冊(cè)凇?.2 創(chuàng)建數(shù)據(jù)模型”中配置了“加載關(guān)聯(lián)實(shí)體”這個(gè)參數(shù),這樣我們不需要修改查詢就可以顯示關(guān)聯(lián)實(shí)體的屬性

26、了。第4章 實(shí)現(xiàn)從表操作前面完成一個(gè)簡(jiǎn)單的關(guān)聯(lián)表的操作,這個(gè)關(guān)聯(lián)操作實(shí)現(xiàn)了業(yè)務(wù)對(duì)象從屬于其他對(duì)象的處理,但是業(yè)務(wù)中還有一種關(guān)聯(lián)操作,就是業(yè)務(wù)實(shí)體包含了子業(yè)務(wù)實(shí)體,例如:學(xué)校有班級(jí)。我們把這種關(guān)系稱為聚合關(guān)系,更加通俗一些講就是主從表關(guān)系,因此這個(gè)章節(jié)我們專門介紹如何用構(gòu)件完成主從表操作。4.1 頁面效果因?yàn)橐獙?shí)現(xiàn)從表的數(shù)據(jù)錄入,通常我們?cè)阡浫胫鞅淼谋韱瓮瑫r(shí),可以在一個(gè)表格中直接對(duì)從表進(jìn)行數(shù)據(jù)操作。具體效果如下:圖4-1 頁面效果圖4.2 數(shù)據(jù)準(zhǔn)備在前面例子中我們已經(jīng)有了OOperator操作員實(shí)體對(duì)象,我們給OOperator創(chuàng)建一個(gè)子實(shí)體:OContact(聯(lián)系人)。創(chuàng)建聯(lián)系人的腳本:請(qǐng)取z

27、ip包中的Contact.sql。4.3 創(chuàng)建數(shù)據(jù)模型我們重新打開前面創(chuàng)建好的數(shù)據(jù)集“data”。然后參照上一章的創(chuàng)建數(shù)據(jù)模型操作,將“數(shù)據(jù)庫資源管理器”中的“O_CONTACTS”表拖拽到數(shù)據(jù)集中,系統(tǒng)將自動(dòng)的創(chuàng)建出下面的模型:圖4-2 數(shù)據(jù)集我們看到上面的模型和“OOperator n-1 OOrg”一樣,聯(lián)系人中有一個(gè)操作員的實(shí)體,但是我們會(huì)發(fā)現(xiàn)業(yè)務(wù)上一個(gè)聯(lián)系人從屬于一個(gè)操作員,聯(lián)系人是需要依托一個(gè)操作員才能存在的,因此我們需要將這個(gè)“OContacts n-1 OOperator”的關(guān)聯(lián)模型改成“OOperator 1-n OContacts”的聚合模型。圖4-3 數(shù)據(jù)集然后我們就會(huì)發(fā)

28、現(xiàn)在OOperator實(shí)體中有一個(gè)oContacts對(duì)象,而且這個(gè)對(duì)象是數(shù)組類型的。圖4-4 數(shù)據(jù)集 EOS原理:1-n關(guān)聯(lián)關(guān)系通過上面的操作,我們建立了一個(gè)業(yè)務(wù)建模,操作員有多個(gè)聯(lián)系人屬性,而在數(shù)據(jù)庫的表達(dá)方式中只能夠是聯(lián)系人通過外鍵關(guān)聯(lián)操作員。因此EOS提供的數(shù)據(jù)定義并不是數(shù)據(jù)庫ER模型的設(shè)計(jì)器,而是建立業(yè)務(wù)模型的設(shè)計(jì)器。 注意:在定義1-n的關(guān)聯(lián)關(guān)系時(shí),關(guān)聯(lián)關(guān)系中的“是否加載關(guān)聯(lián)實(shí)體”的屬性需要設(shè)置為“false”,因?yàn)?-n關(guān)系中n端的數(shù)據(jù)量是未知的,如果選擇了true,每次做1端數(shù)據(jù)查詢的時(shí)候都會(huì)自動(dòng)加載n端的數(shù)據(jù)使得查詢性能緩慢。4.4 使用Datacell實(shí)現(xiàn)從表數(shù)據(jù)錄入前面已經(jīng)

29、建立了1-n的關(guān)聯(lián)關(guān)系,如何在界面中體現(xiàn)呢?通常對(duì)于主從表來說,我們會(huì)通過一個(gè)表單錄入主表記錄,用一個(gè)表格錄入從表的信息,因此我們將采用EOS Richweb中的一個(gè)重要控件Datacell來完成主從表的錄入。4.4.1 修改JSP錄入界面我們先打開前面已經(jīng)提到的OOperatorInput.jsp文件,拖拽一個(gè)EOS的Ajax控件Datacell來實(shí)現(xiàn)OContacts(聯(lián)系人)的錄入。步驟1: 打開OOperatorInput.jsp文件找到“”代碼位置,然后從選用板中拖一個(gè)Datacell控件到這行代碼開頭。圖4-6 拖拽DataCell控件步驟2: 參照?qǐng)D4-7設(shè)置Datcell控件的

30、屬性。Datacell的屬性設(shè)置:在xpath中都填入“ooperator/oContacts”,并且在“列設(shè)置”中刪除contactId和operatorId兩個(gè)字段。工具條位置“top”,包含工具可以通過“瀏覽”按鈕選擇,這里只選擇“編輯”中的“添加”和“刪除”按鈕。圖4-7 設(shè)置Datcell控件的屬性步驟3: 點(diǎn)擊按鈕保存Datacell的配置,然后再修改OOperatorInput.jsp文件。在“”前面增加一段js代碼,代碼如下:function submitDatacell(frm) if (checkForm(frm) var dcell = $id(cell1);dcell.

31、submitAllByHidden();return true;return false;步驟4: 然后將當(dāng)前表單的提交函數(shù)改成上面的submitDatacell方法。改成: 小技巧:Datacell提交數(shù)據(jù)的方式Datacell是一個(gè)Ajax控件,它可以直接通過Ajax方式和服務(wù)端進(jìn)行調(diào)用,但是它也可以像HTML中的form的方式提交數(shù)據(jù)。例如上面的例子:submitAllByHidden()這個(gè)函數(shù)就可以將當(dāng)前Datacell中的數(shù)據(jù)以一個(gè)對(duì)象數(shù)組方式提交到服務(wù)端。還有其他更有意思的功能,請(qǐng)參考EOS RichWeb開發(fā)指南慢慢研究吧。4.4.2 修改邏輯程序做了這么多的開發(fā),還沒有涉及到

32、如何修改業(yè)務(wù)邏輯程序,我們來看看為了實(shí)現(xiàn)主從表的開發(fā),我們需要什么樣的邏輯,而構(gòu)件化的代碼開發(fā)是怎樣的呢?步驟1: 修改“addOOperator”,增加操作員的邏輯:(1) 我們打開“”構(gòu)件包的“構(gòu)件”的“”下的“ooperatorbiz”的“addOOx”,如圖4-9所示。圖4-9 打開邏輯流addOOperator(2) 我們打開“構(gòu)件庫”,通過工具條上的左邊的按鈕:,打開“自定義庫”,拖拽一個(gè)“insertEntityCascade-級(jí)聯(lián)方式插入一條記錄”邏輯到編輯器中。然后將原來連接到“insertEntity”的連線連到“insertEntityCascade

33、”操作上,保存,得到如圖4-10所示的結(jié)果。圖4-10 修改邏輯流 小技巧:巧用“自定義”構(gòu)件庫EOS應(yīng)用編程模型中強(qiáng)調(diào)的是通過“流程+數(shù)據(jù)+人機(jī)交互”來實(shí)現(xiàn)應(yīng)用。通過流程方式繪制邏輯的時(shí)候,需要拖入更小粒度的運(yùn)算操作,通常運(yùn)算操作都是在“構(gòu)件庫”的“項(xiàng)目引用庫”中。在實(shí)際的編程中需要定義邏輯的參數(shù)和局部變量,為了簡(jiǎn)化開發(fā),在“自定義”庫中我們將SDO對(duì)應(yīng)的基礎(chǔ)操作,或者是java的(String、BigDecimal等)對(duì)象的jdk庫中的基本操作直接顯示出來。這兒絕大多數(shù)的開發(fā)只需要從“自定義”庫中找運(yùn)算操作就可以。小提示:打開deleteOOperator邏輯流,請(qǐng)將那個(gè)數(shù)組變量拖到編輯器

34、中看看有什么出現(xiàn)了。步驟2: 對(duì)于其他的邏輯流,我們參照“addOOperator”的方法來修改。(1) “deleteOOperator”刪除操作員操作我們不用修改了,它的操作已經(jīng)用了cascade模式了。(2) 對(duì)于“updateOOperator”,我們將“updateEntity”運(yùn)算操作改成“updateEntityCascade”。(3) 對(duì)于“getOOperator”,我們將增加一個(gè)“expandRelation”運(yùn)算邏輯(這個(gè)方法在自定義庫中):圖4-11 新增“expandRelation”運(yùn)算邏輯設(shè)置這個(gè)參數(shù)的方法:將參數(shù)“property”的值設(shè)置為“oContacts

35、”,這樣就可以將ooperator對(duì)象的oContacts從數(shù)據(jù)庫中加載。圖4-12 設(shè)置運(yùn)算邏輯的參數(shù) 小技巧:cascade級(jí)聯(lián)操作應(yīng)用中通常需要更新主從表的數(shù)據(jù),因此EOS的基礎(chǔ)構(gòu)件庫中提供了一組對(duì)單實(shí)體進(jìn)行級(jí)聯(lián)操作的方法:insertEntityCascade、updateEntityCascade、deleteEntityCascade。這組方法能夠?qū)崿F(xiàn)對(duì)1-n的關(guān)聯(lián)關(guān)系的基本數(shù)據(jù)庫操作(只能處理一級(jí)級(jí)聯(lián)),特別是update功能能夠自動(dòng)刪除不在Datacell中提交的數(shù)據(jù)。 注意:因?yàn)榧?jí)聯(lián)操作會(huì)對(duì)從表進(jìn)行復(fù)雜數(shù)據(jù)處理,如果在業(yè)務(wù)上1-n的n端數(shù)據(jù)非常大的情況下,不建議使用級(jí)聯(lián)操作。

36、而且如果n端數(shù)據(jù)量很大的情況下也不建議建立1-n的聚合關(guān)系。步驟3: 我們通過進(jìn)入查詢界面,選擇一個(gè)操作員,然后點(diǎn)擊按鈕,就出現(xiàn)如圖4-13所示的界面,我們可以在下面的表格中直接錄入“OContacts”聯(lián)系人的信息了。圖4-13 運(yùn)行界面4.5 EOS應(yīng)用邏輯開發(fā)訣竅 提示:EOS應(yīng)用邏輯是一個(gè)標(biāo)準(zhǔn)MVC:邏輯流實(shí)現(xiàn)了業(yè)務(wù)邏輯(Model),頁面流描述了頁面之間流轉(zhuǎn)關(guān)系(Control),JSP是界面的表現(xiàn)(View)。第5章 還能再快嗎?前面介紹了基于數(shù)據(jù)庫基本模型的功能實(shí)現(xiàn),我們要完成一組基本場(chǎng)景還是需要做很多操作的,而且每個(gè)操作還是比較麻煩的,特別是修改JSP頁面的代碼,我們還能更快的完成上面的功能嗎?答案有一個(gè):可以利用向?qū)У墓δ軄韼椭阃瓿纱a構(gòu)造過程。5.1 模型設(shè)置在“第2章 快速開發(fā):?jiǎn)伪碓鰟h改查”中我們已經(jīng)設(shè)置實(shí)體屬性的顯示屬性了,而且我們通過顯示屬性能夠幫助我們完成基本代碼的構(gòu)造,那么對(duì)于關(guān)聯(lián)屬性來說我們?cè)趺丛O(shè)置呢?我們雙擊“oOrg”這個(gè)屬性,發(fā)現(xiàn)和其他字段顯示屬性不一樣,我們可以設(shè)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論