Oracle APEX - 显示条件提示

Oracle APEX - displaying conditional prompt

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

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

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

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

如果所有验证都没有问题,那么页面处理将开始。

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

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

根据后续评论,我会推荐以下内容:

  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'(或类似的布尔值)。然后把Items中的item名称(P1_NAME_EXISTS)放到Return属性的action.
  5. 添加第二个动作。将 Action 设置为 Execute JavaScript Code。在 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');
    }
    

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

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