去年简单介绍过表单个性化的基础知识,如果使用得当,可以起到很好的控制作用。做内部顾问有一个明显的职业习惯就是对用户不信任,各类输入的信息都是不可信的,必须经过验证才能通过。对于一些关键业务来讲,这确实起到了很好的防范作用。只要存在一处没检查出来,那就等着吧,往往就如洪水泛滥,后面会有的忙。
通过表单个性化来进行关键字段和关键逻辑的控制,肯定少却很多麻烦,但是个性化所支持的事件非常有限,很多情况下,或许我们可以通过及时检查,而不是界面上的输入控制来达到目的。比如采购订单,是支持POST-DATABASE-COMMIT事件的。当所有数据都提交到数据库中后再对业务数据进行检查,如果存在问题就发送预警邮件,通常情况下,这种防范已然足够。但遗憾的是,并不是所有表单都支持POST-DATABASE-COMMIT事件。
现在打开采购订单表单(POXPOEPO.fmb),看看里面的玄机。查看Triggers -> POST-DATABASE-COMMIT:
BEGIN
-- -----------------------------------------------------------
-- OGM_0.0: PO integration with Grants.
-- -----------------------------------------------------------
IF NOT (appcore_custom.pre_event ('POST-DATABASE-COMMIT')) THEN
NULL ;
END IF ;
appcore_custom.post_event ('POST-DATABASE-COMMIT') ;
/* Globalization ecso 5/19/97 */
app_globe.event('POST-DATABASE-COMMIT');
EXCEPTION
when others then
fnd_message.debug ('Exception error on POST-DATABASE-COMMIT');
po_message_c.show;
raise form_trigger_failure;
END;
留意几个appcore_custom的调用,这就是支持个性化事件的奥妙所在。这个事件并不在个性化事件选择列表中,需要手工输入。