转:http://yedward.net/?id=82
1、execute_trigger:用来运行一个指定的触发器,常用来运行用户自定义的触发器。
语法:procedure execute_trigger(trigger_name varchar2),其中trigger_name是指定的一个有效的用户命名的触发器。execute_trigger无法指定调用的trigger的范围,所以forms一般会从最底层的触发器开始,然后向上处理,所以我见过一些用到execute_trigger的时候,它调用的自定义触发器都写在了form级别。
如果要运行一个关联了键(Key)的内置触发器,应该使用内置函数do_key而不是execute_trigger。例如execute_trigger('KEY-NEXT-ITEM')就应该改为do_key('NEXT_ITEM')。
值得注意的是,对于内置的触发器虽然也可以用execute_trigger来执行,但是这种方式并不是推荐的,因为默认的失败处理行为是不同的,它不像forms按照规则自动调用触发器那样处理。例如,在默认的处理中,如果when-validate-item触发器失败,那么它会抛出一个异常并停止form的运行,但是,如果when-validate-item是由execute_trigger来调用执行的,那么如果调用执行失败了,这个失败并不会停止form的运行,而是在执行execute_trigger以后返回的时候把变量form_failure设置为false。所以,一般的execute_trigger更常用在执行自定义的触发器。
下面是我在看form中menu的时候的一段代码,放在这里加强学习:
set_menu_item_property ('VIEW_MENU.DEFAULT', CHECKED, PROPERTY_FALSE); set_menu_item_property ('VIEW_MENU.SAVED', CHECKED, PROPERTY_FALSE); set_menu_item_property ('VIEW_MENU.CUSTOM', CHECKED, PROPERTY_TRUE); set_menu_item_property ('VIEW_MENU.SET_1', CHECKED, PROPERTY_FALSE); Execute_trigger('T_view_custom'); -- T_view_custom就是自定义的触发器
至于上面涉及到的form_failure以及form_success,它们表示的是返回上一次form执行结果的布尔表达式,至于是true还是false,请参见下面:
对于form_failure,其返回值如下:
success FALSE
failure TRUE
fata error FALSE
对于form_success,其返回值如下:
success TRUE
failure FALSE
fata error FALSE
2、do_key:运行对应于特定内置子程序的键触发器,它的功能相当于按下相应的功能键。
内置子程序 | 键触发器 | 相关的功能键 |
CLEAR_BLOCK | Key-CLRBLK | [Clear Block] |
CLEAR_FORM | Key-CLRFRM | [Clear Form] |
CLEAR_RECORD | Key-CLRREC | [Clear Record] |
COMMIT_FORM | Key-COMMIT | [Commit] |
COUNT_QUERY | Key-CQUERY | [Count Query Hits] |
CREATE_RECORD | Key-CREREC | [Insert Record] |
DELETE_RECORD | Key-DELREC | [Delete Record] |
DOWN | Key-DOWN | [Down] |
DUPLICATE_ITEM | Key-DUP-ITEM | [Duplicate Item] |
DUPLICATE_RECORD | Key-DUPREC | [Duplicate Record] |
EDIT_TEXTITEM | Key-EDIT | [Edit] |
ENTER | Key-ENTER | [Enter] |
ENTER_QUERY | Key-ENTQRY | [Enter Query] |
EXECUTE_QUERY | Key-EXEQRY | [Execute Query] |
EXIT_FORM | Key-EXIT | [Exit/Cancel] |
HELP | Key-HELP | [Help] |
LIST_VALUES | Key-LISTVAL | [List] |
LOCK_RECORD | Key-UPDREC | [Lock Record] |
NEXT_BLOCK | Key-NXTBLK | [Next Block] |
NEXT_ITEM | Key-NEXT-ITEM | [Next Item] |
NEXT_KEY | Key-NXTKEY | [Next Primary Key Fld] |
NEXT_RECORD | Key-NXTREC | [Next Record] |
NEXT_SET | Key-NXTSET | [Next Set of Records] |
PREVIOUS_BLOCK | Key-PRVBLK | [Previous Block] |
PREVIOUS_ITEM | Key-PREV-ITEM | [Previous Item] |
PREVIOUS_RECORD | Key-PRVREC | [Previous Record] |
Key-PRINT | [Print] | |
SCROLL_DOWN | Key-SCRDOWN | [Scroll Down] |
SCROLL_UP | Key-SCRUP | [Scroll Up] |
UP | Key-UP | [Up] |
表1:内置子程序 - 键触发器 - 功能键对应表
需要注意的是do_key只接受内置子程序的名字作为参数,而不是键的名字,上面的对应表非常重要哦,在以后开发的时候参考非常有用,比如do_key('ENTER_QUERY')和execute_trigger('Key-ENTQRY')。