欢迎来到天天文库
浏览记录
ID:6048687
大小:119.50 KB
页数:4页
时间:2018-01-01
《oracle form重复记录校验方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Form界面校验重复记录(DuplicateRecord) 2010-10-1212:09:43
2、 分类:EBSForm
3、 标签:
4、字号大中小 订阅 有时候为了更好的User体验,我们可能要在输入完一条记录之后就验证它是否录入重复,而不是在保存的时候才提示DuplicateRecordError。实现基于的前提是多行Block,User一进画面即是查询出所有相关记录,同EBS中实现标准汇总功能的条件。 下面是一个很好的例子,作者提到“当是也许你有特殊的需求,数据库中可能是存在重复的,但是在进行某种事务的时候必须要求唯一”,声明了文章只是实现上述条件下的功能。 而实际上,我
5、们往往被要求实现在界面上录数据的时候就体现DB的DuplicateRocord验证。User可能进行Clear_Record操作然后再录入数据,这样如果直接引用作者的方法就会有问题,因为用Form本身的SummaryItem实现的SUM只能将当前画面中的数据计入SUM,或许使用作者的方法结合APP_CALCULATE.RUNNING_TOTAL可以实现完整的功能,有时间测试一下能否结合使用。-------------------------------------------------------------------------------------------------------
6、---------------------------------------------以下摘自 在一个多行的BLOCK中如果需要去校验一个重复记录,以往我们有一下三种做法:1. 建议唯一索引。2. 在保存时,取数据库中的值进行校验。3. 在某个触发事务处理的按钮上循环整个块,根据数据库中的值进行重复校验。 使用唯一索引和保存时校验都是同样的道理,只是一个是数据库自身验证,一个是客户化的代码来进行验证。但是我们假设:这个多行块拥有较多的字段,或者是存在较多的dependentitem关联,那么使用者在录入多行数据后,提示重复,会让使用者感到非常不爽。而循环块的方
7、式更加不好,性能差(需要触发大量的触发器),且当数据较多时光标明显的闪烁感,在此,我们提供一个在某些情况下性能较好,且客户体验较好的方法,感谢KevinDClarke的思路。当是也许你有特殊的需求,数据库中可能是存在重复的,但是在进行某种事务的时候必须要求唯一,那么你恐怕就只能采用第三种方法了。这里做了个非常简单的例子,假设行号和物料加起来是需要进行唯一验证的,下面是效果图:下面我们就来讲解,如何来实现它。如下图你需要准备一下的块和ITEM还有触发器:Block的属性: BlockName DUPBLOCK QueryAllRecords Yes
8、 BlockName CONTROL QueryAllRecords Yes SingleRecord Yes DatabaseDataBlock NoItem的属性COUNT_ITEM(DataType:Number): FLAG(DataType:Number): PRE_DATA:普通的char型item即可其中FLAG中Formula的值为:cux_com(:contorl.pre_data,:dupblock.line_number
9、
10、:dupblock.item_number) 这个
11、表达式中的cux_com是一个Form中的function具体为:(在程序单元里自己加函数)FUNCTIONcux_com(str1varchar2,str2varchar2)RETURNnumberISl_returnnumber:=0;BEGINIFstr1=str2thenl_return:=1;elsel_return:=0;endif;returnl_return;END;添加DUPBLOCK的when_validate_record触发器,触发器中的代码为::contorl.pre_data:=:dupblock.line_number
12、
13、:dupblock.item_number
14、;if:contorl.count_item>1thenmessage('存在重复数据!');--fnd_message.debug('存在重复数据!');raiseform_trigger_failure;endif;到这里就完成了。
此文档下载收益归作者所有