版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、輕輕松松使用“構(gòu)件化”技術(shù)構(gòu)建Web應(yīng)用Primeton EOS 6.0普元信息技術(shù)有限公司Primeton Technologies, Ltd.歡迎使用本手冊詳細介紹普元EOS產(chǎn)品各個部分對安裝環(huán)境的要求和限制;詳細介紹產(chǎn)品在不同操作系統(tǒng)環(huán)境中針對不同應(yīng)用服務(wù)器和數(shù)據(jù)庫安裝的操作步驟。圖標使用約定本書使用以下圖標,代表特定含義: EOS基本概念 開發(fā)心得與小技巧 說明與注意事項內(nèi)容使用約定本書對文本內(nèi)容的使用有如下約定:普元EOS 或Primeton EOS:簡稱EOS本出版物包含Primeton的專利信息,它在許可協(xié)議下提供,并受版權(quán)法保護,本出版物包含的信息不包括任何產(chǎn)品保證。通過您當?shù)?/p>
2、的Primeton代表或分部可訂購出版物,或致購出版物當您發(fā)送信息給Primeton后,即授予Primeton非專有權(quán),Primeton對于您所提供的任何信息,有權(quán)利以任何它認為適當?shù)姆绞绞褂没蛏l(fā),而不必對您負任何責任Copyright (c) 2008 Primeton Technologies, Ltd. All rights reserved.目 錄第1章 前言1-11.1 準備工作1-1第2章 快速開發(fā):單表增刪改查2-12.1 頁面效果2-12.2 數(shù)據(jù)準備2-22.3 創(chuàng)建數(shù)據(jù)模型2-32.4 設(shè)置顯示屬性2-52.5 增刪改查一步完成2-92.6 E
3、OS數(shù)據(jù)庫維護功能開發(fā)訣竅2-19第3章 實現(xiàn)關(guān)聯(lián)表操作3-13.1 數(shù)據(jù)準備3-13.2 創(chuàng)建數(shù)據(jù)模型3-23.3 產(chǎn)生錄入關(guān)聯(lián)數(shù)據(jù)的界面3-43.4 使用Lookup實現(xiàn)關(guān)聯(lián)表操作3-7 用Lookup來實現(xiàn)錄入界面輸入機構(gòu)3-7 在結(jié)果集中顯示關(guān)聯(lián)實體的屬性3-12第4章 實現(xiàn)從表操作4-14.1 頁面效果4-14.2 數(shù)據(jù)準備4-14.3 創(chuàng)建數(shù)據(jù)模型4-24.4 使用Datacell實現(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)這個產(chǎn)品包含很多的概念和全新的編程思想,作為一個新手能否快速學習EOS?本文將把EOS最基本的關(guān)鍵動作展示出來,學習基礎(chǔ)動作可以為以后的熟練打下了基礎(chǔ)。本教程并不涉及EOS中關(guān)于安裝、SOA基本概念、部署與管理。主要是通過向?qū)Х绞介_發(fā)一個簡單數(shù)據(jù)庫操作的Web功能來體驗EOS編程思想,中間穿插介紹了一些EOS的基本概念與開發(fā)技巧。這篇文檔的讀者群設(shè)定為第一次接觸EOS的開發(fā)者,或者是EOS產(chǎn)品體驗人員,在瀏覽這篇文檔后就能夠掌握EOS的基本開發(fā)。就像本文的題目一樣能夠真正輕輕松松構(gòu)建應(yīng)用。1.1 準備工作下載EOS 6.0開發(fā)版安裝包,詳細的安裝說明請參見EOS產(chǎn)品安裝指南。第2章
5、快速開發(fā):單表增刪改查2.1 頁面效果在Web頁面上展現(xiàn)數(shù)據(jù)庫中的一張表,實現(xiàn)了對單表的數(shù)據(jù)庫查詢、增加與刪除功能操作,并且實現(xiàn)了分頁查詢,效果如圖2-1所示。圖2-1 查詢與結(jié)果效果圖圖2-2 錄入與修改表單2.2 數(shù)據(jù)準備為了實現(xiàn)一個單表的增刪改查功能,需要先準備一張數(shù)據(jù)庫表。在安裝過程中設(shè)置一個可用的數(shù)據(jù)庫。 說明:l 由于EOS平臺主要針對企業(yè)系統(tǒng),因此在安裝過程前需要準備好一個數(shù)據(jù)庫,并且在安裝過程中初始化數(shù)據(jù)庫。l 本文后續(xù)所有的數(shù)據(jù)庫腳本都是基于Oracle的,建議準備一個Oracle數(shù)據(jù)庫??梢酝ㄟ^數(shù)據(jù)庫的客戶端完成數(shù)據(jù)庫表的創(chuàng)建,以及數(shù)據(jù)庫中的初始數(shù)據(jù)的準備。數(shù)據(jù)庫腳本(請取
6、zip包中的operator.sql): 小技巧:EOS Studio中已經(jīng)內(nèi)置了一個SQL編輯器,并且可以使用Studio通過安裝包已經(jīng)準備好的數(shù)據(jù)庫連接直接執(zhí)行上面的數(shù)據(jù)庫腳本,創(chuàng)建好數(shù)據(jù)庫表??梢詤⒖既鐖D2-3所示的界面進行如下操作:(1) 可以在項目中創(chuàng)建一個文件夾,然后創(chuàng)建對應(yīng)數(shù)據(jù)庫腳本文件。(2) 選擇連接數(shù)據(jù)庫。(3) 在sql文件編輯器中點擊右鍵,選擇運行SQL菜單即可運行sql文件。圖2-3 運行sql腳本文件 注意:執(zhí)行sql腳本文件后,需要重新刷新“數(shù)據(jù)庫資源管理”視圖中的“表”,才能看到新創(chuàng)建的表。2.3 創(chuàng)建數(shù)據(jù)模型步驟1: 右鍵點擊“資源管理器”視圖中,用戶創(chuàng)建的構(gòu)
7、件包下的“數(shù)據(jù)/數(shù)據(jù)模型”節(jié)點,選擇創(chuàng)建/數(shù)據(jù)集菜單,如圖2-5所示,創(chuàng)建一個名為“data”的數(shù)據(jù)集。圖2-5 創(chuàng)建數(shù)據(jù)集步驟2: 在(data)數(shù)據(jù)集中直接將左下角的“數(shù)據(jù)庫資源管理”視圖中的“O_OPERATOR”表拖拽到(data)數(shù)據(jù)集編輯器的空白處。Studio將創(chuàng)建出一個“數(shù)據(jù)實體”,名稱(OOperator),如圖2-6所示。圖2-6 創(chuàng)建數(shù)據(jù)實體 EOS原理:數(shù)據(jù)實體在應(yīng)用編程中,需要建立業(yè)務(wù)域?qū)ο竽P停赵峁┑臄?shù)據(jù)建模工具可以完成企業(yè)的元數(shù)據(jù)定義。在管理應(yīng)用系統(tǒng)中,通常建立的數(shù)據(jù)定義都是通過DB數(shù)據(jù)庫進行持久化的。通過數(shù)據(jù)庫反轉(zhuǎn)回來的數(shù)據(jù)定義就是一個可以持久化的數(shù)據(jù)實體。
8、在上面例子中創(chuàng)建的OOperator這個實體,實際上建立一個OOperator對象和數(shù)據(jù)庫表O_OPERATOR直接MAP映射關(guān)系,可以調(diào)用數(shù)據(jù)服務(wù)API實現(xiàn)數(shù)據(jù)庫持久化操作。2.4 設(shè)置顯示屬性步驟1: 打開上面創(chuàng)建的數(shù)據(jù)實體,修改所有屬性的顯示名稱,如圖2-8所示。圖2-8 修改所有屬性的顯示名稱步驟2: 設(shè)置每個字段在JSP頁面中的表現(xiàn)形式,下面介紹幾種基本的:(1) 字符串錄入,數(shù)據(jù)校驗:雙擊“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è)置一個業(yè)務(wù)字典類型,如圖2-10所示。圖2-10 設(shè)置gender的業(yè)務(wù)字典類型 EOS原理:顯示屬性通過Web方式錄入和顯示數(shù)據(jù)的時候,格式會相對固定,在系統(tǒng)數(shù)據(jù)建模的過程中將頁面的錄入/顯示進行設(shè)計,然后在頁面編程中就可以直接使用數(shù)據(jù)模型中的顯示屬性了。顯示屬性中錄入/顯示,實際上對應(yīng)的就是EOS提供一組基礎(chǔ)的標簽庫,所以在設(shè)置顯示屬性的時候配置的所有內(nèi)容實際上就是對標簽庫的參數(shù)進行初始值設(shè)置。目前提供的錄入TAG控件有:date、time、text、lookup、switchCheckbox、t
10、extarea、select以及一組dict(業(yè)務(wù)字典標簽),具體的TAG控件請參考EOS RichWeb開發(fā)指南。2.5 增刪改查一步完成在使用EOS的技術(shù)體系架構(gòu)編程時,需要了解很多概念(如頁面流、邏輯流等)才能實現(xiàn)一組功能,如何更清楚的了解這些內(nèi)容呢?下面用一個向?qū)У姆绞絹硗瓿蓡伪砭S護功能。前面已經(jīng)完成了數(shù)據(jù)建模和顯示屬性的配置,我們下面正式進入編程。步驟1: 右鍵點擊左側(cè)“資源管理器”視圖中,已節(jié)點,選擇功能向?qū)?單表維護功能向?qū)Р藛危鐖D2-12所示。圖2-12 選擇單表維護功能向?qū)Р襟E2: 選擇數(shù)據(jù)實體:選擇前面創(chuàng)建的OOperator數(shù)據(jù)實體,如圖2-13所示。圖2-13 選擇數(shù)
11、據(jù)實體步驟3: 設(shè)置查詢條件:(1) 給“userName”屬性設(shè)置一個模糊查詢條件,看到“標簽配置”了嗎?很熟悉吧。其實這些配置和顯示屬性一樣,實際上這些配置就是直接使用上節(jié)已經(jīng)配置好的顯示屬性。圖2-14 設(shè)置userName查詢條件(2) 我們再來設(shè)置性別的查詢條件吧,如圖2-15所示。圖2-15 設(shè)置gender查詢條件 小技巧:如何產(chǎn)生in的查詢提交?在數(shù)據(jù)庫開發(fā)中,某些字段采用編碼方式保存,編碼通常是一組固定的數(shù)據(jù),在查詢的時候可能希望產(chǎn)生“in (1, 2)”這樣的條件,但是在頁面中如何構(gòu)造呢?EOS提供了一個簡單的方案:查詢條件操作符選擇“in”。使用業(yè)務(wù)字典的d:checkb
12、ox標簽,將submitMethod屬性設(shè)置為:special方式。通過上面的條件就可以實現(xiàn)in的查詢操作了。(3) 設(shè)置完查詢條件后,如圖2-16所示。圖2-16 查詢條件設(shè)置完成步驟4: 點擊按鈕,進入查詢結(jié)果集的設(shè)置,如圖2-17所示。圖2-17 設(shè)置查詢結(jié)果集步驟5: 點擊按鈕,進入錄入“OOperator”表單的配置,如圖2-18所示。圖2-18 錄入“OOperator”表單的配置步驟6: 點擊按鈕,進入選擇目錄,通過向?qū)纱a的最后一環(huán)了。給邏輯流、頁面流選擇一個文件生成目錄“”,web資源的保存目錄可以直接輸入“operator”(向?qū)蛇^程中會自動創(chuàng)建不存在的目錄),如圖
13、2-19所示。圖2-19 選擇目錄最后點擊按鈕,生成了所有的程序代碼,產(chǎn)生的代碼文件如下:文件名類型目錄說明OOperatorQuery.jspJsp頁面頁面資源/operator查詢條件與查詢結(jié)果頁面OOperatorInput.jspJsp頁面頁面資源/operator數(shù)據(jù)錄入頁面OOperatorMaintain.flowx頁面流com.primeton.eos.OOperatorMaintain.flowx維護功能的頁面流,描述了查詢頁面和錄入頁面之間關(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ù)編號獲得操作員邏輯queryOOx邏輯流com.primeton.eos.ooperatorbiz.queryOOx帶分頁的查詢邏輯updateOOx邏輯流com.primeton.eos.ooperator
15、biz.updateOOx更新操作員信息的邏輯文件對應(yīng)的資源樹如圖2-20所示。圖2-20 文件對應(yīng)的資源樹步驟7: 完成功能向?qū)Р僮骱螅瑘?zhí)行剛才生成的代碼。(1) 啟動server,如圖2-21所示。圖2-21 啟動server(2) 啟動成功后,通過下面的方式獲得訪問URL,如圖2-22所示。圖2-22 復(fù)制URL(3) 打開一個瀏覽器輸入復(fù)制的URL請求:如果你看到了下面的界面,那么恭喜你完成了上面的所有功能。圖2-23 運行結(jié)果2.6 EOS數(shù)據(jù)庫維護功能開發(fā)訣竅 EOS快速開發(fā):表維護功能很簡單,三步即可成完成:先建數(shù)據(jù)模型,關(guān)鍵設(shè)置顯示屬性,向?qū)Чδ軄眚?qū)動,代
16、碼自然就完成。第3章 實現(xiàn)關(guān)聯(lián)表操作在業(yè)務(wù)系統(tǒng)中,用戶通常需要在業(yè)務(wù)實體之間建立關(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)實體的選擇錄入以及在頁面中可以顯示關(guān)聯(lián)實體的信息。因此本章會介紹如何實現(xiàn)關(guān)聯(lián)表在頁面中的錄入以及如何顯示關(guān)聯(lián)實體屬性。3.1 數(shù)據(jù)準備我們給“第2章 快速開發(fā):單表增刪改查”案例中的“操作員”對象增加一個關(guān)聯(lián),在操作員表中增加“orgId”字段,然后將這個字段關(guān)聯(lián)到一個機構(gòu)表上。因此我們將建立如圖3-1所示的關(guān)系模型:圖3-1 關(guān)系模型對應(yīng)的數(shù)據(jù)庫表的腳本:請取zip包中的Org.sql。同樣可以參照“2.2 數(shù)據(jù)準備”中的小技巧實現(xiàn)數(shù)據(jù)庫表創(chuàng)建
17、。3.2 創(chuàng)建數(shù)據(jù)模型步驟1: 我們重新打開“第2章 快速開發(fā):單表增刪改查”中創(chuàng)建好的數(shù)據(jù)集“data”。然后參照“3.2 創(chuàng)建數(shù)據(jù)模型”的操作,將“數(shù)據(jù)庫資源管理器”中的“O_ORG”表拖拽到數(shù)據(jù)集中,系統(tǒng)將自動創(chuàng)建出下面的模型,如圖3-3所示。圖3-3 數(shù)據(jù)集步驟2: 然后我們在data數(shù)據(jù)集的空白處點擊右鍵,選擇重新加載菜單,我們就會創(chuàng)建出OOperator與OOrg實體之間的關(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)屬性 小技巧:建立實體之間的關(guān)聯(lián)關(guān)系后可以配置“是否加載關(guān)聯(lián)實體”,如果配置了“true”,那么從數(shù)據(jù)庫中查找OOperator
18、實體的時候,會采用join方式自動將OOrg實體查詢出來,這樣對于一些關(guān)聯(lián)關(guān)系的數(shù)據(jù)庫操作,只需要配置就可以解決開發(fā)的問題。 注意:l 因為EOS的數(shù)據(jù)服務(wù)引擎會自動產(chǎn)生關(guān)聯(lián)查詢操作,如果關(guān)聯(lián)關(guān)系的兩張表的數(shù)據(jù)量都超過百萬級以上的數(shù)據(jù),不建議采用自動加載關(guān)聯(lián)實體的方式。如果“1”端的數(shù)據(jù)在十萬級以內(nèi)的數(shù)據(jù)量,這種操作對系統(tǒng)性能影響會非常小。l 目前join方式是依賴在Studio中配置n端的外鍵字段是否“必填”來控制的:外鍵字段必填產(chǎn)生inner內(nèi)連接查詢;外鍵字段不是必填產(chǎn)生outer外連接查詢。3.3 產(chǎn)生錄入關(guān)聯(lián)數(shù)據(jù)的界面我們在錄入操作員所在的機構(gòu)時,不可能讓用戶自己直接填寫機構(gòu)編號,沒
19、有人能夠記住公司的機構(gòu)編號是多少,通常會提供一個錄入界面選擇一個機構(gòu)來錄入。那我們怎么設(shè)計這個界面呢?答案只有一個:還是向?qū)?。下面我們就介紹如何通過“Lookup對話框向?qū)А碑a(chǎn)生錄入機構(gòu)編號的操作。步驟1: 選擇功能向?qū)?Lookup對話框向?qū)в益I菜單,如圖3-6所示。圖3-6 選擇Lookup對話框向?qū)Р襟E2: 選擇數(shù)據(jù)實體,并且選擇在頁面中用該屬性的值來顯示,對于機構(gòu)來說當然是“orgName”的值在頁面中顯示出來,如圖3-7所示。圖3-7 選擇數(shù)據(jù)實體步驟3: 設(shè)置選擇機構(gòu)的時候可以進行過濾的查詢條件,在這里我們設(shè)置了orgName(機構(gòu)名稱)可以通過模糊查詢,也可以通過orgCode(
20、機構(gòu)代碼)直接查詢,如圖3-8所示。圖3-8 設(shè)置查詢條件步驟4: 然后配置一個數(shù)據(jù)顯示列表(viewList)方式來選擇一個機構(gòu)填入,在此處我們什么都不需要設(shè)置,系統(tǒng)已經(jīng)默認填好了,如圖3-9所示。圖3-9 顯示列表設(shè)置步驟5: 進入最后一環(huán),選擇生成的程序的所在目錄,如圖3-10所示。圖3-10 選擇目錄3.4 使用Lookup實現(xiàn)關(guān)聯(lián)表操作上面又生成了一些程序,還沒有看到對OOperator的功能的操作,我們怎么去結(jié)合Lookup來完成真正的業(yè)務(wù)操作呢?3.4.1 用Lookup來實現(xiàn)錄入界面輸入機構(gòu)步驟1: 我們打開“第2章 快速開發(fā):單表增刪改查”中產(chǎn)生的錄入OOperator的界面
21、程序“OOperatorInput.jsp”,找到錄入“備注”部分進行代碼調(diào)整。原始代碼如下: 備注將上面的代碼修改為:所在機構(gòu)備注上面增加了一個很重要的Tag,就是:其中l(wèi)ookupUrl就是上一節(jié)中向?qū)Мa(chǎn)生的頁面流。步驟2: 我們通過,進入查詢界面,選擇一個操作員,然后點擊按鈕,就出現(xiàn)了如圖3-12所示的界面。通過點擊“所在機構(gòu)”錄入框右邊的按鈕,就會彈出一個選擇機構(gòu)的窗口。圖3-12 運行界面 EOS原理:關(guān)聯(lián)實體屬性通過上面的操作,我們就可以錄入操作員的所在機構(gòu)信息,而且是在沒有修改任何邏輯代碼的情況下,只調(diào)整了JSP頁面就達到了這個效果。我們看一下關(guān)聯(lián)實體屬性,打開data數(shù)據(jù)集,在
22、屬性列表中增加一個oOrg屬性:如果定義了一個變量ooperator(類型是OOperator實體),那么我們可以通過Xpath方式訪問當前變量中的屬性。例如:oopeartor/userName訪問ooperator變量的實體中的“姓名”屬性值;ooperator/oOrg/orgId我們就可以訪問到變量ooperator的子實體屬性oOrg的orgId屬性值。 小技巧:Xpath訪問對象就像在java對象中使用“.”的方式訪問對象一樣。 注意:在EOS的實體定義中,如果使用了關(guān)聯(lián)實體方式,主實體的外鍵屬性是不存在,且不可訪問的。例如上面的例子:ooperator/orgId這個屬性是不存在
23、的,必須通過ooperator/oOrg/orgId才能訪問操作員所在的機構(gòu)的編號。這個方式和我們常用的數(shù)據(jù)庫的訪問方式完全不同,這是因為我們建立的業(yè)務(wù)域?qū)ο竽P停贠Operator這個對象中只有OOrg這個對象,orgId這個屬性必須依賴一個OOrg對象才能夠存在。 EOS原理:頁面流的參數(shù)提交通過上面的操作,我們在頁面中通過Xpath方式就可以將數(shù)據(jù)提交到實體對象中,這是如何實現(xiàn)的呢?我們打開操作員維護的頁面流,打開“OOperatorInput.jsp”圖元,我們看到了在這里可以輸入“輸出參數(shù)”,在這里我們就可以定義“OOperatorInput.jsp”通過HTTP可以提交的參數(shù)。我
24、們看到上圖中有一個名稱為“ooperator”,類型是“OOperator”實體的參數(shù)。這樣通過HTTP提交的所有“oopeartor/”開頭的參數(shù)和OOperator實體中的定義是相匹配的。 注意:在頁面流中沒有定義的任何參數(shù)是不允許提交到頁面流引擎中的。頁面流中可以接受瀏覽器提交的參數(shù)可以在下面三個地方配置:1、頁面流定義中的變量定義(即頁面流數(shù)據(jù),可以參考EOS基礎(chǔ)開發(fā)指南中的“頁面流開發(fā)”部分),對當前頁面流任何請求都有效。2、頁面視圖的“輸出參數(shù)”,對當前頁面視圖的所有action操作有效。3、頁面視圖連出的“action”連線上,只對當前action有效。3.4.2 在結(jié)果集中顯示
25、關(guān)聯(lián)實體的屬性我們前面已經(jīng)實現(xiàn)了關(guān)聯(lián)實體的錄入,到底數(shù)據(jù)是否提交到系統(tǒng)中了呢?我們需要在頁面中顯示關(guān)聯(lián)實體的屬性信息。打開“OOperatorQuery.jsp”文件,我們對結(jié)果列表中增加一列顯示機構(gòu)名稱,下面是對文件的修改。(1) 我們先增加一個表頭,原內(nèi)容如下:姓名修改后的內(nèi)容如下:姓名機構(gòu)(2) 然后在迭代循環(huán)中輸出機構(gòu)名稱,原內(nèi)容如下:修改后的內(nèi)容如下:現(xiàn)在我們再看一下查詢結(jié)果集頁面,就能看到前面錄入的機構(gòu)名了。圖3-13 查詢結(jié)果集頁面為什么不修改查詢就能達到這個效果呢?因為我們在“3.2 創(chuàng)建數(shù)據(jù)模型”中配置了“加載關(guān)聯(lián)實體”這個參數(shù),這樣我們不需要修改查詢就可以顯示關(guān)聯(lián)實體的屬性
26、了。第4章 實現(xiàn)從表操作前面完成一個簡單的關(guān)聯(lián)表的操作,這個關(guān)聯(lián)操作實現(xiàn)了業(yè)務(wù)對象從屬于其他對象的處理,但是業(yè)務(wù)中還有一種關(guān)聯(lián)操作,就是業(yè)務(wù)實體包含了子業(yè)務(wù)實體,例如:學校有班級。我們把這種關(guān)系稱為聚合關(guān)系,更加通俗一些講就是主從表關(guān)系,因此這個章節(jié)我們專門介紹如何用構(gòu)件完成主從表操作。4.1 頁面效果因為要實現(xiàn)從表的數(shù)據(jù)錄入,通常我們在錄入主表的表單同時,可以在一個表格中直接對從表進行數(shù)據(jù)操作。具體效果如下:圖4-1 頁面效果圖4.2 數(shù)據(jù)準備在前面例子中我們已經(jīng)有了OOperator操作員實體對象,我們給OOperator創(chuàng)建一個子實體:OContact(聯(lián)系人)。創(chuàng)建聯(lián)系人的腳本:請取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)將自動的創(chuàng)建出下面的模型:圖4-2 數(shù)據(jù)集我們看到上面的模型和“OOperator n-1 OOrg”一樣,聯(lián)系人中有一個操作員的實體,但是我們會發(fā)現(xiàn)業(yè)務(wù)上一個聯(lián)系人從屬于一個操作員,聯(lián)系人是需要依托一個操作員才能存在的,因此我們需要將這個“OContacts n-1 OOperator”的關(guān)聯(lián)模型改成“OOperator 1-n OContacts”的聚合模型。圖4-3 數(shù)據(jù)集然后我們就會發(fā)
28、現(xiàn)在OOperator實體中有一個oContacts對象,而且這個對象是數(shù)組類型的。圖4-4 數(shù)據(jù)集 EOS原理:1-n關(guān)聯(lián)關(guān)系通過上面的操作,我們建立了一個業(yè)務(wù)建模,操作員有多個聯(lián)系人屬性,而在數(shù)據(jù)庫的表達方式中只能夠是聯(lián)系人通過外鍵關(guān)聯(lián)操作員。因此EOS提供的數(shù)據(jù)定義并不是數(shù)據(jù)庫ER模型的設(shè)計器,而是建立業(yè)務(wù)模型的設(shè)計器。 注意:在定義1-n的關(guān)聯(lián)關(guān)系時,關(guān)聯(lián)關(guān)系中的“是否加載關(guān)聯(lián)實體”的屬性需要設(shè)置為“false”,因為1-n關(guān)系中n端的數(shù)據(jù)量是未知的,如果選擇了true,每次做1端數(shù)據(jù)查詢的時候都會自動加載n端的數(shù)據(jù)使得查詢性能緩慢。4.4 使用Datacell實現(xiàn)從表數(shù)據(jù)錄入前面已經(jīng)
29、建立了1-n的關(guān)聯(lián)關(guān)系,如何在界面中體現(xiàn)呢?通常對于主從表來說,我們會通過一個表單錄入主表記錄,用一個表格錄入從表的信息,因此我們將采用EOS Richweb中的一個重要控件Datacell來完成主從表的錄入。4.4.1 修改JSP錄入界面我們先打開前面已經(jīng)提到的OOperatorInput.jsp文件,拖拽一個EOS的Ajax控件Datacell來實現(xiàn)OContacts(聯(lián)系人)的錄入。步驟1: 打開OOperatorInput.jsp文件找到“”代碼位置,然后從選用板中拖一個Datacell控件到這行代碼開頭。圖4-6 拖拽DataCell控件步驟2: 參照圖4-7設(shè)置Datcell控件的
30、屬性。Datacell的屬性設(shè)置:在xpath中都填入“ooperator/oContacts”,并且在“列設(shè)置”中刪除contactId和operatorId兩個字段。工具條位置“top”,包含工具可以通過“瀏覽”按鈕選擇,這里只選擇“編輯”中的“添加”和“刪除”按鈕。圖4-7 設(shè)置Datcell控件的屬性步驟3: 點擊按鈕保存Datacell的配置,然后再修改OOperatorInput.jsp文件。在“”前面增加一段js代碼,代碼如下:function submitDatacell(frm) if (checkForm(frm) var dcell = $id(cell1);dcell.
31、submitAllByHidden();return true;return false;步驟4: 然后將當前表單的提交函數(shù)改成上面的submitDatacell方法。改成: 小技巧:Datacell提交數(shù)據(jù)的方式Datacell是一個Ajax控件,它可以直接通過Ajax方式和服務(wù)端進行調(diào)用,但是它也可以像HTML中的form的方式提交數(shù)據(jù)。例如上面的例子:submitAllByHidden()這個函數(shù)就可以將當前Datacell中的數(shù)據(jù)以一個對象數(shù)組方式提交到服務(wù)端。還有其他更有意思的功能,請參考EOS RichWeb開發(fā)指南慢慢研究吧。4.4.2 修改邏輯程序做了這么多的開發(fā),還沒有涉及到
32、如何修改業(yè)務(wù)邏輯程序,我們來看看為了實現(xiàn)主從表的開發(fā),我們需要什么樣的邏輯,而構(gòu)件化的代碼開發(fā)是怎樣的呢?步驟1: 修改“addOOperator”,增加操作員的邏輯:(1) 我們打開“”構(gòu)件包的“構(gòu)件”的“”下的“ooperatorbiz”的“addOOx”,如圖4-9所示。圖4-9 打開邏輯流addOOperator(2) 我們打開“構(gòu)件庫”,通過工具條上的左邊的按鈕:,打開“自定義庫”,拖拽一個“insertEntityCascade-級聯(lián)方式插入一條記錄”邏輯到編輯器中。然后將原來連接到“insertEntity”的連線連到“insertEntityCascade
33、”操作上,保存,得到如圖4-10所示的結(jié)果。圖4-10 修改邏輯流 小技巧:巧用“自定義”構(gòu)件庫EOS應(yīng)用編程模型中強調(diào)的是通過“流程+數(shù)據(jù)+人機交互”來實現(xiàn)應(yīng)用。通過流程方式繪制邏輯的時候,需要拖入更小粒度的運算操作,通常運算操作都是在“構(gòu)件庫”的“項目引用庫”中。在實際的編程中需要定義邏輯的參數(shù)和局部變量,為了簡化開發(fā),在“自定義”庫中我們將SDO對應(yīng)的基礎(chǔ)操作,或者是java的(String、BigDecimal等)對象的jdk庫中的基本操作直接顯示出來。這兒絕大多數(shù)的開發(fā)只需要從“自定義”庫中找運算操作就可以。小提示:打開deleteOOperator邏輯流,請將那個數(shù)組變量拖到編輯器
34、中看看有什么出現(xiàn)了。步驟2: 對于其他的邏輯流,我們參照“addOOperator”的方法來修改。(1) “deleteOOperator”刪除操作員操作我們不用修改了,它的操作已經(jīng)用了cascade模式了。(2) 對于“updateOOperator”,我們將“updateEntity”運算操作改成“updateEntityCascade”。(3) 對于“getOOperator”,我們將增加一個“expandRelation”運算邏輯(這個方法在自定義庫中):圖4-11 新增“expandRelation”運算邏輯設(shè)置這個參數(shù)的方法:將參數(shù)“property”的值設(shè)置為“oContacts
35、”,這樣就可以將ooperator對象的oContacts從數(shù)據(jù)庫中加載。圖4-12 設(shè)置運算邏輯的參數(shù) 小技巧:cascade級聯(lián)操作應(yīng)用中通常需要更新主從表的數(shù)據(jù),因此EOS的基礎(chǔ)構(gòu)件庫中提供了一組對單實體進行級聯(lián)操作的方法:insertEntityCascade、updateEntityCascade、deleteEntityCascade。這組方法能夠?qū)崿F(xiàn)對1-n的關(guān)聯(lián)關(guān)系的基本數(shù)據(jù)庫操作(只能處理一級級聯(lián)),特別是update功能能夠自動刪除不在Datacell中提交的數(shù)據(jù)。 注意:因為級聯(lián)操作會對從表進行復(fù)雜數(shù)據(jù)處理,如果在業(yè)務(wù)上1-n的n端數(shù)據(jù)非常大的情況下,不建議使用級聯(lián)操作。
36、而且如果n端數(shù)據(jù)量很大的情況下也不建議建立1-n的聚合關(guān)系。步驟3: 我們通過進入查詢界面,選擇一個操作員,然后點擊按鈕,就出現(xiàn)如圖4-13所示的界面,我們可以在下面的表格中直接錄入“OContacts”聯(lián)系人的信息了。圖4-13 運行界面4.5 EOS應(yīng)用邏輯開發(fā)訣竅 提示:EOS應(yīng)用邏輯是一個標準MVC:邏輯流實現(xiàn)了業(yè)務(wù)邏輯(Model),頁面流描述了頁面之間流轉(zhuǎn)關(guān)系(Control),JSP是界面的表現(xiàn)(View)。第5章 還能再快嗎?前面介紹了基于數(shù)據(jù)庫基本模型的功能實現(xiàn),我們要完成一組基本場景還是需要做很多操作的,而且每個操作還是比較麻煩的,特別是修改JSP頁面的代碼,我們還能更快的完成上面的功能嗎?答案有一個:可以利用向?qū)У墓δ軄韼椭阃瓿纱a構(gòu)造過程。5.1 模型設(shè)置在“第2章 快速開發(fā):單表增刪改查”中我們已經(jīng)設(shè)置實體屬性的顯示屬性了,而且我們通過顯示屬性能夠幫助我們完成基本代碼的構(gòu)造,那么對于關(guān)聯(lián)屬性來說我們怎么設(shè)置呢?我們雙擊“oOrg”這個屬性,發(fā)現(xiàn)和其他字段顯示屬性不一樣,我們可以設(shè)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版杉木林木材市場調(diào)研與買賣預(yù)測合同3篇
- 二零二五年幼兒園幼兒安全防護責任合同2篇
- 2025年度智能家居門窗系統(tǒng)安裝及售后服務(wù)合同范本3篇
- 二零二五版農(nóng)用車租賃管理及技術(shù)支持合同3篇
- 2025年度木工材料采購與供應(yīng)合同范本4篇
- 二零二五年礦山轉(zhuǎn)讓協(xié)議及礦產(chǎn)資源開發(fā)運營合同3篇
- 二零二五年度投資擔保公司產(chǎn)業(yè)投資基金合同
- 課題申報參考:明清江南文人居室陳設(shè)藝術(shù)研究
- 2025年度城市地下綜合管廊配電箱柜安全防護采購合同4篇
- 二零二五年度文化創(chuàng)意產(chǎn)業(yè)合作聘請兼職勞務(wù)合同
- 疥瘡病人的護理
- 人工智能算法與實踐-第16章 LSTM神經(jīng)網(wǎng)絡(luò)
- 17個崗位安全操作規(guī)程手冊
- 2025年山東省濟南市第一中學高三下學期期末統(tǒng)一考試物理試題含解析
- 中學安全辦2024-2025學年工作計劃
- 網(wǎng)絡(luò)安全保障服務(wù)方案(網(wǎng)絡(luò)安全運維、重保服務(wù))
- 2024年鄉(xiāng)村振興(產(chǎn)業(yè)、文化、生態(tài))等實施戰(zhàn)略知識考試題庫與答案
- 現(xiàn)代科學技術(shù)概論智慧樹知到期末考試答案章節(jié)答案2024年成都師范學院
- 軟件模塊化設(shè)計與開發(fā)標準與規(guī)范
- 2024年遼寧鐵道職業(yè)技術(shù)學院高職單招(英語/數(shù)學/語文)筆試歷年參考題庫含答案解析
- 有機農(nóng)業(yè)種植模式
評論
0/150
提交評論