如何通过按钮URL在Oracle Fusion中传递用户ID至Oracle APEX
问题描述
我有一个Oracle APEX应用,主页URL为:
https://oracleapex.com/ords/r/leen_test/test3/home
该页面包含一个名为P1_NEW的页面项。
我在Oracle Fusion中创建了一个按钮,用于重定向用户到上述APEX页面,需求是通过URL传递当前Oracle Fusion用户ID到APEX应用,让P1_NEW接收该值,从而筛选显示仅与登录用户相关的数据。
但点击按钮后生成的URL为:
https://oracleapex.com/ords/r/leen_test/test3/home?P1_NEW=
P1_NEW的值为空,原因是该场景下Oracle Fusion不支持#{UserId}这类EL表达式。
请问在Oracle Fusion中,将当前用户ID(或人员ID)通过URL正确传递至Oracle APEX页面并让APEX页面项接收的合规方法是什么?
解决方案
方法1:通过Groovy脚本动态构造跳转URL
在Oracle Fusion的按钮配置中,用Groovy表达式动态拼接包含用户ID的APEX链接,这是该场景下最直接的合规方案:
- 进入按钮的属性编辑界面,找到「行为」分类下的「目标URL」字段
- 输入Groovy表达式获取当前用户信息并拼接URL:
- 若传递登录用户名:
"https://oracleapex.com/ords/r/leen_test/test3/home?P1_NEW=" + adf.context.securityContext.userName - 若传递人员ID(需关联HR人员记录):
def personId = adf.context.securityContext.user.getPrincipal().getAttribute("personId") "https://oracleapex.com/ords/r/leen_test/test3/home?P1_NEW=" + personId
- 若传递登录用户名:
方法2:利用Fusion页面绑定变量传递用户ID
如果需要在多个组件复用用户ID参数,可通过绑定变量实现:
- 在Fusion页面的绑定层(PageDef.xml)中创建绑定变量(例如
bind_userId),设置其值为Groovy表达式(如adf.context.securityContext.userName) - 在按钮的目标URL中引用该绑定变量,格式为
${bind.variableName}:https://oracleapex.com/ords/r/leen_test/test3/home?P1_NEW=${bind.bind_userId}
APEX端接收验证
确保APEX页面的P1_NEW项配置正确:
- 进入APEX应用主页编辑界面,找到
P1_NEW项 - 设置其「来源」为「URL参数」,参数名称填写
P1_NEW - 若APEX启用了会话状态保护,需将
P1_NEW添加到参数白名单中,避免参数被拦截
内容的提问来源于stack exchange,提问作者Malek Raed 2001
相关产品推荐
相关产品推荐

