Oracle Technology Network (OTN) > Downloads, Discussions, and Documentation for Developers and DBAs
 使用 Oracle Application Express 3.0 构建实用的应用程序

使用 Oracle Application Express 3.0 构建实用的应用程序

本教程将向您介绍如何使用 Oracle Application Express 快速创建应用程序。

大约 2 个小时

主题

本教程包括下列主题:

将鼠标置于此图标上可以加载和查看本教程的所有屏幕截图。 (警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)

注:此外,您还可以在下列步骤中将鼠标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。可以通过单击各个屏幕截图来将其隐藏。

概述

Oracle Application Express 是什么?

Oracle Application Express 是一个适用于 Oracle 数据库的快速 Web 应用程序开发工具。只需要一个 Web 浏览器和有限的编程经验,您就可以快速、安全地开发和部署专业的应用程序。

Oracle Application Express 由哪些组件组成?

Oracle Application Express 包含以下四个主要组件:

Application Builder

用于构建以数据库为中心的交互式 Web 应用程序。

SQL Workshop 用于访问数据库对象、运行 SQL 语句和 SQL 脚本。
Utilities 用于加载和卸载数据、生成 DDL、运行对象报表以及管理回收站。
Administration 用于管理服务和用户,以及监视活动。

术语

使用 Oracle Application Express 时,了解下面这些概念很重要:

工作区

工作区是一个虚拟专用数据库,允许多个用户在同一个 Oracle Application Express 安装中工作,但保持其对象、数据和应用程序私有。

应用程序

应用程序是一个通过分支连接的页面的集合。其属性包括身份验证方法、默认的 UI 模板以及授权规则。

页面 页面是一个应用程序的基本构建块。若要在 Application Builder 中构建应用程序,您需要创建包含用户界面元素(如选项卡、列表、按钮、项目以及区域)的页面。
区域 内容显示在多个区域中,这些区域是页面的逻辑子部分。每个页面可以包含任意数量的若干不同类型的区域。这些类型包括:HTML 文本、SQL 查询、PL/SQL 生成的 HTML 和图表。每个区域均使用区域模板生成,并由页面模板中定义的显示点来确定在页面上的位置。
项目 项目可以是文本域、文本区域、口令、选择列表、复选框等等。项目属性决定着页面中项目的显示和行为。例如,这些属性可以决定标签显示的位置、项目的大小以及是将项目显示在前一个项目的侧面还是下面。项目的值自动存储在应用程序的会话状态中,可在用户会话内随时进行引用。

体系结构

Oracle Application Express 完全位于 Oracle 数据库内。其中只包含表中的数据和大量 PL/SQL 代码。基本上,Oracle Application Express 包含大约 165 个表和 200 个 PL/SQL 对象(内含 300,000 多行代码)。

无论是运行 Oracle Application Express 开发环境还是运行使用 Oracle Application Express 构建的应用程序,过程都是一样的。 浏览器发送一个转换为相应 Oracle Application Express PL/SQL 调用的 URL 请求。 在数据库处理完该 PL/SQL 后,结果将以 HTML 格式在浏览器中显示。 这个循环过程在每次请求或提交页面时都会进行。 url 转换背后的方法取决于您的 Oracle 版本。 在 10.2.0.3 之前的 Oracle 中运行 Oracle Application Express,需要 Apache 和 PL/SQL 模块。 在 Oracle 10.2.0.3 以及更高的版本中(包括 Oracle 快捷版 (XE)),Oracle Application Express 可以使用嵌入式 PL/SQL 网关或 Apache。

应用程序会话状态在 Oracle Application Express 内的数据库表中进行管理,而不使用专用的数据库连接。Application Express 环境中消耗的 CPU 资源最少。如果用户请求了一个页面,在接收到返回页面后进行查看时,又没有发出另一个请求,则数据库可能会停止并在用户查看该结果页面期间重启,而用户不会感觉到任何中断。

Oracle Application Express 3.0 有哪些新特性?

该版本包括几个主要的新特性和其他一些节省时间的小改进。

PDF 打印

您可以将报表区域导出到 PDF。单击编辑报表区域时,您会看到一个新的选项卡 Print Attributes。您还可以在 Shared Components 下面定义 Report Queries(报表查询)和 Report Layouts(报表布局)。对于打印,请注意,您可以让用户利用内置链接或通过您自己自定义的按钮访问该功能。

Access 移植

最近,Oracle Application Express 中引入了一个新的应用程序移植工作间。该组件是 Application Express 3.0 的标准组件,详细信息请单击此处。要访问该新组件,可从 Home 页面选择 Application Migrations。

Flash 图表 现在,用户在创建新页面或区域类型的图表时,多了一种新类型 — Flash 图表。受支持的图表类型有 18 种。在创建期间,您可以预览选定的类型,并设置结果图表的大多数属性。除了创建新的 Flash 图表外,您还可以将现有的 SVG 图表转换为 Flash 图表。您可在 Application Reports > Page Components 下找到移植实用程序,或者,如果编辑的区域包含 SVG 图表,可在 Tasks 下找到该实用程序。
拖放项目布局 在 Page Definition 页面上,Reorder Items 图标右侧新增了一个名为 Drag and Drop 的图标。您可以重新排列当前区域内项目的顺序、更改选择属性(项目名称、标签以及当前项目类型范围内的类型)、删除项目以及快速创建新项目。您可以将项目置于现有项目的左侧或右侧,并可插入新行以在现有表单中部快速添加项目。要删除项目,只需将其拖入底部的回收桶即可。
改善的 Web 服务 Application Express Web 服务引擎支持定义更为宽松的类型和文档样式 Web 服务。这两方面的增强使得支持 JDeveloper 创建的 Web 服务和 Oracle BPEL 同步 Web 服务成为可能。您可以与 SSL (HTTPS) 上的 Web 服务以及需要基本身份验证的 Web 服务进行交互。此外,如果 Application Express 引擎不能针对某个特定服务正确分析 WSDL 文档,您可以手动创建一个 Web 服务引用。您需要在其他有关该 Web 服务的信息中提供 SOAP 请求信封和 URL 端点。
新项目类型 新增了几个项目类型。它们包括:
   - Shuttle
   - HTML Editor Minimal — 位于 Textarea 下
   - HTML Editor Standard — 位于 Textarea 下
   - Popup Color Picker — 位于 Popup List of Values 下
   - Date Picker(使用格式掩码)
日历增强 创建日历页面或区域时,您将自动获取每月、每周和每天的日历。用户可以使用按钮在所需的模式之间切换。
支持对象增强功能 Application Express 2.2 中引入的支持对象特性进行了增强,允许定义升级脚本。因此,您可以将升级发布到在 OTN 上分发的打包应用程序,并且可以使用初始安装时使用的向导来安装升级。还可以使用该特性分发升级。
页面和区域缓存 页面和区域缓存允许您将部分应用程序写入缓存以提高性能。缓存属性在页面和区域属性页面上设置。这对于没有任何条件的静态页面和区域(如列表)以及包含 HTML 文本的区域非常有用。
Item Finder 增强功能 在 Application Builder 中,新增了两个有关 Item Finder 的选项卡。一个用于 CSS — 这使您无需考虑主题,即可标识可用于任何 Application Express 应用程序的层叠样式表。第二个用于图像 — 它将显示应用程序中使用的一般图标的图库。此外,SQL Workshop 的 Object Browser 和 SQL Commands 组件中还添加了 Table Finder。下一次在 Object Browser 中创建触发器或在 SQL Commands 中编写一些自定义的 SQL 时,如果只是想不起来所需的列名时,可单击手电筒图标。

应用程序和模式比较

新的 Application Comparison 实用程序位于 Application Reports > Cross Application 下,可用于识别两个选定应用程序之间的区别。Schema Comparison 位于 Utilities 下面。它用于标识两个不同模式之间的差异。
友好的 URL 语法简化了收藏 该特性允许公共应用程序的链接的会话 ID 为零。这使得所有的公共页面链接保持一致,从而增强了对搜索引擎和收藏的友好性。实际的会话 ID 存储在 Cookie 中(这不是一个安全问题,因为该特性只适用于公共页面)。
新口令和帐户控制 在实例和工作区级别下,您可以指定口令过期规则、强制使用强口令(最小字符数,包含数字和字母等)、要求首次使用时更改口令(对于系统生成的初始口令非常有用)以及锁定帐户。
改善的工作区管理 除了上述口令控制外,工作区管理还在其他几个方面进行了改进。您可以根据需要定义工作区的大小(面向用户请求显示的选择与默认的选定项),请求告知您工作区名称的电子邮件(适用于在不记得名称但始终知道您的电子邮件地址的情况),以及查看尝试登录的日志。

返回主题列表

开始本教程之前,您应该:

1.

安装 Oracle 数据库 11g

2.

完成在 Oracle 数据库 11g 中配置 Oracle Application Express 教程

3.

apex30.zip 文件下载并解压缩到您的工作目录中。

返回主题列表

从电子表格创建表

要从电子表格加载本教程的数据,执行以下步骤:

1.

输入以下 URL 登录 Oracle Application Express(将 <主机名> 更改为本地主机、指定的主机名或 apex.oracle.com)。

http://<主机名>:7777/pls/apex

 

2.

要登录 Oracle Application Express,请输入以下详细信息,然后单击 Login

Workspace:<您的工作区名称>
Username:<您的用户名>
Password:<您的口令>

 

3.

要创建表,单击 Utilities > Data Load/Unload > Load 旁的向下箭头。

 

4.

单击 Load Spreadsheet Data

 

5.

确保将导入目标 (Import To) 设为 New table。为 Import From 选择 Upload file (comma separated or tab delimited) 选项。单击 Next >

 

6.

单击 Browse...

 

7.

找到 tasks.txt 文件并单击 Open。由于文本文件中的数据是用制表符分隔的,因此在 Separator 域中输入 \t。单击 Next >

 

8.

Table Information 页面显示表中的列及其格式,以及要在创建表后插入到表中的数据。对于 Table Name,输入 OBE_TASKS然后单击 Next >

 

9.

使用 Primary Key 页面,可以向表中添加系统生成的主键并使用一个新序列填充该列。查看默认值,然后单击 Load Data

 

10.

创建表并加载数据后,您将处于 Files 页面上。您可以看到,刚刚上载的包含 16 行的文件已经成功上载。要查看新表,单击 SQL Workshop 选项卡。

 

11.

选择 Object Browser > Browse > Tables 旁的向下箭头。

 

12.

要查看表定义,单击左侧导航器中表列表下的 OBE_TASKS 表。

 

13.

该页面将显示表定义。要查看表中的数据,单击 Data 选项卡。

 

14.

您将看到表中的所有数据。您可在此页面中更改表中的任何数据,也可向表中添加行。

 

返回主题列表

要使项目名可维护并且能够跟踪有关项目的其他信息,可将项目信息移至单独的表中。执行以下步骤:

1.

单击 Table 选项卡

 

2.

单击 Create Lookup Table 按钮。

 

3.

要指定据以创建主表的列,选择 PROJECT - varchar2,然后单击 Next >

 

4.

输入以下值,然后单击 Next >

New Table Name:OBE_PROJECTS
New Sequence:OBE_PROJECT_SEQ

 

5.

单击 Finish

 

6.

注意,新的 OBE_PROJECTS 表包含一个数字主键和 PROJECT 列。

 

返回主题列表

现在,您已经具有了两个主表,可以添加一些其他的列来增强 OBE_PROJECTS 表。
为此,执行以下步骤:

1.

确保选中了 OBE_PROJECTS 表。准备向该表中添加列。单击 Add Column

 

2.

输入以下值,然后单击 Next >

Add Column:PROJECT_DEADLINE
Type:DATE

 

3.

单击 Finish

 

4.

您将看到已经增加了新的 PROJECT_DEADLINE 列的修改后的表定义。您希望为 PROJECT_PRIORITY 多创建一列。单击 Add Column

 

5.

输入以下值,然后单击 Next >

Add Column:PROJECT_PRIORITY
Type:NUMBER
Precision: 1

 

6.

单击 Finish

 

7.

PROJECT_PRIORITY 列添加成功。单击 Data 选项卡查看数据。

 

8.

您将看到 OBE_TASKS 表中引用的所有项目。您可以在这里更改数据。单击 Public Website 中 PROJECT_ID 左侧的 Edit 图标 ()。

9.

对于 Project Deadline,输入从当天日期算起一个月的时间。为 Priority 输入 1。单击 Apply Changes

10.

您将看到您添加的数据。另一种创建数据库对象和加载数据的方法是使用脚本。从下拉列表框中选择 SQL Scripts

返回主题列表

您可能已经注意到 OBE_TASKS.ASSIGNED_TO 列是个数字。在本主题中,您将运行脚本来创建 OBE_EMPLOYEES 表并加载当前员工列表。每个员工都有一个对应于 OBE_TASKS.ASSIGNED_TO 列中的数字的 EMPLOYEE_ID。执行以下步骤:

1.

单击 Upload

 

2.

单击 Browse...

 

3.

选择 employees.sql,然后单击 Open。为 Script Name 输入 OBE_EMPLOYEES,然后单击 Upload

 

4.

选择 OBE_EMPLOYEES 脚本。

5.

脚本随即显示。单击 Run

6.

单击 Run 确认。

7.

脚本执行完成。要查看结果,单击 View Results 图标。

8.

创建了 OBE_EMPLOYEES 表,其中插入了一些数据。单击 SQL Workshop 路径式导航栏。

返回主题列表

现在,您已经具有了由 OBE_TASKS.ASSIGNED_TO 列引用的员工数据,但需要标识两个表之间的外键。该外键确保每个 ASSIGNED_TO 列引用一个有效的员工。它还可确保无法删除已分配有任务的员工。执行以下步骤:

1.

选择 Object Browser > Browse 旁的向下箭头,然后选择 Tables

 

2.

选择 OBE_TASKS 表,然后单击 Constraints 选项卡。

 

3.

单击 Create

 

4.

为 Constraint Type 选择 Foreign Key。为 Foreign Key Column 选择 ASSIGNED_TO,为 Reference Table Name 选择 OBE_EMPLOYEES,并从 Reference Table Column List 中选择 EMPLOYEE_ID。然后单击 Next >

 

5.

单击 Finish

6.

该约束创建成功。您还需要在 PROJECT_PRIORITY 列上创建一个校验约束,以确保在插入或更新数据时对该数据进行验证。选择 OBE_PROJECTS

7.

单击 Create 部分的选项卡。

8.

为 Constraint on Column 域选择 PROJECT_PRIORITY,并为 Constraint Expression 输入 in ('1','2','3')。确保 Constraint Type 选择了 Check。然后单击 Next >

9.

单击 Finish

10.

该约束创建成功。单击 Home 路径式导航栏。

返回主题列表

创建应用程序

要创建应用程序框架并将几个初始页面设为默认值,执行以下步骤:

1.

在 Oracle Application Express 主页中,单击 Application Builder > Create Application > Create Application 旁的向下箭头。

 

2.

为 Name 输入 Project Tasks Application。保留 Creation Application 的默认值 From Scratch,然后单击 Next >

 

3.

您需要创建的第一个页面是 Home 页面。确保为 Page Type 选择了 Blank 页面,将 Name 更改为 Home,然后单击 Add Page

 

4.

为了能够维护已经加载的员工,您需要创建一个关于员工表的报表和表单。为 Page Type 选择 Report and Form,为 Subordinate to Page 选择 Home (1),然后单击 Table Name 的向上箭头。

 

5.

从表列表中选择 OBE_EMPLOYEES

 

6.

单击 Add Page

 

7.

您可以在创建应用程序时更改页面的名称。单击页面 3 的 OBE_EMPLOYEES 链接。

 

8.

将 Page Name 更改为 Maintain Employee,然后单击 Apply Changes

 

9.

单击页面 2 的 OBE_EMPLOYEES 链接以更改其名称。

 

10.

将 Page Name 更改为 Employee Information,然后单击 Apply Changes

 

11.

单击 Next >

 

12.

选择 No Tabs,然后单击 Next >

 

13.

您不希望从其他应用程序引用任何组件。单击 Next >

 

14.

接受默认值。单击 Next >

 

15.

选择 Theme 15。单击 Next >

 

16.

检查您的选择。单击 Create

 

17.

这就创建了一个应用程序及其相关页面。要运行该应用程序,单击 Run Application 图标。

 

18.

由于选择了默认的 Application Express Authentication,因此需要使用开发时使用的登录身份来登录新应用程序。为 User Name 输入 obe,为 Password 输入 obe。然后单击 Login

 

19.

随即显示 Home 页面。显示连接报表的 Employee Information 链接。单击 Employee Information

 

20.

显示员工列表。您可以根据需要单击员工左侧的图标来编辑该员工的信息。

 

21.

显示员工详细信息。单击窗口底部开发人员链接中的 Application <n> 链接。

 

返回主题列表

添加主从表单

尽管项目和任务存储在两个单独的表中,但在同一个页面上显示其信息却是非常有用的。主/从表单正好可实现此目的。要添加一个主/从表单,执行以下步骤:

1.

单击 Create Page

 

2.

选择 Form 页面类型,然后单击 Next >

 

3.

选择 Master Detail Form,然后单击 Next >

 

4.

首先选择主表。为 Table/View Name 选择 OBE_PROJECTS,单击 Select All () 图标将所有列移至 Displayed Columns 区域。然后单击 Next >

 

5.

接下来,选择从表。为 Table/View Name 选择 OBE_TASKS,单击 Select All () 图标将所有列移至 Displayed Columns 区域。然后单击 Next >

 

6.

创建了表之后,还创建了一个触发器以调用行插入的序列。接受默认值以使用 Existing Trigger,然后单击 Next >

 

7.

单击 Next > 在上 OBE_TASKS 上使用 Existing Trigger。

 

8.

对于 Include master row navigation,选择 Yes。该选择允许用户在主/从页面上滚动浏览项目。

对于 Master Row Navigation Order,选择 PROJECT。该选择将按项目名称以字母顺序显示下一个项目。如果选择 PROJECT_ID,则下一个记录将由 PROJECT_ID 计算,可能会使用户产生混淆。

对于 Include master report,选择 Yes。该选择将在创建了主/从页面后,创建一个包含所有项目的报表页面。该报表还包括到主/从页面的导航。

进行完选择之后,单击 Next >

 

9.

确保选择了 Edit detail as tabular form on same page,然后单击 Next >

通过选择在同一页面上将细节编辑为表格化表单,主/从页面上的任务报表将可编辑。如果选择在单独页面上编辑细节,则任务报表将只是个报表,只能在单独页面上逐条编辑记录。

 

10.

在 Create Breadcrumb Entry 部分下面,将 Entry Name (Master Report) 更改为 Projects,将 Entry Name (Master Detail Page) 更改为 Projects and Tasks。然后,单击 Home 链接将新项目报表的父路径式导航栏设为 Home。该选择将使用户可以从 Home 页面中导航到该报表。

 

11.

单击 Next >

 

12.

接受默认设置 Do not use tabs,然后单击 Next >

 

13.

单击 Create 创建主/从表单。

 

14.

单击 Run Page 图标。

 

15.

自动创建一个包含项目列表的报表。选择其中一个项目旁的 Edit () 图标以查看主/从表单。

 

16.

显示主/从表单。通过该页面,用户可以编辑项目的详细信息以及与项目关联的任务的详细信息。通过它,用户还可以向当前项目中添加新任务。

在详细信息区域中,您会看到 Add Row 按钮。此按钮可保存任何未决更改,并会另外添加一行,以便可以将新任务添加到项目中。您还应有一个 Delete 按钮。此按钮与每个任务左侧的复选框配合使用。标题行中的复选框用于选择显示在该页面上的所有任务。单击 Delete 按钮时,已被“选中”的任务将被全部删除。如果使用该特性,您会注意到其中内置了一个删除确认。它要求您在继续操作之前确认删除。

此外,您还会在表单上看到每个区域都有一个 Previous 和 Cancel 按钮。上面的一组按钮与项目信息对应,下面的一组按钮与任务对应。Previous 按钮的出现是因为选择了包括主行导航。Cancel 按钮可使用户返回到 Projects 报表。

更改项目名并单击 Apply Changes

 

17.

更改完成。单击开发人员工具栏中的 Application <n> 链接。

 

返回主题列表

编辑应用程序对象

尽管主/从表单功能齐备,但外观还可进一步改善。在本主题中,您将更改页面标题、区域标题的名称,并更改项目在主报表上的格式。此外,您还将以 PDF 格式打印 Projects 报表。最后,使用拖放功能在 Projects and Tasks 页面上更改项目的顺序。执行以下步骤:

1.

选择 4 - OBE PROJECTS

 

2.

选择 Regions 下的 Report 链接。

 

3.

单击 PROJECT_DEADLINE 旁的 Edit () 图标。

 

4.

在 Column Formatting 下,在 Number/Date Format 域中输入 MM/DD/YYYY 并单击 Apply Changes

 

5.

单击 Apply Changes

 

6.

单击 Page 4 的 Edit () 图标。

 

7.

在 Name 部分中,为 Name 输入 Projects。在 Display Attributes 部分中,为 Title 输入 Projects。单击 Apply Changes

 

8.

单击 Run

 

9.

注意,浏览器中的标题已设为 Projects,PROJECT_DEADLINE 的格式已更改。您会注意到,区域标题仍然为 OBE_Projects。单击开发人员链接区域中的 Show Edit Links

 

10.

单击 Obe 项目区域标题旁的 Edit () 图标。

 

11.

将标题更改为 Projects,然后单击 Apply Changes

 

12.

单击 Cancel 关闭 Page Region 窗口。

 

13.

刷新浏览器以显示刚做的更改。单击开发人员链接中的 Hide Edit Links

 

14.

单击开发人员工具栏中的 Edit Page 4 链接。

 

15.

单击 Projects 区域旁的 Report 链接。

 

16.

单击 Print Attributes 选项卡。

 

17.

在 Enable Report Printing 下拉菜单中选择 Yes,在 Page Attributes 下的 Orientation 下拉菜单中选择 Portrait。然后单击 Page Header 选项卡。

 

18.

为 Page Header 输入 Project Report,并将 Alignment 设为 center。单击 Apply Changes

 

19.

注意,由于您启用了 Report Printing,所以 Print 现在出现在 Report 链接右侧。单击 Run

 

20.

注意报表底部的 Print 链接。单击 Print 链接。

 

21.

单击 Open with 单选按钮,然后单击 OK 以 PDF 格式查看报表。

 

22.

Projects 报表以 PDF 格式显示。

 

23.

单击开发人员工具栏中的 Edit Page 4 链接。

 

24.

单击 > 箭头导航至 Projects and Tasks 页面 (Page 5) 的页面定义。

 

25.

显示 Page 5 的页面定义。要重新排列页面中项目的序列,单击 Items 选项卡。

 

26.

单击 Items 部分中的 Drag and drop 图标。

 

27.

显示 Drag and Drop Layout。您可以使用这个直观的图形布局来编辑、创建或删除该页面中的项目。

 

28.

为了让 Page 5 中的 Project Priority 项显示在 Project Deadline 项之上,可将 P5_PROJECT_ PRIORITY 项拖放到 P5_PROJECT_ DEADLINE 项之上,然后单击 Next>

 

29.

单击 Apply Changes

 

30.

单击 Run

 

31.

注意 Project Priority 域现在是如何显示在 Project Deadline 域上方的。单击开发人员工具栏中的 Application <n> 链接。

 

返回主题列表

创建值列表 (LOV)

另一种改善应用程序外观的方法是创建值列表。在本主题中,您将创建以下 LOV:

EMPLOYEES 显示员工列表的动态 LOV。该 LOV 之后与任务列表中的 Assigned To 列关联。
STATUSES 显示状态列表的静态 LOV。该 LOV 之后与任务列表中的 Status 列关联。
PRIORITIES 显示优先级列表的静态 LOV。该 LOV 之后与 Projects Master 区域中的 Priority 列关联。

执行以下步骤:

1.

单击 5 - Master Detail 页面。

 

2.

在 Shared Components 栏中,单击 List of Values 下的 Create () 图标。

 

3.

对于 Create List of Values,保留默认值 From Scratch 并单击 Next >