我要提问
ARTICLE DETAIL

资讯详情

前沿编程新知与开发实战干货的深度解读。

Oracle APEX 4.x 实战:从安装配置到 EBS 集成避坑指南

Oracle APEX 4.x 实战:从安装配置到 EBS 集成避坑指南 简介面向Oracle数据库开发者与低代码平台学习者的APEX实战指南帮助读者从零搭建环境并逐步掌握企业级Web应用开发。内容以一份doc文档承载压缩包约8.11MB围绕系统探究与开发两条主线展开涵盖APEX简介、环境搭建、账户与权限管理、开发概要、页面布局与美化、常用控件、Report增删改、文件上传下载、CSS与JS客户端脚本、图表报表可视化并延伸至插件应用、部署、调试技巧与API以及APEX与EBS集成的配置方法。目录按章节层层递进便于按模块检索与对照实践。目前已有1594人学习适合希望系统梳理APEX知识体系、提升开发效率与质量的初中级开发者参考。1. 从一份 2014 年的 APEX 开发笔记说起它到底能帮你解决什么如果你手上有一套 Oracle EBS又被要求“两周内做一个能查、能改、能上传附件的 Web 页面”大概率会撞上同一个问题EBS 的 Form 个性化改不动JSP 又太重中间那层快速开发工具到底选谁。这份《Oracle APEX深入浅出》就是在这个场景下写出来的实操笔记成稿于 2013 到 2014 年围绕 Oracle Application Express 4.x 展开从卸载旧版、建表空间、装 APEX、配嵌入式 PL/SQL 网关一路写到 Workspace 账户体系、页面 Grid 布局、控件属性、Tabular Form 多行增删改、文件上传下载、CSS/JS 嵌入、图表报表最后落到 EBS 里调用 APEX 页面。它不是官方手册的翻译而是一个人踩完坑之后留下的操作记录适合两类人一类是要在 Oracle 数据库上快速交付内部管理页面的开发者另一类是需要在 EBS 环境里做轻量 Web 扩展的从业者。下面我按“装得上、配得对、改得动、避得开”的顺序把它拆开讲。2. 环境搭建与账户体系从卸载旧版到 Workspace 三层用户这一章是整个资源里信息密度最高的部分因为 APEX 的安装失败绝大多数不是安装脚本的问题而是旧版本残留和账户授权链没理清。原文用的环境是 RedHat Oracle 11g 虚拟机安装包为 APEX 4.2.5采用嵌入式 PL/SQL 网关Embedded PL/SQL Gateway而不是 APEX Listener 或 mod_plsql。这个选型理由很实际11g 自带的嵌入式网关不需要额外装 HTTP 服务器配完就能用http://server:8888/apex访问适合内网单机验证和中小规模部署代价是它跟数据库实例绑死网关参数调优空间小高并发场景下不如独立监听器。2.1 安装前的清场为什么必须先卸掉 11g 自带的 APEX 3.0Oracle 11g 数据库自带 APEX 3.0直接覆盖安装 4.2.5 会出现两套 APEX 对象并存、版本元数据打架的情况。原文的做法是先跑卸载脚本再清空 apex 目录然后才建表空间。这一步的顺序不能反因为卸载脚本本身依赖当前 APEX 版本的同义词和包。-- 建独立表空间避免 APEX 对象和业务表混在 SYSTEM/USERS 里 CREATE TABLESPACE apex01 DATAFILE /d01/oracle/[SID]/db/apps_st/data/apex01.dbf SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE 1000M;这段 DDL 里三个参数值得说清楚SIZE 100M是初始大小APEX 元数据加语言包大概几十兆起步100M 够装但不够长期跑AUTOEXTEND ON NEXT 100M是每次扩展步长设太小会导致频繁扩文件设太大在磁盘紧张时浪费MAXSIZE 1000M是上限内网应用一般够用如果要做多 Workspace 多应用建议直接给到 2G 以上。数据文件路径要按实际$ORACLE_HOME和 SID 替换原文用的是 EBS 环境的 apps_st 目录结构普通库换成自己的路径即可。安装文件上传到$ORACLE_HOME下解压到/apex目录然后以 DBA 身份执行安装脚本。安装完成后有两件事必须做一是改 ADMIN 密码要求大小写字母加数字加特殊符号二是解锁APEX_PUBLIC_USER和ANONYMOUS账户。-- 解锁匿名用户和公共用户否则登录页直接 404 或认证失败 ALTER USER ANONYMOUS ACCOUNT UNLOCK; ALTER USER APEX_PUBLIC_USER ACCOUNT UNLOCK;ANONYMOUS负责未登录状态的页面渲染APEX_PUBLIC_USER是 APEX 引擎连接数据库的公共账户这两个没解锁表现就是页面能打开但登录转圈或者直接报认证错误。原文在这里踩了一个很典型的坑装完访问apex_admin输入 ADMIN 密码始终认证不过改密码、重启库都无效最后查出来是 3.0 版本的遗留用户还在授权校验走了旧链路。把遗留用户DROP USER ... CASCADE掉之后才正常。这个排查思路值得记住——APEX 的认证失败先看用户表里有没有历史版本残留而不是先怀疑密码。2.2 嵌入式网关配置与 404 排查嵌入式网关的配置核心是几个初始化参数和 ACL 授权。原文提到要给APEX_040200数据库用户授予访问任意主机的 connect 权限这在 11g 的 ACL 机制下是必须的否则网关进程起不来或者请求被拒。-- 11g 下给 APEX 版本用户开网络访问 ACL按实际版本号替换 APEX_040200 BEGIN DBMS_NETWORK_ACL_ADMIN.CREATE_ACL( acl apex_acl.xml, description ACL for APEX embedded gateway, principal APEX_040200, is_grant TRUE, privilege connect); DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL( acl apex_acl.xml, host *); COMMIT; END; /principal要跟实际安装的 APEX 版本用户对上4.2.5 对应APEX_040200装别的版本这个用户名会变写错等于没授权。host *是放开所有主机内网环境可以接受如果安全要求高就改成具体主机名。配完之后如果访问http://server:8888/apex/apex_admin报 HTTP 404先确认网关进程是否在跑原文给的处理是检查并启动对应作业再不行就看数据库的XDB和网关配置是否被 EBS 的其他组件覆盖。提示虚拟机环境装完 APEX 后原文建议把虚拟机状态设为挂起而不是关机下次恢复不用重配网关参数。这个习惯在一次性验证环境里很省事但生产环境不要这么干挂起状态下的数据库连接和监听状态不可控。2.3 Workspace、Developer、App End User 三层账户怎么分APEX 的账户模型是三层ADMIN 是实例级超级管理员负责建 Workspace 和指定 Workspace 管理员Workspace 管理员负责在本工作空间内建开发用户和最终用户Developer 才是真正做页面的人。原文的示例是建一个名为 jjl 的 WorkspaceSchema 指向 EBS 的 apps 用户然后在这个 Workspace 下分别建开发用户和 App 最终用户。这个分层的实际意义在于权限隔离Developer 只能改自己 Workspace 里的应用碰不到别的 WorkspaceApp End User 只能访问被授权的应用进不了开发界面。跟 EBS 集成时Workspace 的 Schema 选 apps 意味着 APEX 页面里的 SQL 直接能查 EBS 的基表和视图省掉建同义词和授权的麻烦但反过来也意味着 APEX 开发用户对 EBS 数据有较大访问面生产环境要配合 Application 级的授权方案收窄。角色创建者职责典型误用ADMIN安装时自动生成建 Workspace、管 Workspace 管理员拿 ADMIN 直接做开发Workspace AdminADMIN建开发用户、最终用户把开发用户当最终用户用DeveloperWorkspace Admin建 Application、页面、控件跨 Workspace 引用对象App End UserWorkspace Admin访问已发布应用被授予开发权限3. 页面布局与控件Grid Layout 背后的 TABLE 语义APEX 4.2 相比 4.1 在布局上最大的变化是 Region 的 Grid Layout 可以逐级配置原文作者对此的评价很直白——4.1 里 Column 属性是全局的改一个区域影响一片4.2 里子区域可以各自配 Grid复杂布局才做得动。理解这套配置的关键是把 APEX 的 Grid 参数翻译成 HTML 的 table 结构否则你永远在“配了但没生效”里打转。3.1 Start New Grid、Start New Row、Column 三个参数的真实含义原文用一张 TABLE 结构图把这几个参数讲透了Start New Grid Yes表示当前对象另起一个TABLE不继承上一个表格的列结构Start New Row Yes表示换行对应TRColumn n表示落在当前行的第 n 列对应TD。三个参数组合起来就是手写 table 布局的可视化版本。以原文的 Search1、Search2、Search3 三个区域为例它们属于同一个 TABLEColumn 依次为 1、2、2Start New Grid 依次为 Yes、No、NoStart New Row 依次为 Yes、No、Yes。翻译过来就是Search1 开新表、第一行第一列Search2 不换行、落在第一行第二列Search3 换行、落在第二行第二列。这种配置方式在需要精确对齐表单字段时比拖拽布局可靠因为它是确定性的不会因为主题切换而错位。-- 原文示例中用于校验和动态动作的测试表 CREATE TABLE jjl_test ( user_id VARCHAR2(50), resp_id VARCHAR2(50), resp_appl_id VARCHAR2(50), login_name VARCHAR2(50), login_count NUMBER, login_date DATE ); INSERT INTO jjl_test VALUES (123, , , , NULL, NULL);这张表在示例里承担两个作用一是作为 Validation 的Exists条件数据源二是作为后续 Tabular Form 的数据基础。字段设计很粗糙但足够演示“条件校验依赖另一张表是否存在记录”这个模式。实际项目里这张表应该换成业务主表user_id 123这种硬编码也要换成绑定变量或页面项引用。3.2 控件属性、事件、校验三件套的配置顺序原文把控件能力拆成三块属性宽度、对齐、必输、条件显示、只读条件、默认值、格式掩码、事件Dynamic Action 的条件与真假分支、校验触发按钮、条件类型、表达式、错误显示位置。这三块的配置顺序有讲究先定属性再挂事件最后加校验因为校验的触发按钮依赖按钮先存在Dynamic Action 的隐藏/显示目标依赖区域先存在。原文给的实例很具体点 Search2 按钮时校验P1_X_TEXT是否为空前提条件是jjl_test表里存在user_id123的记录页面加载时把日期选择器DATA赋值为当前日期P2_X_TEXT不为空时隐藏new search2区域为空时显示。三个需求分别对应 Validation、Page Load 型 Dynamic Action、Change 型 Dynamic Action。-- Validation 的 Function Returning Boolean 写法 BEGIN IF :P1_X_TEXT IS NOT NULL THEN RETURN TRUE; END IF; RETURN FALSE; END;这段校验函数的逻辑是“非空即通过”配合Condition Type Exists (SQL query returns at least one row)和select 1 from jjl_test jt where jt.user_id123实现的是“只有特定数据存在时才执行这条校验”。参数说明:P1_X_TEXT是页面项绑定变量冒号前缀不能省返回布尔值 true 表示校验通过false 触发错误消息。错误消息显示位置和关联项在 Validation 属性里配配错的表现是报错弹窗出现了但定位不到具体字段。Page Load 型 Dynamic Action 的设置值动作原文用的是Set Type SQL StatementSQL 为select sysdate from dual影响元素选Item(s)并指定DATA。这里容易翻车的是 Selection Type 选错——选成Region或jQuery Selector都不会作用到页面项上表现就是页面加载完日期还是空的。3.3 Tabular Form 多行增删改基于视图而不是表的开发模式原文明确说 APEX 的 Tabular Form 开发“类似于 EBS Form 开发也是基于视图去开发”。这个类比很准确EBS Form 的块基于数据库块/视图APEX 的 Tabular Form 数据源也建议用视图把多表关联的字段拼到一个视图里页面只面对视图增删改的逻辑放在 Process 里写 PL/SQL。CREATE TABLE jjl_class ( class_id NUMBER, class_name VARCHAR2(50) ); CREATE OR REPLACE VIEW jjl_class_test2 AS SELECT jt.user_id, jt.resp_id, jt.resp_appl_id, jt.login_name, jc.class_name FROM jjl_test2 jt, jjl_class jc WHERE jc.class_id jt.class_id;视图把jjl_test2和jjl_class通过class_id关联页面上的 Tabular Form 直接绑这个视图用户改class_name和login_name时Process 里做两件事校验class_name在jjl_class里是否存在不存在就报错存在则把勾选记录插入另一张表。这个模式的好处是页面层不用关心表结构坏处是视图不可更新时所有 DML 都得手写 Process原文的示例正是后者。Process 的配置要点触发点是Apply Change按钮处理类型选 PL/SQL 匿名块里面用APEX_APPLICATION.G_F01之类的数组遍历勾选行。原文没有贴完整 Process 代码但按这个场景的常见做法遍历 Tabular Form 行用APEX_APPLICATION.G_F0x配合APEX_APPLICATION.G_F01勾选列判断哪些行被选中再逐行做存在性校验和插入。这里最容易踩的坑是数组下标和页面列顺序对不上改一列就得同步改 Process 里的G_F编号。4. 避坑与排查五个装完才发现的坑4.1 登录页认证不过改密码重启都无效现象装完 APEX 4.2.5访问apex_admin输入 ADMIN 密码始终认证失败改密码、重启数据库均无效。原因11g 自带的 APEX 3.0 遗留用户还在认证链路走了旧版本的用户校验。解决查用户表确认是否存在旧版本 APEX 用户确认后DROP USER ... CASCADE清掉再重装或重新授权。原文作者在这一步还误删了APEX_040200导致只能重装所以删之前务必确认用户名和版本对应关系。4.2 访问 apex 报 HTTP 404现象安装脚本全部执行成功访问http://server:8888/apex/apex_admin返回 404。原因嵌入式网关进程没起来或者 ACL 授权没生效导致网关拒绝请求。解决先确认网关作业状态并启动再检查APEX_040200的 ACL 授权是否包含connect权限最后确认监听端口 8888 没有被防火墙或别的进程占用。4.3 Grid Layout 配了但页面没变化现象Region 的 Column、Start New Row 改了页面布局纹丝不动。原因Start New Grid没设成 Yes当前区域还在继承上一个 TABLE 的列结构改 Column 只是改列号不改变表格边界。解决需要独立布局的区域先把Start New Grid设为 Yes再配 Column 和 Start New Row同一表格内的区域保持Start New Grid No。4.4 Dynamic Action 隐藏区域不生效现象P2_X_TEXT输入值后目标区域没有隐藏。原因Selection Type 选错或者 When Condition 配成了is null而不是is not null。解决True Actions 和 False Actions 分别对应条件成立和不成立隐藏动作要放在 True Actions 里Selection Type 选Item(s)并确认页面项名称拼写与页面一致。4.5 Tabular Form 的 Process 只处理了第一行现象勾选多行点 Apply Change只有第一行被处理。原因Process 里没有遍历APEX_APPLICATION.G_F01勾选数组直接取了单值。解决用FOR i IN 1..APEX_APPLICATION.G_F01.COUNT LOOP遍历勾选行用APEX_APPLICATION.G_F01(i)取勾选标记再按行号取其他列的值注意各列数组的下标要对应同一行。5. 从 APEX 到 EBS集成调用与部署验证的收尾技巧原文最后一章讲的是 EBS 中配置 APEX 页面调用这是整份资源里最“落地”的部分因为前面所有开发最终都要回到 EBS 菜单里能被点开。集成的基本思路是在 EBS 里配一个 Function指向 APEX 页面的 URL用户从 EBS 菜单点进去APEX 页面通过 URL 参数接收 EBS 传来的上下文比如用户 ID、职责 ID再在 APEX 侧做认证和授权匹配。原文没有展开 URL 参数的具体拼法但按这个场景的常见做法Function 的 Web HTML 里写a hrefhttp://server:8888/apex/f?pAPP:PAGE:SESSION::::P1_USER_ID:USER_ID这类形式把 EBS 的USER_ID传过去。部署验证我一般按三步走第一步在 APEX 里用 Developer 账户直接访问页面确认功能和数据都对第二步用 App End User 账户访问确认授权方案没有把正常用户挡在外面第三步从 EBS 菜单点进去确认 URL 参数传递和会话建立没问题。第三步最容易出问题的是认证方案选型——原文提到 APEX 自带 7 种授权登录机制集成场景常用Application Express Accounts和HTTP Header Variable前者要用户再输一次 APEX 密码后者依赖 EBS 传过来的头变量做免登选错的表现就是用户从 EBS 点进来还要再登录一次。验证步骤验证账户检查点失败典型表现页面直访Developer页面渲染、数据源、Process区域空白或报 ORA 错误授权访问App End User认证方案、页面权限跳登录页或 403EBS 菜单调用EBS 业务用户URL 参数、会话、免登参数丢失或重复登录还有一个容易被忽略的点是文件上传下载。原文把它单列一节说明在 EBS 集成场景里附件功能是刚需。APEX 的文件上传走APEX_APPLICATION_TEMP_FILES下载走APEX_UTIL或自定义的sys.htp.p输出流存储位置可以选数据库 BLOB 或文件系统。选数据库 BLOB 的好处是跟 EBS 备份策略一致、不用额外配目录权限坏处是大文件会撑大表空间选文件系统则要处理目录授权和清理。我一般建议附件量小的走 BLOB量大的走文件系统加定期归档。从那以后我每次做 APEX 与 EBS 集成都会先把“卸载旧版、解锁公共用户、ACL 授权、认证方案选型”这四件事列成检查单走一遍因为这几个点任意一个漏掉表现都是“装完了但用不了”排查起来又都不在安装日志里。希望这份拆解能帮到正在 EBS 环境里找轻量 Web 方案的你资源里的安装脚本、Grid 配置示例和 Tabular Form 视图写法都可以直接拿去改。本文还有配套的精品资源点击获取
返回列表