【问题标题】:Oracle APEX - displaying conditional promptOracle APEX - 显示条件提示
【发布时间】:2020-03-12 12:24:31
【问题描述】:

我有一个带有验证的表单,用于检查输入的名称是否已存在于数据库中,当单击提交按钮时,如果验证成功,我想继续插入,如果失败,则显示用户提示,如果用户确定,然后继续更新现有记录。我知道如何一次执行其中一项,但不确定如何有条件地执行此操作。

如果我想显示提示,我可以在单击按钮时使用redirect to URL 并将提示设置为我想要的任何内容,但如何仅在验证失败时显示提示?

【问题讨论】:

  • 你想从用户那里得到什么样的反馈?在他们提供您正在寻找的反馈后会发生什么?
  • 因此,如果指定的名称已经存在(插入时),我需要提示用户是否要更新现有记录,如果用户单击“确定”,那么我可以继续更新现有记录。如果记录不存在,则只需插入

标签: oracle-apex oracle-apex-19.1


【解决方案1】:

根据后续的cmets,我建议如下:

  1. 向页面添加隐藏项,例如 P1_NAME_EXISTS。确保其 Value Protected 设置已禁用。
  2. 将提交按钮的Action更改为Defined by Dynamic Action
  3. 在按钮的点击事件上创建一个动态动作。
  4. 将第一个操作设为执行 PL/SQL 代码 操作。使用具有您希望验证的名称值的项目的名称填充 要提交的项目 属性。然后输入查看名称是否重复所需的PL/SQL 代码。在 PL/SQL 代码中将 P1_NAME_EXISTS 的值设置为“Y”或“N”(或类似的布尔值)。然后将项目的名称 (P1_NAME_EXISTS) 放入操作的 要返回的项目 属性中。
  5. 添加第二个动作。将 Action 设置为 Execute JavaScript Code。在 代码 字段中输入如下代码:

    var nameExists = $v('P1_NAME_EXISTS') === 'Y';
    
    if (!nameExists) {
      apex.page.submit('SAVE');
    } else {
      apex.page.confirm('This name already exists. Would you like to update the existing entry?', 'SAVE');
    }
    

在 PL/SQL 进程更新隐藏项后,JavaScript 代码将检查隐藏项的值。如果该名称尚不存在,则该页面将被提交。如果该名称已存在,则会提示用户。只有当他们点击确定时,页面才会被提交。

如果需要区分,您可以更改提交值的值。

【讨论】:

    【解决方案2】:

    您创建一个声明式验证。如果您的验证条件失败,您将看到您定义的错误,而不是正常处理。

    在这种情况下,您可以根据行的存在进行验证。

    如果所有验证都正常,则页面处理将开始。

    所有计算、验证和过程都可以是有条件的 - 可以是指定的按钮,也可以是通常基于有效 :REQUEST 的条件。

    或者,当值已经存在时,您可以对失败的表进行约束,并使用您的 APEX 错误函数来处理它。当您可以依赖数据库约束时,为什么要进行预检查?

    【讨论】:

    • 我会进行预检查,因为如果某个值已经存在,我需要将其传达给用户并获取他们的输入并根据他们的输入继续操作
    • 通过预检查,我的意思是在插入前的那一刻在 PL/SQL 中。如果您是在提交表单之前谈论立即 UI 响应,请考虑 Dan 的响应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    • 2015-04-02
    • 2021-10-17
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    相关资源
    最近更新 更多