常用Trigger的触发时机
Form Level: Trigger PRE-FORM WHEN-NEW-FORM-INSTANCE POST-FORM POST-DATABASE-COMMIT WHEN-TAB-PAGE-CHANGED KEY-EXIT WHEN-WINDOW-CLOSED CLOSE-WINDOW 触发时机 启动Form, 第一个Block初始化前 PRE-xxx初始化结束后,焦点导航到Form时 焦点离开Form时 Form上有数据库数据变化要提交时 当Form上有Tab Canvas,Tab Page变化时触发 退出Form. 点击Window右上角close图示. 如果通过F4关闭则不会触发这个trigger 点击Window右上角close图示, After WHEN-WINDOW-CLOSE
Block Level: Trigger PRE-BLOCK PRE-RECORD WHEN-NEW-BLOCK-INSTANCE WHEN-NEW-RECORD-INSTANCE WHEN-VALIDATE-RECORD POST-RECORD POST-BLOCK PRE-INSERT PRE-UPDATE PRE-DELETE ON-INSERT ON-UPDATE ON-DELETE ON-LOCK 触发时机 BLOCK得到焦点,初始化之前 Record初始化前. After PRE-BLOCK, Before WHEN-NEW-BLOCK-INSTANCE Block获得焦点时触发 Record获得焦点时触发. After WHEN-NEW-BLOCK-INSTANCE Record中的item validate通过后,block commit前触发 焦点离开Record触发 焦点离开Block触发. After POST-RECORD Insert操作确认后commit前触发 Update操作确认后commit前触发 Delete操作确认后commit前触发 Insert 操作写入DB时触发 Update 操作写入DB时触发 Delete 操作写入DB时触发 从DB中查询出的record, 在第一个发生值变化的操作时触发,lock之后其它的值变化操作不会再触发;直到commit后自动解除lock PRE-QUERY POST-QUERY 在执行SQL前触发。可以用来设置数据块default_where, order_by等属性 执行SQL后,将查询的数据集提取到窗体记录各项之前触发
Item Level: Trigger PRE-TEXT-ITEM Item Type TextItem 触发时机 TextItem初始化前,在 WHEN-NEW-ITEM-INSTANCE之前触发。隐藏的text item没有这个trigger WHEN-NEW-ITEM-INSTANCE All 可见Item得到焦点时触发 注意:不在Canvas上显示的object item是没有这个trigger的 POST-CHANGE WHEN-VALIDATE-ITEM Item 所有可编辑的Item 如果Item状态或值有变化,在焦点离开item时触发 有变化的item焦点移开时,在POST-CHANGE trigger之后触发 POST-TEXT-ITEM KEY-LISTVAL WHEN-LIST-CHANGED WHEN-RADIO-CHANGED WHEN-BUTTON-PRESSED TextItem TextItem LIST Radio Group BUTTON Validate item之后触发 有LOV的TextItem选择value时触发 下拉列表选项变化时触发 Radio group的选中radio button项变化时触发 Button点击或确定时触发
常见的Trigger触发顺序
Sequence Trigger 1 2 3 4 5 6 7 8 PRE-FORM PRE-BLOCK PRE-RECORD PRE-TEXT-ITEM WHEN-NEW-FORM-INSTANCE WHEN-NEW-BLOCK-INSTANCE WHEN-NEW-RECORD-INSTANCE WHEN-NEW-ITEM-INSTANCE POST-RECORD POST-BLOCK PRE-BLOCK PRE-RECORD WHEN-NEW-RECORD-INSTANCE WHEN-NEW-ITEM-INSTANCE POST-CHANGE WHEN-VALIDATE-ITEM POST-TEXT-ITEM WHEN-VALIDATE-RECORD POST-RECORD POST-BLOCK Action Open Form(当打开FORM时) Level Form Block Block Item Form Block Block Item Block Block Block Block Block Item Item Item Item Block Block Block Commit db前准备,验证资料。 Page Down /Up (查询出记录后翻页到前/后记录) 1 2 3 4 5 6 Insert Record 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Update Record 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Enter Query 1 2 3 4 5 6 7 8 9 PRE-COMMIT PRE-INSERT ON-INSERT POST-INSERT POST-FORMS-COMMIT ON-COMMIT POST-DATABASE-COMMIT PRE- BLOCK PRE- RECORD PRE-TEXT-ITEM WHEN-NEW-ITEM-INSTANCE POST-CHANGE WHEN-VALIDATE-ITEM POST-TEXT-ITEM WHEN-VALIDATE-RECORD POST-RECORD POST-BLOCK PRE-COMMIT PRE-UPDATE ON-UPDATE POST-UPDATE POST-FORMS-COMMIT ON-COMMIT POST-DATABASE-COMMIT PRE- BLOCK PRE- RECORD PRE-TEXT-ITEM WHEN-NEW-ITEM-INSTANCE POST-RECORD WHEN-CLEAR-BLOCK WHEN-NEW-RECORD-INSTANCE PRE-QUERY PRE-SELECT ON-SELECT POST-SELECT POST-QUERY WHEN-NEW-RECORD-INSTANCE Form Block Block Block Form Form Form Block Block Item Item Item Item Item Block Block Block Form Block Block Block Form Form Form Block Block Item Item Block Block Block Block Block Block Block Block Insert到DB中 从DB中取record到block中 在每个需要commit的 item和block上触发. commit前的准备. Step 6-8循环在每个block上触发。 到step 9 database中数据updated 保存完毕重新load record Form上输入框变成蓝底色的查询模式 查询并返回data 显示data
触发器执行顺序:
1.当打开FORM时: (1)PRE-FORM
(2)PRE-BLOCK(BLOCK级) (3)WHEN-NEW-FORM-INSTANCE (4)WHEN-NEW-BLOCK-INSTANCE (5)WHEN-NEW-RECORD-INSTANCE (6)WHEN-NEW-ITEM-INSTANCE
2.当填写一行记录完成后,光标移动到下一条记录的时候: (1)WHEN-VALIDATE-RECORD
(只将填写的记录与数据库中已存在的记录作唯一性的验证,如果只是页面上的数据重复而数据库中没有与其重复的值则不会报错.)
(2)WHEN-NEW-RECORD-INSTANCE (3)WHEN-NEW-ITEM-INSTANCE 3.当点击“保存”时
(1)WHEN-VALIDATE-RECORD
(将页面上的所有数据提交到数据库,若页面上有重复的数据,则提交第一次时成功但只是将数据先写到数据库中一类似临时表的地方,在提交第二条重复记录的时候报错,执行事务回滚,原来执行成功的指令也将被撤消) (2)PRE-INSERT (3)ON-INSERT (4)POST-INSERT
(5)POST-FORMS-COMMIT (6)PRE-BLOCK(BLOCK级) (7)KEY-COMMIT
(8)WHEN-NEW-ITEM-INSTANCE
4.当光标移动到当前数据块中已经显示的行上时: (1)WHEN-REMOVE-RECORD (2)WHEN-NEW-RECORD-INSTANCE (3)WHEN-NEW-ITEM-INSTANCE 当在该行上的不同ITEM移动时: (4)WHEN-NEW-ITEM-INSTANCE
5.当要进行修改时(在记录中的某个项上进行了修改时): (1)ON-LOCK
6.在修改完成后进行保存时: (1)WHEN-VALIDATE-RECORD (2)PRE-UPDATE (3)ON-UPDATE
(4)POST-FORMS-COMMIT
(5)PRE-BLOCK(BLOCK级) (6)KEY-COMMIT
(7)WHEN-NEW-ITEM-INSTANCE 7.删除一条记录时: (1)ON-LOCK
(2)WHEN-REMOVE-RECORD (3)KEY-DELREC
(4)WHEN-NEW-RECORD-INSTANCE (5)WHEN-NEW-ITEM-INSTANCE 8.F11查询过程:
(1)WHEN-CLEAR-BLOCK
(2)WHEN-NEW-RECORD-INSTANCE (3)WHEN-NEW-ITEM-INSTANCE 在输入查询条件后点CTRL+F11: (4)PRE-QUERY
(5)WHEN-CLEAR-BLOCK (6)POST-QUERY
(7)WHEN-NEW-RECORD-INSTANCE (8)WHEN-NEW-ITEM-INSTANCE 9.CRRL+F11:
(1)WHEN-CLEAR-BLOCK (2)PRE-QUERY
(3)WHEN-CLEAR-BLOCK
(4)POST-QUERY(每查一条记录,触发一次) (5)WHEN-NEW-RECORD-INSTANCE (6)WHEN-NEW-ITEM-INSTANCE
10.从查询状态(F11)转为输入状态(F4)时: (1)WHEN-CLEAR-BLOCK (2)KEY-EXIT
(3)WHEN-NEW-RECORD-INSTANCE (4)WHEN-NEW-ITEM-INSTANCE 11.手电筒查询过程:
(1)QUERY_FIND(BLOCK级) 输入查询条件后,点击“查询”按钮: (2)WHEN-CLEAR-BLOCK (3)PRE-QUERY
(4)WHEN-CLEAR-BLOCK (5)POST-QUERY
(6)WHEN-NEW-RECORD-INSTANCE
(7)WHEN-NEW-ITEM-INSTANCE 12.点击“New”时:
(1)WHEN-NEW-RECORD-INSTANCE (2)WHEN-NEW-ITEM-INSTANCE 13.点击“EditField”时: (1)KEY-EDIT
14.点击“WindowHelp”时: (1)KEY-HELP
15.点击“ClearRecord”时: (1)WHEN-REMOVE-RECORD (2)POST-QUERY
(3)WHEN-NEW-RECORD-INSTANCE (4)WHEN-NEW-ITEM-INSTANCE 16.点击F4关闭时: (1)KEY-EXIT (2)POST-FORM
17.点击“CloseForm”按钮关闭时: (1)KEY-EXIT (2)POST-FORM
18.点击“Translations”按钮时: (1)TRANSLATIONS 19.点击小叉号关闭时: (1)WHEN-WINDOW-CLOSED (2)CLOSE-WINDOW (3)KEY-EXIT (4)POST-FORM 20.选中LOV列表: (1)KEY-LISTVAL
(2)WHEN-NEW-ITEM-INSTANCE 21.选中记录前面的小条时:
(1)WHEN-NEW-RECORD-INSTANCE
(2)WHEN-NEW-ITEM-INSTANCE(数据项级) (3)WHEN-NEW-ITEM-INSTANCE 22.光标上下移动时:
(1)WHEN-NEW-RECORD-INSTANCE (2)WHEN-NEW-ITEM-INSTANCE