首页 > 解决方案 > 如何正确对页面项目进行 URL 编码 - APEX 21.1

问题描述

RESET_PSWD在表单上有一个按钮,它调用定义了 4 个真实动作的动态动作。

  1. Confirm行动
  2. Execute Server-side Code- PL/SQL 过程来生成新的临时 pswd
  3. Execute Server-side Code- PL/SQL 程序使用生成模式 urlAPEX_PAGE.GET_URL
  4. Execute JavaScript Code- 使用步骤 3 中的 url 打开模式

DA 的目标是生成一个临时密码,建立一个指向模态的 URL(从第 2 步传入新的临时密码),然后导航到模态。由于请求调用之间的特殊字符未正确编码,BetweenStep 2Step 3in 的值被截断。P7_TEMP_PSWD

-- package procedure to get & set url for confirmation modal (Step 3)
PROCEDURE get_feedback_url (
  p_username   VARCHAR2,
  p_temp_pswd  VARCHAR2
) IS

  vcPswdEncoded  VARCHAR2(1000);
  vcURL          VARCHAR2(1000);
  vcValueList    VARCHAR2(1000);

BEGIN

  vcPswdEncoded := APEX_UTIL.URL_ENCODE(p_temp_pswd);
  vcValueList   := p_username ||','|| vcPswdEncoded;

  vcURL := APEX_PAGE.GET_URL(p_page   => '12',
                              p_items  => 'P12_USERNAME,P12_TEMP_PSWD',
                              p_values => vcValueList,
                              p_plain_url => TRUE);

  APEX_UTIL.SET_SESSION_STATE('P7_FEEDBACK_URL', vcURL);

EXCEPTION
  WHEN OTHERS THEN
    csa.rsn_logger.log_error(p_rsn_app => 'RSNUM',
                              p_app_loc => 'rsnum_user.get_feedback_url',
                              p_log_msg => SQLERRM);
END;

我正在尝试在构建 url 之前对 temp pswd 进行 url 编码,但我得到以下结果:

在此处输入图像描述

使用后的值APEX_UTIL.ENCODE_URL是我想要的,但似乎APEX_PAGE.GET_URL也在对值进行编码,所以 '%' 再次被编码。有没有办法选择不GET_URL这样做?我ENCODE_URL首先使用的原因是因为 APEX 默认情况下没有编码“#”(和一些其他字符),这最初是给我造成的问题。

标签: oracle-apex

解决方案


希望有更好的方法来做到这一点,但想出了一个可行的解决方案(需要测试边缘情况,但似乎可行)。我使用以下表达式在模态页面上创建了一个 Before Header 计算:

UTL_URL.UNESCAPE(:P12_TEMP_PSWD)

推荐阅读