【问题标题】:How to add a dynamic action that will redirect to another page by executing JavaScript Code?如何通过执行 JavaScript 代码添加将重定向到另一个页面的动态操作?
【发布时间】:2015-03-20 08:56:53
【问题描述】:

我的 apex 应用程序上有一些按钮,在单击时会执行自定义 PL/SQL 代码。它们有名称 APPLY(确认)和 CHANGE(计数正确)。我需要它,以便当单击 APPLY 时,它重定向到同一页面(实现了 PL/SQL 代码),当单击 CHANGE 时,它重定向到另一个页面(实现了 PL/SQL 代码)。

我尝试通过“按下按钮时”和/或“条件类型:请求 = 表达式 1”为“后处理”设置条件分支,表达式 1 的值等于“应用”或“更改”。我无法以这种方式(令人沮丧地)产生我正在寻找的结果。 APEX 说提交的页面请求采用单击的名称按钮(即单击应用时应用),但我无法做到这一点。

我现在正在寻求将 True Action 添加到我的动态操作中以进行 APPLY 和 CHANGE(当前分别是“执行 PL/SQL 代码”和“提交页面”),它执行重定向到所需页面的 Javascript 代码应用程序。

我认为代码会使用这样的东西

"apex.navigation.redirect('f?p=928:35:4081364075246::NO:::');"

在这种情况下,第 35 页是我希望更改按钮重定向到的页面。

我并不像我希望的那样精通 JavaScript,因此,如果我在这方面的任何方法上提供任何帮助,我将不胜感激。

【问题讨论】:

  • 如果你想要一个条件分支,我会使用一个基于请求条件的分支。如果这对您不起作用,我会首先确定原因(例如,分支的顺序是否正确?)。
  • 我尝试了很多次来解决这个问题。在处理后使用一个分支(用于测试),我将分支设置为在 Request = APPLY 处重定向到所需的页面。但是,它似乎不起作用,因为当我单击按钮时,它会停留在同一页面上。我也尝试取消“提交页面”动态操作,这导致 PL/SQL 代码正确触发(如果您刷新页面并查看更改,则会显示)但根本没有页面重定向。
  • 仍然不清楚为什么您需要任何动态操作。

标签: javascript oracle oracle-apex


【解决方案1】:

我终于找到了如何做到这一点。按钮的请求(特别是按钮的动态操作)未设置为按钮名称,因为“提交页面”真实操作的“请求/按钮名称”未设置为按钮名称。

确保在动态操作中将此信息添加到“设置”下。分支应放置在“提交:在处理之前”,条件为“请求 = 表达式 1”,表达式 1 等于按钮名称!

【讨论】:

    【解决方案2】:

    在最近的一个项目中,我需要在用户单击模型页面上的“保存”按钮后进行页面重定向。该按钮有一个包含 3 个独立操作的动态操作:

    • 执行 PL/SQL
    • 提交页面
    • 关闭对话框

    Submit PageClose Dialog 之间,我添加了一个Execute Javascript 操作,用于单击我添加到页面中的隐藏按钮。

     document.getElementById("BTN_ID").click();
    

    隐藏按钮被设置为在Behavior -> Action -> Redirect to Page in Application中重定向用户,页面@ 987654325@.

    我将带有#BTN_ID{visibility:hidden;} 的按钮隐藏在页面的CSS 内联部分中。

    这行得通。

    【讨论】:

    • 在提交页面和关闭对话框操作之间是我要输入的内容。
    • 请编辑答案以提供更正,不要将它们放在 cmets 中。
    【解决方案3】:

    以下是我解决类似情况的方法: 我希望第 2 页的 DELETE 按钮除了删除显示的行之外,还可以对其他表执行删除,然后返回第 1 页:

    • 删除了现有的 DELETE 按钮。
    • 创建的新按钮包含:按钮名称=DELETE、标签=删除、操作=提交页面
    • 创建了一个提交后流程分支:名称=删除并返回第 1 页,执行点=提交后,行为类型= 页面或 URL,目标=第 1 页,高级请求=DELETE,服务器端条件=按下按钮时=DELETE, Type=PL/SQL 函数体,

    然后是 PL/SQL 函数体:

    声明

       lv_msg   varchar2(2000) := null;
    
    begin
       pz_delete_related_records(:P2_KEY1, :P2_KEY2, lv_msg);
    
       DELETE FROM BASE_TABLE
       WHERE KEY1 = :P2_KEY1
       AND   KEY2 = :P2_KEY2;
    
       RETURN TRUE;
    
    end;
    

    【讨论】:

      猜你喜欢
      • 2016-02-04
      • 1970-01-01
      • 2011-06-18
      • 2022-11-15
      • 1970-01-01
      • 1970-01-01
      • 2019-10-06
      • 1970-01-01
      • 2017-09-05
      相关资源
      最近更新 更多