You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Apex Oracle中创建带弹窗提示的保存按钮

在Apex页面实现带唯一性校验的保存按钮

1. 创建保存按钮

  • 打开目标页面的页面设计器,在表单区域或页脚位置添加按钮。
  • 设置按钮类型为Submit Page,命名为BTN_SAVE(自定义名称也可,保证辨识度即可)。

2. 实现唯一性校验逻辑

方法一:用Apex内置验证规则(推荐)

  • 进入页面的验证选项卡,点击「创建验证」。
  • 选择「基于SQL的验证」,验证类型设为行级验证。
  • 输入SQL查询语句,检查目标列是否存在重复值(假设表为YOUR_TABLE,要校验的列是UNIQUE_COLUMN,对应表单项为PXX_UNIQUE_COLUMN,XX是页面编号):
    SELECT 1
    FROM YOUR_TABLE
    WHERE UNIQUE_COLUMN = :PXX_UNIQUE_COLUMN
    -- 若支持更新操作,需排除当前行,添加以下条件(假设主键为ID,对应表单项是PXX_ID)
    -- AND ID != NVL(:PXX_ID, -1)
    
  • 设置验证的错误消息为Data already exists,触发时机选择「提交 - 处理前」。

方法二:在PL/SQL处理中自定义校验

  • 进入页面的处理选项卡,创建一个「提交后处理」,类型选PL/SQL代码。
  • 编写PL/SQL逻辑,先校验唯一性,再执行保存,最后返回提示:
    DECLARE
        v_count NUMBER;
    BEGIN
        -- 检查唯一性
        SELECT COUNT(*)
        INTO v_count
        FROM YOUR_TABLE
        WHERE UNIQUE_COLUMN = :PXX_UNIQUE_COLUMN
        -- 更新场景下排除当前行
        -- AND ID != NVL(:PXX_ID, -1);
    
        IF v_count > 0 THEN
            -- 抛出重复提示
            APEX_ERROR.ADD_ERROR(
                p_message => 'Data already exists',
                p_display_location => APEX_ERROR.DISPLAY_LOCATION_INLINE_IN_NOTIFICATION
            );
        ELSE
            -- 执行保存逻辑(插入或更新)
            INSERT INTO YOUR_TABLE (UNIQUE_COLUMN, OTHER_COLUMNS)
            VALUES (:PXX_UNIQUE_COLUMN, :PXX_OTHER_COLUMNS);
            -- 若是更新操作,替换为下面的语句
            -- UPDATE YOUR_TABLE SET OTHER_COLUMNS = :PXX_OTHER_COLUMNS WHERE ID = :PXX_ID;
    
            -- 设置成功提示
            APEX_APPLICATION.G_SUCCESS_MESSAGE := 'Data successfully added';
        END IF;
    END;
    
  • 设置该处理的触发条件为按钮:BTN_SAVE,确保仅点击保存按钮时执行。

3. 配置提示显示方式

  • 若用内置验证规则,Apex会自动在页面顶部通知区显示错误提示;成功提示可在页面属性中开启「成功消息」显示,或通过PL/SQL处理里的APEX_APPLICATION.G_SUCCESS_MESSAGE设置。
  • 若要弹出JavaScript模态提示框,可给按钮添加动态动作:
    1. 给保存按钮添加动态动作,事件选择Click。
    2. 添加「执行JavaScript代码」动作,通过AJAX调用服务器端校验逻辑,再根据结果弹出提示:
      apex.server.process('CHECK_UNIQUENESS', {
          x01: apex.item('PXX_UNIQUE_COLUMN').getValue()
      }, {
          success: function(data) {
              if (data.exists) {
                  alert('Data already exists');
              } else {
                  apex.submit('BTN_SAVE');
                  alert('Data successfully added');
              }
          }
      });
      
    3. 创建AJAX回调处理CHECK_UNIQUENESS,编写PL/SQL返回校验结果:
      DECLARE
          v_count NUMBER;
      BEGIN
          SELECT COUNT(*)
          INTO v_count
          FROM YOUR_TABLE
          WHERE UNIQUE_COLUMN = apex_application.g_x01;
      
          apex_json.open_object();
          apex_json.write('exists', v_count > 0);
          apex_json.close_object();
      END;
      

内容的提问来源于stack exchange,提问作者Itsme mylife

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 12:23:28