重定向到存储在 table 中的页面

Redirect to page stored in table

我有一个应用程序,其中用户创建了一个表单,为此表单选择了几个负责人并可以编辑此表单。

一提交表单,相应的流程页面就变了。 表格的页面和各自的负责人单独保存在table中。 该函数必须检查具有用户 ID 的登录用户是否作为负责人之一输入到 table 中。例如 Responsible1 的 table 包含 ID 所在的 table USERS 的外键。一旦在 table 中找到负责人,该函数就会将用户重定向到相应的页面。

create or replace function forward_user(p_username in varchar2)
return varchar2
is
l_user varchar2(255);
l_branch_page number;

begin
l_user :=p_username;
 /*
    Get the target page depending on entry in table 
  */
select 
 page
 into l_branch_page
from 
FORM_PAGES  
where EXISTS (SELECT f.RESP1 from FORM f
left outer join RESPONSIBLE1 s on s.RESP1=f.RESP1
LEFT OUTER JOIN USERS u on u.ID=s.ID where lower(u.USERNAME) =lower(l_user)  )
OR (fp.RESP2 in
(SELECT f.RESP2 from FORM f 
left outer join RESPONSIBLE2 p on p.RESP2=f.RESP2
left outer join USERS u on u.ID=p.ID where lower(u.USERNAME) =lower(l_user) ))
OR (fp.RESP3 in (select f.RESP from FORM f 
left outer join RESPONSIBLE3 e on e.RESP3=f.RESP3
left outer join USERS u on u.ID=e.ID where lower(u.USERNAME) =lower(l_user) ));

return APEX_PAGE.GET_URL(p_page =>l_branch_page);

exception
  when no_data_found then
   /*Use current page as default page*/ 
   return APEX_PAGE.GET_URL(p_page =>1);
   end ;

然后,当单击“下一步”按钮时,我会在 pl/sql 过程中调用此函数。

DECLARE
x varchar2(4000);
BEGIN
x:=forward_user(:session_user_name);
END;

我已经检查了 sql 语句,它们工作正常,我得到了相应的页面。 该函数也成功编译。 但是当我点击按钮时没有任何反应,用户没有被转发到 table.

中的存储页面

我也尝试在分支进程中调用此函数,行为函数返回 URL(重定向),但也没有任何反应。

有人可以帮我吗?

我的建议是:

  • 创建一个隐藏的页面项目(因为您在第 1 页,我们称它为 P1_URL

  • 您已经有一个在按下提交按钮时运行的进程。它的执行点应该是“Processing”。重写流程,使其填充 P1_URL,例如

    declare
      l_branch_page number;
    begin
      -- your query goes here; I'll redirect to page 4
      l_branch_page := 4;
      :P1_URL := APEX_PAGE.GET_URL(p_page => l_branch_page);
    end;
    
  • 创建一个 After Processing 分支(为什么?所以该过程(见上文)首先填充 P1_URL 项目)。它的行为类型应该是“页面或 URL(重定向)”,它的目标应该是 &P1_URL.(字面意思是 - 符号后跟 P1_URL 后跟点)。

就这些;当您按下提交按钮时,流程将填充 P1_URL 项目,该项目将由分支使用并重定向到所需页面。它会工作吗?它对我有用,我刚刚测试过它。


函数:

function forward_user (p_username in varchar2)
  return varchar2
is
  ...
  return apex_page.get_url(p_page => l_branch_page);
end;

进程:仅一行:

:P1_URL := forward_user(:session_user_name);