Oracle Forms 6i项级When Validate Trigger问题:光标不动且验证异常
Oracle Forms销售表单触发逻辑异常问题
我创建了销售表单(sales),并在clientid/customerid项上设置了When Validate Trigger,触发代码如下:
if sales_receivedamt > 0 then message('You cant change it'); raise form_trigger_failure; end if;
问题场景
- 通过执行查询(
execute query)调出销售单号605,该记录client_id=700且sales_receivedamt>0 - 用户尝试将
client_id从700改为701时,系统正常弹出提示 - 但将
client_id改回原值700后,系统仍弹出提示,且光标无法移动(即便client_id的必填(required)属性设为"No")
问题原因
原触发器逻辑有缺陷:只要clientid项被编辑过(哪怕改回原始值),触发器就会执行。代码仅判断sales_receivedamt>0,没有区分“用户是否真的修改了client_id的取值”。
解决方案
修改触发器代码,增加新旧值比对逻辑,仅当用户确实修改了client_id且sales_receivedamt>0时,才阻止修改:
if sales_receivedamt > 0 and :sales.client_id <> :system.trigger_old_value then message('You cant change it'); raise form_trigger_failure; end if;
代码说明
:system.trigger_old_value是Oracle Forms内置变量,存储了触发项的原始查询值- 当用户改回原值时,新旧值一致,条件不成立,触发器不会执行提示,光标可正常移动
内容的提问来源于stack exchange,提问作者Sufi Javed Akram
相关产品推荐
相关产品推荐

