• EBS Form个性化的工作原理


    Form的个性化是EBS的比较好用的一个东西。好像很少人研究它的工作原理,都是直接用。最近有个同事问我问题,说他在个性化编写的代码无效果。解决之后,才发现,原来传说中的EBS的Form的个性化是这样子实现的。(题外话,了解工作原理之后,我可以编写一些实用的个性化作为补充了(要修改包APP_STANDARD.EVENT)。因为现在个性化可用的触发器实在是太少了。以后再说。)
    说正题。

         简而言之,Form个性化的工作原理是触发器代码的“添加”。那添加在哪里呢?什么时候会被执行?是这样子的,我们在个性化编写的条件(包括触发器名称,条件等等),系统先会自动将对应的代码“添加”在APP_STANDARD.EVENT对应的触发器代码里面(其实是APP_STANDARD.EVENT会寻找个性化里面的代码去执行),然后Form级触发器调用代码的时候,会自动执行对应的触发器的增加在个性化里面的代码,从而达到个性化实现效果的目的。

    举个简单的例子。我在个性化WHEN-VALIDATE-RECORD编写了一堆条件。
    在Form打开的时候,做对应的操作之后,就会触发Form级的WHEN-VALIDATE-RECORD触发器(如果块级没有Override的同样的触发器的话),接着会执行里面的APP_STANDARD.EVENT ('WHEN-VALIDATE-RECORD');代码。
    然后,由于APP_STANDARD.EVENT ('WHEN-VALIDATE-RECORD')代码“包括”了我增加在个性化里面写的条件和执行的内容等等,所以,个性化就被执行,可以有效果出来。
    所以,当你在个性化里面添加了触发器和对应的执行条件,如果都不会被执行,而且你确认你的条件是满足的前提下,你可以打开对应的Form,确认Form级触发器有没有对应的触发器名称,还有,里面的是否有代码:APP_STANDARD.EVENT(对应的触发器名称)。
    如果没有,赶忙增加,然后。。。
    ----
    啰嗦一点,了解上面的原理之后,相信大家都想到一点:触发器的执行层次可能也会影响到个性化的触发!
    为什么?
    因为,我们一般在Form的Block里面添加的触发器,其执行层次一般是:Override。

    这样子会导致一个后果:你在对应的块,再用个性化编写对应的触发器代码(上面的例子就是WHEN-NEW-RECORD-INSTANCE),那这个个性化的代码永远不会被执行。为什么?因为块级的WHEN-NEW-RECORD-INSTANCE触发器的执行层次已经覆盖了Form级的执行层次!而个性化的代码是添加在Form级的触发器的。
    所以,在客制开发Form的时候就要注意这点了。如果你还想用对应触发器的个性化添加代码的话,最好将执行层次改为:Before。

    备注:如果对Form的触发器执行层级不了解的话,可以看看下面的例子。
    同样的触发器,在Item级,Block级,Form级都建一个。
    对应的触发器的属性设定不一样的时候,测试的结果:
    Item:Before/Block: Before /Form: Before
    执行效果: Item-->Block-->Form
    设为Before,执行顺序正常,从小到大。

    Item:After/Block:Override/Form:Override
    执行效果:Block-->Item-->Form级不执行
    设为Override,则就是对应层次的触发器的断点。上一级的不会被执行。

    Item:After/Block:Override/Form:After
    执行效果:Block-->Item-->Form级不执行

    Item:After/Block:Override/Form: Before
    执行效果:Block-->Item-->Form级不执行

    Item:After/Block: After/Form:After
    执行效果:Form-->Block-->Item
    设为After的话,执行的顺序会颠倒。

    Item:After/Block: After/Form:Override
    执行效果:Form-->Block-->Item
    设为After的话,执行的顺序会颠倒。

    Item:After/Block: Before/Form:Override
    执行效果:Block -->Form-->Item


    来自:http://www.itpub.net/thread-1809982-1-7.html

  • 相关阅读:
    视图的作用,视图可以更改么?
    数据库事务的四个特性及含义
    mysql 设置隔离级别
    如何避免事务的并发问题?
    事务控制语言(TCL)
    事务的并发问题有哪些?
    事务的隔离级别: 事务并发问题如何发生?
    DDL 语言
    DML 语言
    TRUNCATE、Drop、Delete 的用法
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299274.html
Copyright © 2020-2023  润新知