重定向到存储在 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);
我有一个应用程序,其中用户创建了一个表单,为此表单选择了几个负责人并可以编辑此表单。
一提交表单,相应的流程页面就变了。 表格的页面和各自的负责人单独保存在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);