Oracle EBS之Oracle Forms中的"WHEN-LEAVE-RECORD"触发器[转帖]_Hadoop,ERP及大数据讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Hadoop,ERP及大数据讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3140 | 回复: 0   主题: Oracle EBS之Oracle Forms中的"WHEN-LEAVE-RECORD"触发器[转帖]        下一篇 
lijia.peng
注册用户
等级:上尉
经验:753
发帖:66
精华:0
注册:2013-11-5
状态:离线
发送短消息息给lijia.peng 加好友    发送短消息息给lijia.peng 发消息
发表于: IP:您无权察看 2013-11-11 12:58:11 | [全部帖] [楼主帖] 楼主

在开发Oracle Forms时,有没有碰到这样的需求,我需要在每次离开一行记录时执行某个操作。用WHEN-VALIDATE-RECORD,不过实际测试的时候,怎么有时行有时不行?那你有没有尝试过WHEN-LEAVE-RECORD呢?什么?还有WHEN-LEAVE-RECORD?从来没有听说过…… 

在请出WHEN-LEAVE-RECORD前,让我们先来分析分析下见过的几个WHEN触发器: 

WHEN-NEW-RECORD-INSTANCE


鼠标每次进入新的一行时触发。 

WHEN-CREATE-RECORD


每次插入一行时触发,没输入任何数据时SYSTEM.RECORD_STATUS为NEW,输入数据后SYSTEM.RECORD_STATUS变为INSERT。 

WHEN-VALIDATE-RECORD


当鼠标离开当前行,且当前行在上一次WHEN-VALIDATE-RECORD到当前离开该行的时刻止,该行数据发生过变换时触发。 

当新插入一行数据,SYSTEM.RECORD_STATUS变为INSERT时,移出会触发一次。但是,当鼠标再次进入该行并打算移出,而这段时间内该行并没有发生改变时,尽管此时该行的SYSTEM.RECORD_STATUS仍为INSERT(未保存的情况下),但不会再触发WHEN-VALIDATE-RECORD事件。 

同理,当修改了一行数��,SYSTEM.RECORD_STATUS变为CHANGED时,移出该行会触发一次。但是,当鼠标再次进入该行并打算移出,而该段时间内该行并没有发生改变时,尽管此时该行的SYSTEM.RECORD_STATUS仍为CHANGED(未保存的情况下),将不会再触发WHEN-VALIDATE-RECORD事件。 

好了,时机也差不多成熟了,是时候WHEN-LEAVE-RECORD出马啦,当当当当…… 

我们如何才能在每次移出某行时执行某个操作?从上面的分析我们知道WHEN-VALIDATE-RECORD并不是每次离开行时都会触发,而似乎又没有类似WHEN-leave-RECORD之类的触发器,那碰到这类需求时是不是就没有其他办法了呢? 
当然不是,我们只需仔细想想WHEN-VALIDATE-RECORD的触发条件就不难发现,当且仅当该行数据发生了改变WHEN-VALIDATE-RECORD便会触发。这样的话,我们通过人为改变行上的数据来引起WHEN-VALIDATE-RECORD。例如,在BLOCK(BLK_DUMMY)上加一个非数据库的ITEM(就叫ITM_DUMMY吧,为了后面叙述方便,这里设为数值型,初始值为1),然后在WHEN-NEW-RECORD-INSTANCE(因为WHEN-NEW-RECORD-INSTANCE会在每次进入一行时无条件的触发)中改变这个ITEM的值(可以这样做::BLK_DUMMY.ITM_DUMMY := NVL(:BLK_DUMMY.ITM_DUMMY, 1) + 1;),到此便大功告成了,WHEN-VALIDATE-RECORD已经被我们改造成了我们自己的WHEN-LEAVE-RECORD触发器。 

怎么样,简单吧?赶紧去开发咱自己的WHEN-LEAVE-RECORD触发器吧。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论