Oracle_EBS__触发器学习大全.doc_第1页
Oracle_EBS__触发器学习大全.doc_第2页
Oracle_EBS__触发器学习大全.doc_第3页
Oracle_EBS__触发器学习大全.doc_第4页
Oracle_EBS__触发器学习大全.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

文档密级:内部公开Oracle EBS Form Trigger学习大全打开,关闭,创建,更新记录的trigger次序PRE-在进入一个form,或是导航到一个新的block时触发,PRE-系列的触发器一般是在WHEN-NEW-INSTANCE系列之前,它们如果失败了的话,就不能成功导航到下一个对象了,只能留在当前的位置。在这些触发器里可以设置一些判断条件来限制是否可以导航到新的位置。WHEN-NEW-INSTANCE这一类的trigger都是当鼠标光标每次落到一个新的block,record,item上时触发的,而且就算失败了,也不会发生什么错误。但是when-new-form-instance,只有当form启动时,光标导航到第一个导航块的第一个导航item时触发,如果一个应用有多个form,当光标在各个form之间转换时,并不会触发它。POST-TEXT-ITEM和WHEN-VALIDATE-ITEMPost-text-item的触发点:当输入的光标从一个Text-Item 转到其它item,可以用它来改变item的值,而when-Validate-item虽然也是在离开前触发,但是作用不同,Post-Text-Item本身是没有验证的,when-Validate-item可以用来补充一些验证(除了form本身的验证),但是当form验证成功以后,会把item标志为valid,而不会再去验证了,如果这时我们再去修改它的值,那么就有可能会把无效的值导入到数据库。在创建和更新一条记录时,先触发when-Validate-item,再触发Post-Text-Item,然后是when-Validate-record。POST-系列的都是离开当前的block,record,item时触发的WHEN-WINDOW-ACTIVATED做原材料属性修改平台时,第一次使用这个触发器,用来从另一个window返回时,刷新当前window,代码写在了这个触发器里。使用之前用fnd_message.debug试验了一下,打开窗口后不停的弹出message。只要这个窗口在活动期间就会不停的执行这个触发起里面的代码,所以执行的代码应该用if条件限制一下。Form的Trigger的优先级是从item,到block,到form级别,如果另外设置Execution Hierarch属性(override,before,after),则按照设置后的顺序执行。如果是override的话,则执行完这个级别的触发器,就不往上执行了,before就是执行完这个级别的触发器后,如果上一个级别也有这个触发器的话,继续去执行,after就是先去执行上一个级别的触发器,然后再回来执行。感觉触发器比较难理解的还是每一种触发器触发的时间,和在开发中怎么使用。目前了解的就是pre-,when-new-instance,when-validate,post-query和几个on-触发器 验证代码写在WHEN-VALIDATE-RECORD和PRE-INSERT的不同验证代码写在WHEN-VALIDATE-RECORD和PRE-INSERT的不同1、写在WHEN-VALIDATE-RECORD,可以及时地提示错误信息,如果验证时要和后台数据库关联的话,那么要写在PRE-INSERT,因为PRE-INSERT,ON-INSERT都是一条一条记录执行的,这样批量录入时,每一条记录的验证都可以取到最新的数据库记录。 2、 批量录入时,有一条的PRE-INSERT不成功,则所有记录都不能保存成功 Post-Query和When-New-Record-Instance关系Post-Query和When-New-Record-Instance假定数据库中有100条记录,块设置显示行数为10,那么当光标在显示出来的记录间移动时,只触发When-New-Record-Instance,不触发Post-Query。当光标移到第十一条记录时,触发Post-Query 不可见item的when-validate-item使用问题:如果一个item是不可见的,那么改变它的值,还会触发when-validate-item吗?结果:会触发,但不是在改变它的值后触发,而是在光标移到另一个block时。关闭窗口时也触发了。测试:设block1的item1为不可见,在item2的when-validate-item给tem1赋值,运行时,改变item2的值后,在block1的各item间移动光标都没有触发item1的when-validate-item,直到光标离开这个block,或关闭窗口时才触发。 ACCEPT Trigger 讲解ACCEPT APP_STANDARD.EVENT(ACCEPT); 这个触发器处理菜单或工具条上调用Save and Proceed (保存并继续)动作。它执行保存,并移动到指定当作第一个导航块的块上。 替换这个触发器中的代码,或创建块级触发器并把执行类型指定为Override FOLDER_RETURN_ACTIONFOLDER_RETURN_ACTION 这个触发器允许指定客户华的文件夹事件 用需要的处理文件夹动作的代码替换 KEY_DUPRECAPP_STANDARD.EVENT(KEY-DUPREC); 这个触发器禁用了Oracle 表单默认的重复记录的功能 KEY-CLRFRMKEY-CLRFRM APP_STANDARD.EVENT(KEY-CLRFRM); 这个触发器在试图清空form前验证记录 在原来的代码后添加附加的代码,通常你你应添加GO_BLOCK如果form中存在多个的区域,使用GO_BLOCK在调用清空from操作后重新填充控制菜单 KEY_MENUKEY_MENU APP_STANDARD.EVENT(KEY-MENU); 这个触发器禁用了Oracle froms的Block Menu 命令 为了启用从特定的块对替代的块通过键盘操作,那么编写块级KEY_MENU并且设定执行类型为Override 这个触发器会打开一个与弹出式菜单相同的LOV KEY_LISTVALKEY_LISTVAL APP_STANDARD.EVENT(KEY-LISTVAL); 这个触发器执行弹性域操作或引用LOV 创建块或项级触发器并设置执行类型为Override,可以使用日历或动态执行弹性域 ON-ERRORON-ERROR APP_STANDARD.EVENT(ON-ERROR);这个触发器处理服务器或客户端的所有的错误,使用消息字典调用。为了捕获处理指定的错误,在调用APP_STANDARD前检查指定的错误declareoriginal_mess varchar2(80);beginIF MESSAGE_CODE = THENoriginal_mess := MESSAGE_TYPE|to_char(MESSAGE_CODE)|: |MESSAGE_TEXT; your code handling the error goes heremessage(original_mess);ELSEAPP_STANDARD.EVENT(ON_ERROR);END IFend;POST-FORMPOST-FORM APP_STANDARD.EVENT(POST-FORM);这个触发器是预留为以后使用添加附加的代码在原有代码之后。 PRE-FORMPRE-FORMFND_STANDARD.FORM_INFO($Revision: $,$Date: $,$Author: $);APP_STANDARD.EVENT(PREFORM);APP_WINDOW.SET_WINDOW_POSITION(BLOCKNAME,FIRST_WINDOW);这个触发器初始化Oracle 应用的内部值和菜单。在这里输入的值将在Oracle应用程序菜单Help About Oracle Applications中看到。你必须编辑应用程序的简称,应用的简称控制当用户选择help按钮后哪个应用的在线帮助文档将被调用。如果你将应用的简称设置为FND,你的用户将会看不到任何帮助因为Oracle应用程序将不能建立可用的帮助目标。Form的名称是用户form名称(form标题)。Oracle公司使用源控制系统,它可以自动更新以“$”开头的值,如果你不使用这个源控制系统你可以按你的开发信息编辑这些值。你必须编辑APP_WINDOW中的BLOCKNAME为你自己的block.不要编辑FIRST_WINDOW QUERY_FINDQUERY_FINDAPP_STANDARD.EVENT(QUERY_FIND);这个触发器将设置显示字符串Query Find is not available 在这个触发器中替代代码,当你创建窗口或Row_LOV在你的form中时创建块级触发器并设置执行类型为Override WHEN-NEW-FORM-INSTANCEWHEN-NEW-FORM-INSTANCEFDRCSID($Header: . $);APP_STANDARD.EVENT(WHENNEWFORMINSTANCE); app_folder.define_folder_block(template test,folder_block, prompt_block, stacked_canvas,window, disabled functions);-app_folder.event(VERIFY);调用 APP_STANDARD.EVENT 是为了在query-only模式下调用FND_FUNCTION.EXECUTE,调用FNDRCSID是为了Oracle 应用程序的源控制系统(source control system).APP_FOLDER 只为了Oracle应用程序内部调用。客户化form不需要FDRCSID或APP_FOLDER调用,但是如果将它们留在触发器中也没有影响。在现有的代码前添加附加代码。 WHEN-NEW-RECORD-INSTANCEWHEN-NEW-RECORD-INSTANCEAPP_STANDARD.EVENT(WHEN-NEW-RECORD-INSTANCE);这个触发器管理Oracle应用程序菜单和工具栏创建块级触发器并设置执行类型为Before WHEN-NEW-ITEM-INSTANCEWHEN-NEW-ITEM-INSTANCE APP_STANDARD.EVENT(WHEN-NEW-ITEM-INSTANCE);这个触发器管理Oracle应用程序的菜单和工具栏如果你添加弹性域方法调用,你应该添加它在APP_STANDARD.EVENT 调用前调用,通常,你不应该添加任何代码在这个触发器中,这样的代码将会影响你表单的速度并且影响每一个项 Oracle EBS Form 中,不能修改的TriggerOracle应用程序不支持修改form级的触发器CLOSE_THIS_WINDOW从菜单Action-Close 调用触发器APP_CUSTOM.CLOSE_WINDOW 。CLOSE_WINDOWAPP_CUSTOM.CLOSE_WINDOW(:SYSTEM.EVENT_WINDOW);这个出发其处理所有关闭窗口的事件。编写处理关闭窗口的事件必须写在APP_CUSTOM.CLOSE_WINDOW包中EXPORT App_standard.event(EXPORT);这个触发器是“Action,Export”菜单中的选择。FOLDER_ACTIONApp_folder.event(:global.folder_action);KEY-COMMITApp_standard.event(KEY-COMMIT);这个触发器处理正常的提交或form调用KEY-EDITApp_standard.event(KEY-EDIT);这个触发器处理弹性域或日历,编辑器操作。KEY-EXITApp_standard.event(KEY-EXIT);这个触发器处理关闭事件和退出enter-query状态KEY-HELPApp_standard.event(KEY-HELP);这个触发器调用窗口的帮助系统。LASTRECORDAPP_STANDARD.EVENT(LASTRECORD);这个触发器处理菜单(Go -LAST RECORD)事件MENU_TO_APPCOREApp_standard.event(:global.menu_to_appcore);这个触发器

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论