Search Form执行Execute Query无明细弹提示的触发器配置咨询
无支付明细查询结果的提示实现方案
针对sales_orders/payment_details查询表单按回车触发Execute Query检索支付明细时,无匹配记录弹出No record found提示的需求,基于Oracle Forms开发的实现配置如下:
所需触发器与对应执行层级
优先选择无侵入方案,不改动原有查询逻辑:
- 触发器名称:
ON-MESSAGE - 执行层级:块级,仅绑定payment_details支付明细数据块
禁止设置为Form级,避免拦截销售订单主块、其他功能块的默认系统消息,干扰其他模块查询逻辑。 - 实现逻辑:
表单原生执行Execute Query后,若查询结果为空会自动抛出消息码为40350的系统提示,在该触发器中拦截对应消息码,替换为自定义提示即可,核心代码如下:IF MESSAGE_CODE = 40350 THEN MESSAGE('No record found'); -- 需中断后续默认逻辑时可添加下一行 RAISE FORM_TRIGGER_FAILURE; END IF;
如果需要在查询前后增加自定义校验规则,可选择第二种实现方式:
- 触发器名称:
KEY-EXEQRY - 执行层级:块级,仅绑定payment_details支付明细数据块
- 实现逻辑:
该触发器会覆盖当前块默认的回车/点击查询按钮触发Execute Query的原生逻辑,手动调用查询语句后判断返回记录数,为空时弹出提示,核心代码如下:-- 执行查询逻辑 EXECUTE_QUERY; -- 判断当前块查询返回的记录总数 IF GET_BLOCK_PROPERTY('PAYMENT_DETAILS', RECORDS_COUNT) = 0 THEN MESSAGE('No record found'); RAISE FORM_TRIGGER_FAILURE; END IF;
避坑说明
- 不要将逻辑写在
POST-QUERY触发器中:该触发器仅在查询到至少1条记录时逐行触发,无查询结果的场景下不会执行,完全无法触发提示逻辑。 - 如果表单已存在Form级的全局
ON-MESSAGE拦截逻辑,需要将块级触发器的执行优先级调高,避免全局逻辑覆盖当前块的自定义提示规则。
内容的提问来源于stack exchange,提问作者Sufi Javed Akram
相关产品推荐
相关产品推荐

