如何在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模态提示框,可给按钮添加动态动作:
- 给保存按钮添加动态动作,事件选择Click。
- 添加「执行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'); } } }); - 创建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
相关产品推荐
相关产品推荐

