根据登录在 Oracle APEX 5 中分配第一页

gre*_*reg 2 oracle oracle-apex oracle-apex-5

我目前正在构建一个招聘应用程序来替换当前正在使用的应用程序。

我希望能够设置用户根据登录看到的第一页。我目前正在使用 Application Express 身份验证,但我也有一个包含办公室、用户名和用户类型的登录表,因此当用户名在 :APP_USER. 匹配登录表中的用户名,它将拉取用户类型。

因此,如果招聘人员登录,我希望他们转到第 1 页,这是一个招聘仪表板,但如果销售人员登录,我希望他们转到第 20 页,这是一个销售仪表板。

我怎样才能做到这一点?

提前致谢!

Tom*_*Tom 5

就个人而言,我不喜欢改变登录机制。我当然不喜欢在用户实际验证之前根据用户名执行代码。@trent 的例子还不是那么简单,因为它没有实际的选择,但我看到人们根据用户名执行选择以检索一些默认值或设置,只是为了能够调整p_app_page参数。

除非您禁用了深层链接,否则这些参数不会总是重定向到您想要的页面。启用深层链接后,用户将始终转到他请求的页面,而不是p_app_page. 由您决定应用程序的行为方式。尊重深层链接还是总是重定向到某个页面?

我个人更喜欢将重定向放在身份验证方案的后身份验证中。在我看来,获取或设置用户设置在登录页面过程和身份验证代码中都没有位置(它旨在进行身份验证,而不是操作)。

在 post-auth 代码中,我将 select 放在 type 和 alter 上FSP_AFTER_LOGIN_URL。请注意,这将完全忽略深层链接。您可以ELSE省略,但这只会保留非销售人员和招聘人员的深层链接,因为他们将始终登陆他们的仪表板页面。

DECLARE
  l_type persons.person_type%TYPE;
  l_url VARCHAR2(4000);
BEGIN
  SELECT person_type
    INTO l_type
    FROM persons
   WHERE username = :P101_USERNAME;

  l_url := 
  CASE l_type
  WHEN 'SALES' THEN
    'f?p=' || V('APP_ALIAS') || ':SALES_DASH:' || V('APP_SESSION')
  WHEN 'RECRUITER' THEN
    'f?p=' || V('APP_ALIAS') || ':RECRUITER_DASH:' || V('APP_SESSION')
  ELSE  -- go to home page
    'f?p=' || V('APP_ALIAS') || ':HOME:' || V('APP_SESSION')
  END;

  APEX_UTIL.SET_SESSION_STATE('FSP_AFTER_LOGIN_URL', l_url); 
END;
Run Code Online (Sandbox Code Playgroud)