去年简单介绍过表单个性化的基础知识,如果使用得当,可以起到很好的控制作用。做内部顾问有一个明显的职业习惯就是对用户不信任,各类输入的信息都是不可信的,必须经过验证才能通过。对于一些关键业务来讲,这确实起到了很好的防范作用。只要存在一处没检查出来,那就等着吧,往往就如洪水泛滥,后面会有的忙。

通过表单个性化来进行关键字段和关键逻辑的控制,肯定少却很多麻烦,但是个性化所支持的事件非常有限,很多情况下,或许我们可以通过及时检查,而不是界面上的输入控制来达到目的。比如采购订单,是支持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的调用,这就是支持个性化事件的奥妙所在。这个事件并不在个性化事件选择列表中,需要手工输入。