You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从应用100免登录设置应用101的Apex主题样式?

问题

我需要从应用ID为100的应用中设置应用ID为101的主题样式,已完成如下配置:

  • 两个应用配置了相同的认证方案,启用工作区级会话共享
  • 两应用均在Runtime API Usage中启用了「修改应用(自身及其他应用)」的选项
  • 通过按钮创建流程,从LOV中获取app_id和theme_style_id

当前使用的页面流程代码:

declare
    l_theme number;
begin
    apex_session.create_session (
    p_app_id   => :P1_APP_ID,
    p_page_id  => 1,
    p_username => 'ADMIN' );
select theme_number into l_theme from apex_application_themes where application_id = :P1_APP_ID and ui_type_name   = 'DESKTOP';
apex_theme.set_current_style (
     p_theme_number => l_theme,
     p_id => :P1_DESKTOP_THEME_STYLE_ID
);
end;

点击按钮时会跳转至应用101的登录页,必须登录后才能应用主题样式,请问有没有办法无需输入凭据即可完成操作?

解决方案

你当前代码调用apex_session.create_session会触发会话切换,导致跳转到目标应用登录页。要实现无登录切换应用并修改主题,需结合工作区会话共享特性,改用apex_session.switch_session_to_application切换会话,而非创建新会话,同时确保操作在同一工作区可信上下文执行。

修改后的代码如下:

declare
    l_theme number;
begin
    -- 切换到目标应用会话,利用工作区会话共享无需重新认证
    apex_session.switch_session_to_application(
        p_app_id => :P1_APP_ID,
        p_page_id => 1
    );

    -- 获取目标应用的桌面主题编号
    select theme_number 
    into l_theme 
    from apex_application_themes 
    where application_id = :P1_APP_ID 
      and ui_type_name = 'DESKTOP';

    -- 设置目标应用的主题样式
    apex_theme.set_current_style(
        p_theme_number => l_theme,
        p_id => :P1_DESKTOP_THEME_STYLE_ID
    );

    -- 切回原应用会话(可选,若需留在原应用操作)
    apex_session.switch_session_to_application(
        p_app_id => 100, -- 原应用ID
        p_page_id => :APP_PAGE_ID
    );
end;

关键说明:

  • apex_session.switch_session_to_application会基于已有会话切换到目标应用,因已启用工作区级会话共享且认证方案一致,无需重新登录。
  • 操作完成后可选择切回原应用会话,避免停留在目标应用。
  • 确保执行代码的用户拥有目标应用管理员权限,且Runtime API权限配置正确(你已启用修改其他应用的选项,此部分无问题)。

内容的提问来源于stack exchange,提问作者apex-user

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 08:35:01