APEX开发实践(25)- APEX & EBS集成开发指导

本文参考了Oracle官方的文档《Extending Oracle E-Business Suite Release 12.2 using Oracle APEX》(2024年11月更新的5.1版本)。

 

版本要求

Oracle EBS: 12.2.7 或以上版本

Oracle DB:19c 或以上版本

APEX:24.1 或以上版本

ORDS:24.3 或以上版本

 

基本概念

APEX可以直接对EBS的数据进行开发,创建基于EBS数据的应用。可以通过数据库视图访问EBS的APPS schema,并查询(SELECT)数据。但不能对EBS的数据直接进行增删改(INSERT,DELETE,UPDATE)的操作。这在EBS中是绝对禁止的。APEX只能通过EBS提供的开放的公共的API接口对EBS数据进行增删改的操作。

 

APEX的EBS扩展可以无缝集成EBS的验证和授权。APEX应用可以使用EBS的登录验证。APEX包括了预设置的验证机制,通过HTTP头的变量使用Oracle访问管理(Oracle Access Manager - OAM)。如果EBS使用了OAM做登录验证,APEX和EBS的统一登录验证就变成一件很简单的事情。否则,需要在EBS的APPS schema里写APEX用户访问的验证函数。

 

APEX与EBS集成的架构

应用服务器架构

Oracle建议分别单独部署APEX的应用服务器和EBS的应用服务器(如下图)。一套用于部署ORDS,另一套用于部署EBS。

image

 

 

数据库架构

Oracle建议在EBS的数据库上配置APEX(如下图)。在EBS数据库中将配置两个schema。一个是APEX_230100,用于部署APEX引擎。另一个是XX_APEX。给XX_APEX授权访问EBS的数据后,APEX应用可以通过XX_APEX访问EBS的数据。Oracle禁止APEX的应用直接访问EBS的schema APPS。

image

 

 

环境准备

APEX版本:24.2

ORDS版本:23.2.2。(官方建议24.3或更高版本)

地址:http://ds.jasolar.com:8080/ords/appsdev/

Oracle RDBMS : 19.0.0.0.0

Oracle Applications : 12.2.7 +相对应的补丁

地址:http://jjl1u.jasolar.com:8000/OA_HTML/AppsLogin

 

补丁要求

  • Oracle Weblogic补丁:10.3.6.231017的PSU,补丁号35586779(注:由于EBS12.2.7已经进入Extend Support,不能直接从Oracle支持官网下载);
  • Oracle Application框架补丁:R12.FWK.C,补丁号36839803;
  • Oracle EBS补丁:
    • R12.AD.C,补丁号:36119925
    • R12.TXK.C,补丁号:36117775
    • R12.ATG_PF.C,补丁号:36034949

所有的补丁下载连接:

ERP_APEX集成开发所需补丁

打完这些补丁之后,要用SQLPlus执行ADAPEXSCHREG.sql把APEX用户注册到ERP中。这个sql脚本在$AD_TOP/patch/115/sql/目录下。依照APEX EBS的命名规则,本案例中,APEX的用户为XX_APEX。执行的脚本示例如下:

sqlplus apps/<APPS password> @$AD_TOP/patch/115/sql/ADAPEXSCHREG.sql XX_APEX

 

验证示例

验证的目的是通过APEX一个表单,去更新APPS用户里的用户数据(邮箱)。如前述,APEX的用户是XX_APEX,不能直接对APPS用户里的表进行增删改的操作。在ERP里用APPS创建一个叫xx_apex_ebs_user的视图,然后调用一个叫xx_apex_sample_apis的程序包。APPS用户下创建这张视图和程序包如下:

 

xx_apex_ebs_user视图:

注:视图仅仅是为了XX_APEX的表单读取apps.fnd_user表的用户数据。

CREATE OR REPLACE VIEW xx_apex_ebs_user
( user_id
, user_name
, start_date
, end_date
, description
, email_address
, user_guid
, person_party_id
, CONSTRAINT APEX_EBS_USER_pk
PRIMARY KEY (user_id)
RELY DISABLE NOVALIDATE
)
AS
SELECT user_id
, user_name
, start_date
, end_date
, description
, email_address
, user_guid /* Used for Single-Sign On */
, person_party_id /* FK to party information */
FROM fnd_user;

GRANT READ ON xx_apex_ebs_user TO XX_APEX;
GRANT READ on fnd_responsibility_vl TO XX_APEX;

 

xx_apex_sample_apis

注:程序包也不是直接更新apps.fnd_user表的数据,而是通过调用fnd_user_pkg.updateuser()来更新。

create or replace package xx_apex_sample_apis as
function apex_validate_login (  p_username   in  varchar2
                              , p_password   in  varchar2
                             ) return boolean;

procedure apex_update_email (  p_username        in varchar2
                             , p_owner           in varchar2
                             , p_email_address   in varchar2
                            );

end;
/

create or replace package body xx_apex_sample_apis as
function apex_validate_login (  p_username   in  varchar2
                              , p_password   in  varchar2
                             ) return boolean
is
begin
    return fnd_user_pkg.validatelogin(p_username, p_password);
end apex_validate_login;

procedure apex_update_email (  p_username        in varchar2
                             , p_owner           in varchar2
                             , p_email_address   in varchar2
                            )
is
begin
    wf_event.setdispatchmode('async');
    fnd_user_pkg.updateuser(x_user_name=>p_username, x_owner=>p_owner, x_email_address=>p_email_address);
end apex_update_email;

end xx_apex_sample_apis;
/
show errors

grant execute on xx_apex_sample_apis to XX_APEX;

 

APEX端的表单创建不在本文详述,参考P31~P32页关于获取用户信息的设置和操作。

  • 在APEX的共享组件里创建3个应用级的项:EBS_APP_ID,EBS_RESP_ID,EBS_SEC_GROUP(用户ERP和APEX之间传参);
  • 在APEX的页中,在呈现前(Pre_Rendering)创建一个处理,获取用户信息;
begin
for c1 in (select responsibility_name
, description
from apps.fnd_responsibility_vl
where application_id = :EBS_APP_ID
and responsibility_id = :EBS_RESP_ID
) loop
:P4_RESPONSIBILITY_NAME := c1.responsibility_name; //注意修改项ID
:P4_RESP_DESCRIPTION := c1.description; //注意修改项ID
end loop;
exception
when others then
null;
end;

 

定义APEX的验证和授权

在前面执行注册APEX用户的脚本时候,会创建一个fnd_apex的package,里面包括两个函数:authentication(验证)和authorization(授权)。

 

验证

在应用-》共享组件-》验证方案中创建一个调用apps.find_apex.authentication()的定制(CUSTOM)的验证方案。

image

 

 

在“编辑应用程序定义”的“安全性”中要选择创建的定制验证方案。

image

 

 

在“编辑应用程序定义”的“用户界面”的“登录URL”中设置指向EBS的用户登录连接http://jjl1u.jasolar.com:8000/OA_HTML/AppsLogin

image

 

 

授权

Oracle建议在应用层级定义一个权限方案。另外,还应该为应用程序定义会话状态保护,以防止用户通过修改URL来访问页面。

在应用-》共享组件-》授权方案中创建一个调用apps.find_apex.authorization()的权限方案。留意方案类型为“返回布尔值的PL/SQL函数。验证授权方案为“每次页访问一次”。

image

 

 

在页面中设置授权

在页面属性的安全性设置里,选择上一步配置好的授权方案,并选择“页需要验证”。另外,根据授权的具体情况设置“页访问保护”是否“无限制”。“无限制”意味着以使用具有或不具有会话状态参数的 URL (不必具有校验和) 请求页。

image

 

 

启用深链接和超时设置

为了确保页面在没有活动(超时)的时候退出会话状态并要求重新登录,在应用-》共享组件-》安全性-》会话管理中启用深链接。在“会话超时URL”和“会话空闲超时URL”输入EBS的登录URL。

image

 

 

启用APEX应用的嵌入模式

允许APEX应用嵌入到EBS中。在“安全性”-》“浏览器安全”中设置:“嵌入到框架中”:允许相同来源;“HTTP响应头”:Content-Security-Policy: frame-ancestors ‘self' https://<EBS_hostname>:<port>;

注:这里必须要加上’self‘。否则在嵌入EBS的APEX页面打开模式对话框的时候会报拒接连接的错误,打不开页面。

image

 

 

 

在EBS里注册APEX应用(页面)

配置APEX URL

用SYSADMIN身份登录EBS。在左侧导航菜单选择“功能管理员,标准”-》“主页”。在主页中按照下图路径编辑APEX的URL输入APEX的访问路径。

image

 

 

添加EBS功能

在同一个页面,按照下图路径创建APEX功能(本示例的功能是更新用户邮箱)

image

 

 

image

 

注:这里输入的代码是创建此功能的EBS内部名称。一经创建,不能再更改。

 

点击右上角的“继续”。选择APEX页面的布局方式,APEX 工作区,APEX的应用以及页面。可以在下面的“HTML调用”中检查选择的appid和pageid是否正确。另外,可以点击绿色“+”添加EBS和APEX之间的传参。所有操作确认后点击右上角的“提交”。

image

 

 

添加成功后,可以搜索到添加好的功能。

image

 

 

添加EBS菜单

在同一个页面,按照下图路径创建EBS菜单。

image

 

 

把上一步创建功能(函数)关联到新建的菜单中。

image

 

 

添加成功后,可以搜索到添加好的菜单。

image

 

 

添加EBS责任

在左侧导航菜单先择“用户管理”-》“责任”

添加责任信息如下图。注意:

  • 菜单:选择上一步添加的菜单;
  • 应用产品:选择“应用对象程序库”;
  • 用于产品:选择“Oracle Self Service Web Applications”;
  • 下面的“组”中,数据组名:选择“标准”;应用产品:选择“应用对象程序库”;

image

 

 

添加EBS用户

在同一个页面,选择“用户”。在下面的“注册”选择“用户账户”,点击开始。

image

 

创建用户之后,在右上角点击“分配职责”。给这个新建用户分配上一步创建的职责。

image

 

 

最后一步

在左侧导航菜单选择“系统管理员”-》“并发”-》“请求”。在弹出的窗口选择“提交新请求”。搜索并选择“编译安全菜单”(注:留意对应的应用产品是“应用对象程序库”),然后提交。

注:这一步必须在微软的Edge浏览器操作。打开页面之后把浏览器设置为“在Internet Explore模式下重新加载”。如果是第一次操作还要根据提示下载安装oaj2se JAVA运行环境。

image

 

 

完成后,可以查找提交的请求的阶段和状态。

image

 

 

在左侧导航菜单选择“功能管理员,标准”-》“主页”。在主页中按照下图路径清除缓存。

image

 

 

验证功能

先来看ja057965这个用户现在的邮箱是空的。下面要通过嵌入在ERP里的APEX表单修改用户的邮箱。

image

 

用新建的ja057965用户登录ERP。可以看到APEX的表单。同时可以看到ERP的用户和APEX的用户是一致的。

image

 

 

填入用户邮箱并提交。

image

 

 

回到ERP的用户管理,可以看到ja057965用户的邮箱已更新。

image

 

posted @ 2025-08-28 11:34  搬砖的徐大爷  阅读(111)  评论(0)    收藏  举报