如何从EBS OAF页面调用APEX页面?求正确URL构建方法
问题描述
在EBS表单个性化中调用APEX页面的配置可正常工作:
Function: XX_APEX_PAGE1 Parameters : ='p=100:9999:::::EBS_SESSION,APEX_PAGE_ID,P5_INVOICE_ID:[EBS_SESSION],5,'||:INV_SUM_FOLDER.ATTRIBUTE15
但在自定义OAF页面中通过OALinkBean构造URL调用时无法正常工作,当前代码如下:
String url = "RF.jsp" + "?function_id=59085" + "&resp_id=" + "50838" + "&resp_appl_id=" + "200" + "&security_group_id=0" + "&lang_code=US" + "&p=100:9999:::::" + "&APEX_PAGE_ID=5" + "&P5_INVOICE_ID=" + attribute15; OALinkBean b = (OALinkBean)webBean.findChildRecursive("OpenInvoice"); b.setTargetFrame("_blank"); b.setDestination(url);
问题根源
你错误地将APEX页面的参数(APEX_PAGE_ID、P5_INVOICE_ID)拆分为独立的URL参数,未遵循表单个性化中p参数的复合拼接格式。同时缺少正确传递当前EBS会话的EBS_SESSION值,这是APX页面验证会话合法性的关键参数。
正确的URL构造方案
- 获取当前EBS会话标识:通过OAF的
pageContext获取当前会话的EBS_SESSION值,替代表单中[EBS_SESSION]的占位符。 - 遵循
p参数的复合格式:p参数的完整结构为p=APEX应用ID:APEX页面ID:::::参数名列表:参数值列表,参数名和对应值按顺序用逗号分隔,比如EBS_SESSION,APEX_PAGE_ID,P5_INVOICE_ID对应的值为[会话ID],5,[发票ID]。 - 动态获取EBS上下文参数:避免硬编码
resp_id、resp_appl_id等值,通过pageContext动态获取可适配不同环境和用户权限。
修正后的代码示例
import java.net.URLEncoder; // 获取当前EBS会话ID String ebsSession = pageContext.getOASessionContext().getSessionId(); // 对动态参数进行URL编码,防止特殊字符破坏URL结构 String encodedInvoiceId = URLEncoder.encode(attribute15, "UTF-8"); // 构造符合要求的p参数内容 String pParam = "100:9999:::::EBS_SESSION,APEX_PAGE_ID,P5_INVOICE_ID:" + ebsSession + ",5," + encodedInvoiceId; // 拼接完整URL,动态获取EBS上下文参数 String url = "RF.jsp" + "?function_id=59085" + "&resp_id=" + pageContext.getResponsibilityId() + "&resp_appl_id=" + pageContext.getResponsibilityApplicationId() + "&security_group_id=" + pageContext.getSecurityGroupId() + "&lang_code=" + pageContext.getLanguage() + "&p=" + pParam; OALinkBean b = (OALinkBean)webBean.findChildRecursive("OpenInvoice"); b.setTargetFrame("_blank"); b.setDestination(url);
注意事项
- URL编码:所有动态参数(如发票ID)必须经过URL编码,防止包含&、=、空格等特殊字符导致URL解析错误。
- 参数结构校验:确保
p参数的冒号、逗号位置与表单个性化中的格式完全一致,APEX应用ID、页面ID需与配置保持统一。 - 权限验证:确认当前用户拥有访问该APEX页面的EBS职责权限,避免因权限不足导致跳转失败。
内容的提问来源于stack exchange,提问作者Bakee
相关产品推荐
相关产品推荐

