Oracle Jdeveloper Ch6

  • Uploaded by: Sky
  • 0
  • 0
  • April 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Oracle Jdeveloper Ch6 as PDF for free.

More details

  • Words: 1,103
  • Pages: 30
Oracle JDeveloper 系列文章

第六章:Oracle ADF Business Component 經過第五章 ADF Component 的導覽,應該可以針對整個 ADF 有基本並且初步 的認識,我們都知道,整個 Oracle ADF BC 共包含 Entity Object、Association、 View Object、View Link 以及 Application Module,在本章的章節中,我們將會談 及 Entity 的部分,包括 Entity 部分的介紹,Association 的介紹,基本 Validation 的設計說明,都是本章的重點。 在整個 ADF BC(ADF Business Component)中,最底層部分是【Entity Object】, 其中 Entity Object Definition 可以是代表一個實體的 Table 或是 View,每一個 Entity Object Definition 都有很多的 Entity Attribute,則是代表 Table 的 Column, 而其中的關係,可能在兩個 Table 中會有所謂 Foreign Key 關係,而在 Entiy 和 Entity 中的關係,我們稱為 Association,舉個例子,以 HR 為例。 我們可以參考第四章的方式先行建立一個 Business Component Diagram。 以下將會在範例中陸續說明: 以下將會建立一個 ADF BC 來進行說明,說明相關 Entity 部分的東西。

先行在 Applications 按下右鍵,先行 New 一個新的 Workspace。

1 頁 3/13/2005

Oracle JDeveloper 系列文章

輸入建立 Application Workspace 的相關資訊,在 Application Workspace 輸入 HRWS,並在 Prefix 中輸入 hr,接下來按下確定。

可以先行存檔,先行建立一個 Workspace。

2 頁 3/13/2005

Oracle JDeveloper 系列文章

因為需要增加一個 ADF BC,所以在 Model 的 Project 按下右鍵選 New。

利用 Business Component Diagram 來建立 ADF BC,所以在 Business Component 的分類下,選取 Business Component Diagram。

3 頁 3/13/2005

Oracle JDeveloper 系列文章

在 Business Component Diagram 的對話方塊中,將名稱取為 Business Component Diagram,以及 Package 取名為 hr.model。

當 Business Component Diagram 已經建立,會先行建立一個空白的 Diagram, 你可以將相關的 Table 拉到 Diagram 中,並且建立相關的 UML 圖。

4 頁 3/13/2005

Oracle JDeveloper 系列文章

你可以將 Connection 中的 HR Connection 打開,裡面包括很多的 Component, 其中包括 Table、View 和一些相關的部分,包括 Procedure、Package 或是撰寫 相關的 Triggers 或 PL/SQL 的程式。

可以將我們所需要的兩個 Table,包括 Departments 和 Employees,拉到右邊的 Diagram 中,會產生相關的 Entity,在之前提過,每一個 Entity 代表是一個 實體的 Table 或是 View,所以我們將兩個 Table 拉入 Diagram 中。

5 頁 3/13/2005

Oracle JDeveloper 系列文章

在此可以 Default 按下確定,確認會建立 Business Component Object。

當你將相關所需要的 Table,拉到主要的編輯區,Oracle JDeveloper 會自動幫你 Create 好相關的 Business Component 的相關 File,包括實體 Class File 和 XML File 。

6 頁 3/13/2005

Oracle JDeveloper 系列文章

以下會針對 Department 和 Employee 這兩個 Table,所建立的相關檔案,其中 包括 XML File 和實體的 Class File,其中以 Department 這個 Table 為例,會 產生兩個相關檔案,包括 Departments.xml 和 DepartmentsImpl.java 這兩個檔 案,其中 DepartmentsImpl 是實體代表 Department 的 Entity Object 的實體檔 案,而 Departments.xml 則是代表描述 Department 這個 Entity 的相關屬性, 所以將會在下面再說明,另外再增加兩個 Table 的 relation 的 XML File。

如下圖所示,已經將兩個 Table 所建立的 UML 圖,建立於主要編輯區,以下 將會一一說明。

7 頁 3/13/2005

Oracle JDeveloper 系列文章

這個 UML 圖可以使用 Layout Shapes 來進行圖形的排列,共有六種排列方式, 你可以選擇最喜歡的方式,可以在空白處按下右鍵,並且選擇。

以下則是選取 Hierarchical(Right to left)的相關圖。

可以針對 Employees 這個 Entity 來說明,可以直接點選 Employees 這個圖, 將可以打開 Entity Object Editor,如下圖。

8 頁 3/13/2005

Oracle JDeveloper 系列文章

以下是 Entity 的全觀,包括當時是代表哪一個 Table,以及相關 Table 的 Column 則是代表 Entity 的 Attribute,包括 EmployeeId、FirstName 等等,另外 也包括設定相關的 Entity 的 Validation,以及設定一些相關設定,會於後面依序 說明。

以下是 Entity Attribute 的相關設定圖,包括設定名子、是代表哪一種型態,或 是屬不屬於 Persistent(持續) 的欄位,也就是說是不是當 Update 後,需要更 動對應的 Table 的 Column 值,

9 頁 3/13/2005

Oracle JDeveloper 系列文章

以 EmployeeId 為例,名稱為 EmployeeId,而其中的 Type 則為是 Number,而 其中欄位的說明概述如下(列舉幾項): Persistent: 代表此 Attribute 和 Table 中的 Column 是保持 Persistent,因為當 如果從 Database 的 Table 所 Create 出來的 Entity Attribute,則所有 Attribute 都會自動勾選此欄位,所以當 Attribute 的值更改後,將會連 動的更動 Column 的值。 Mandatory: 如果 Table 中的 Column 是有 Not Null 的限制,則此欄位將會自動選 擇,所以此欄位代表此 Attribute 的值是否為 Null。 Primary Key: 代表此欄位在 Table 中是代表 Primary Key,可以使 ADF BC 來分辯 不同的 Entity Object,就好像可以分辨在 Table 中不同的 Row,所以 即使 Table 沒有設定 Primary Key,Oracle JDeveloper 會自動幫你建立 RowId 的 Attribute,則是對應到 DB 中的 ROWID 這個 Column,而這 個 Attribute 所代表的 Data Type 為 oracle.jbo.domain.RowId。 PS:jbo 則是代表 Java business object,Oracle 取的。 Unique: 在 Table 中,我們可以針對某一個 Column 制訂 Unique 的 Constraints, 當 Table 已經有此 Constraints 時,同時間 Create 出相關的 Entity Object 也會在此欄位打勾,代表所有的 Entity Object 中該 Attribute 的值都不 會重複。 Queriable: 此欄位是代表該 Attribute 是否可以用於 View Object 的 Where 中的敘 述,以 View Object 是一段 SQL 的觀念來看,則是代表可否用於 Where 之中,一般來說應該都會打勾,除了 Table Column Type 是 LOB。 Selected in Query: 如果此欄位打勾,則此欄位可以代表一段 SQL,一般來說,是用於 一些暫存的變數欄位,所以並不是和 DB 持續 Persistent。 在 DB Column 中,是代表真實在 DB 中的實體 Column 的名稱和型態,如果你進 行了更改,也可以利用【同步化】的功能,Oracle JDeveloper 將會自動幫你更改 相關實體 DB 中的設定,當然前提必須帳號要有更改的權力。

10 頁 3/13/2005

Oracle JDeveloper 系列文章

接著部分,我們將會來解釋 Association,Association 則是代表兩個 Entity Object 的關係,以 Department 和 Employees 這兩個 Table 為例,中間會藉由【部門代 號】來進行關聯,也就是 EmpDeptFkAssoc,你可以點兩下並且開啟 Association Editor。

當我打開 Association Editor,可以看到其中左方是代表 Source 部分,一般來說 是代表 Master 的部分,而 Destination 部分則是代表 Detail 部分,所以 Department 中的 DepartmentId 和 Employee 中的 DepartmentId 相對應,當選擇 好相關欄位後,可以按下新增,因為我們用 Wizard 產生,所以已經設好。

11 頁 3/13/2005

Oracle JDeveloper 系列文章

其中在 Association Porperties 中,會定義 Source 和 Destination 的 Accessor Name,即是 UML 圖上的兩邊字,例如 Source 邊是 Department1。 Composition Association 將會於專題來討論。

切換回 Entity Objects 的部分,可以看一下 Cardinality,代表這個 Association 的 型態為何,包括各種型態,例如 1 對多或是多對多或是正向 1 對多等等,都有各 自的意義,將會介紹一些常用的,其餘請參考相關文件。

12 頁 3/13/2005

Oracle JDeveloper 系列文章

看一下 EmpDeptFkAssoc 的 accessor name,可以用滑鼠點一下 Employees1 上, 你可以直接編輯名稱,可以取對你有意義的名稱。

可以直接編輯過後,例如將 Employees1 改成 Employees。

13 頁 3/13/2005

Oracle JDeveloper 系列文章

因為整個 Entity Object 是從 Oracle DB 所 Gengerate 出來,所以每一個 Entity Attribute 都是代表每一個 Table 的 Column,因為我們需要介紹 Transient 和 Persistent 的 Attribute,所以將 Entiy Object 的範圍拉大,可以留出一格輸入 Attribute 的空間。

我們可以假設我們需要一個【津貼總額】的欄位,我們可以直接在圖上的欄位編 輯,並且輸入【otherBounds:Number】,即是代表此欄位名稱為 otherBounds, 而他的型態為 Number,Number 是代表 oracle.jbo.domain.Number。

14 頁 3/13/2005

Oracle JDeveloper 系列文章

可以點兩下 Entity Object 的圖,可以打開 Entity Object Editor,你可以看到多一 個 Attribute,當 Default Attribute Create 好後,會 Default 將 Persistent 和 Queriable 這兩個 Attribute 打勾,因為我們需要建立一個暫存欄位(Transient Attribute), 所以我們需要將 Persistent 的勾勾拿掉,將可以成為一個 Transient Attribute。

如下圖所示,Persistent Attribute 欄位的勾勾拿掉,等會我將會示範怎麼使用。

15 頁 3/13/2005

Oracle JDeveloper 系列文章

因為我們已經完成我們的 Business Component,我們需要來建立 View Object 和 Application Module,也就是 Data Model Component,可以讓後端的 Business Component 顯示出來,提供 View object 和 Application Module 給前端的 User Interface 使用。

可以在空白處按下右鍵,並且選擇 Generate\Default Data Model Components for Diagram 這個功能,來建立 Data Model Component。

直接按下一步。 16 頁 3/13/2005

Oracle JDeveloper 系列文章

更改一下 Package 的名稱,改成 hr.model.datamodel,將 Entity Object 和 Association 都選到右邊,準備建立 View Object。

輸入 Application Module 的資訊,將名稱取為 HrAppModule。

17 頁 3/13/2005

Oracle JDeveloper 系列文章

會出現 Summary 的視窗,可以觀看一下是不是正確,如果都沒有問題,可以直 接按下【完成】。

如下圖可以將整個範例建立完成,接著我們將要來進行一些測試。

18 頁 3/13/2005

Oracle JDeveloper 系列文章

準備將 Business Component Browser 叫出來,可以執行 HrAppModule \ Test。

直接按下 Connect。

19 頁 3/13/2005

Oracle JDeveloper 系列文章

如同以下可以打開 Oracle Business Component Browser。

可以先行點選 DepartmentsView1 這個 Node,可以將 DepartmentView 給顯示出來。

20 頁 3/13/2005

Oracle JDeveloper 系列文章

第一個要測試的問題,是要測試欄位的必要性,所以我們將 DepartmentId 清除, 如上圖,將 DepartmentId 為 10,將 DepartmentId 清空,並按下 Commit(綠色)。

你會在 Browser 中得到一個 Exception,至於為什麼,我們繼續看。

我們回到 UML 圖,直接點兩下 Departments 這個 Entity Object 兩下。

21 頁 3/13/2005

Oracle JDeveloper 系列文章

如果你還沒有 Connect 到 DB,會出現帳號密碼確認一下,如果已經有 Connect, 則下面的視窗將不會出現。

我們可以看到 Entity Object Editor,選擇到 DepartmentId 這個 Node,可以看到在 紅色框框內的 Mandatory 有打勾,相當於在 DB 中時,是代表此欄位是 Not Null, 所以此 Attribute 也是如此,所以當你清除 ID 中的值時,將會引發 Exception,由 ADF BC 所丟出,所以像 Unique 也是一樣,所以當你的 Table 有此種 Constraint 時,當 ADF BC 建好後,將會自動幫你 Mapping 相關 Attrobute 的欄位屬性,所 以這是最基本的控制。

22 頁 3/13/2005

Oracle JDeveloper 系列文章

接著,我們來討論 Persistent Attribute 和 Transient Attribute 這兩種 Attribute,我們 在 Employees 中裡看到兩個 Attribute,Salary(薪水)和 otherBounds(津貼總額) , 這兩個欄位。

我們可以點一下 Employees Entity,可以開啟 Entity Object Editor,我們可以選到 Salary 這個欄位,可以看到欄位中的屬性有勾選 Persistent,代表是和 DB 會是保 持 Persistent,接著看一下另一個屬性。

23 頁 3/13/2005

Oracle JDeveloper 系列文章

接著我們看到 otherBounds 這個 Attribute,可以看到 Persistent 沒有打勾,則是意 味是一個 Transient Attribute,也就是一個暫存欄位,或是說是一種計算欄位,所 以可以 Create 這樣的欄位,是代表一種計算結果,當某個欄位進行調整,該欄 位也會進行調整,但是卻不是實體 DB 中的欄位。

回到 Oracle Business Component Browser,將剛剛的動作 Rollback,可以在此 Session 尚未 Commit 前,將資料回復。

24 頁 3/13/2005

Oracle JDeveloper 系列文章

會將剛剛刪除的 DepartmentId 還原,還原成更改前,所以你可以看到 DepartmentId 也還原成 10。

我們點到 EmployeeView1 這個 View Object,打開 EmployeeId 是 100 的資料。

25 頁 3/13/2005

Oracle JDeveloper 系列文章

將 ID 為 100 的員工的薪水從 24000 調整成 18000 元,如下圖所示。

接著在 ottherBounds 欄位輸入 5000 元的津貼,如下圖所示。

26 頁 3/13/2005

Oracle JDeveloper 系列文章

接著瀏覽到下一個員工,如紅框框所示,並將 101 的員工增加津貼 2000 元。

接著按下 Commit,你可以將資料 Update 進去 DB,亦即資料進行異動確認。

27 頁 3/13/2005

Oracle JDeveloper 系列文章

先將 Oracle Business Component Browser 關閉,再將 Oracle Business Component Browser 打開,可以遵循以下步驟。

按下 Connect,可以來 Connect Oracle Business Component Browser,再一次打開 Oracle Business Component Browser,以期可以再一次 Query 資料。

28 頁 3/13/2005

Oracle JDeveloper 系列文章

可以看到 100 的員工,薪水已經更改了,但是津貼卻沒有保存,這就是 Attribute 是否有 Persistent 的屬性,因為薪水的欄位有 Persistent,所以當我們將薪水從 24000 調整成 18000,當我們經過 Commit 後,當我們再度打開 Browser 後,則 可以看到資料已經成功的 Update,資料有真的 Update 進去資料庫。

29 頁 3/13/2005

Oracle JDeveloper 系列文章

當我們捲動到 101 這個員工後,可以看到剛剛輸入的津貼的欄位,因為本身津貼 的欄位沒有 Persistent 的屬性,意味是代表一個 Transient Attribute,所以當我們 輸入津貼的數目在此欄位,當已經離開該有的 Session 時,則此欄位就會失效, 而且也不會去 Update 相關的 DB 的欄位,藉由此,可以建立一些計算欄位,方 便先行建立一些 Transient Attribute,可以不用往後在程式中一直利用相同方法一 直做相關的計算。

本章介紹 Emtity Object 的一些基本的東西,下一章開始就是包括 Entity 的一些 Validation 和一些 Business Rules 的制訂,以及 Entity Object 的一些基本的技術和 觀念,有助於讓你更加瞭解 ADF BC 的 Entity Object,期待下一章。

30 頁 3/13/2005

Related Documents

Oracle Jdeveloper Ch6
April 2020 19
Oracle Jdeveloper Ch2
April 2020 14
Oracle Jdeveloper Ch4
April 2020 32
Oracle Jdeveloper Ch8
April 2020 7
Oracle Jdeveloper Ch1
April 2020 11
Oracle Jdeveloper Ch3
April 2020 8

More Documents from "Sky"