(1)KEY-EXIT (2)POST-FORM
18. 点击“Translations”按钮时:
(1)TRANSLATIONS
19.点击小叉号关闭时:
(1)WHEN-WINDOW-CLOSED (2)CLOSE-WINDOW (3)KEY-EXIT
(4)POST-FORM
先关闭窗体 再关闭 form 因为 一个form 窗体有可能有多个 窗体属于form
20.选中LOV列表:
(1)KEY-LISTVAL
(2)WHEN-NEW-ITEM-INSTANCE 理解:选择值后 光标会进入后一个可导航的项 所以会触发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
用代码改变项值,会触发WHEN-VALIDATE-ITEM:
当在项a中的触发器:WHEN-VALIDATE-ITEM 中用代码改变项b中的值时 当光标从项b(不再做任何输入或改变)中离开后 会触发项b的触发器:WHEN-VALIDATE-ITEM(如果有的话):
如下图所示:
输入订单名称 然后离开 触发了WHEN-VALIDATE-ITEM 在该触发器有如下代码:
fnd_message.debug('WHEN-VALIDATE-ITEM order_name 改变 采购员的值为 abc 验证是否会触发 采购员的WHEN-VALIDATE-ITEM ');
:CUX_PORDER_HEADS_SYB_V.purchaser:='abc';
然后光标进入了采购员项 离开后 触发了 WHEN-VALIDATE-ITEM 该触发器中有如下代码:
fnd_message.debug('okay, it''s me ,采购员');
fnd_message小记:
订单名称中的触发器WHEN-VALIDATE-ITEM代码如下:
if lengthb(:CUX_PORDER_HEADS_SYB_V.order_name)<4 then fnd_message.set_name('FND','订单名称太短'); fnd_message.error;
raise form_trigger_failure;
end if;
如果输入的订单名称字节少于4 则给出提示 认为不合法 并且不允许离开 raise form_trigger_failure; 抛出异常 把 光标留在当前项
帮助主题说 如果WHEN-VALIDATE-ITEM失败 则:If fired as part of validation initiated by navigation, navigation fails, and the focus remains on the original item.
画面如下:
fnd_message.set_string('订单名称选择:YES=0001, NO=0002,CANCEL=0003'); result:=fnd_message.question('YES','NO','CANCAL',1,2,null); if result=1 then
:CUX_PORDER_HEADS_SYB_V.order_name:='0001'; elsif result=2 then
:CUX_PORDER_HEADS_SYB_V.order_name:='0002'; end if;
的执行效果如下:(char(10)可以代表换行)
1 FND_MESSAGE.show 与 FND_MESSAGE.debug 效果相同,用于把信息以最基本的方式显示给用户。
2. FND_MESSAGE.hint
这种方式不会弹出对话框给用户,而是显示在左下脚的状态栏上面 3. FND_MESSAGE.error
以Error信息的方式显示给用户 4. FND_MESSAGE.warn
以选择信息的方式显示给用户,可以选择Ok或者Cancel,返回值分别是TRUE和FALSE if FND_MESSAGE.warn then fnd_message.debug('True'); else
fnd_message.debug('False'); end if;
执行效果如下: 点击OK会弹出 True 点击Cancel会弹出 False
Message()信息的显示问题:
在触发器中测试 如下语句的时候:
message(' song WHEN-NEW-ITEM-INSTANCE '); fnd_message.set_string( 'please select your value');
v_result:=FND_MESSAGE.QUESTION('是','否','取消',1,2);
fnd_message.debug(v_result);
发现' song WHEN-NEW-ITEM-INSTANCE ' 最后才显示 message(‘’) 应该是在触发器都执行完之后 再显示的,或者可能是 在触发器执行完后 才会去刷新画面吧
上面的 fnd_message.set_string( 'please select your value'); v_result:=FND_MESSAGE.QUESTION('是','否','取消',1,2); 执行效果如下:
按取消 其返回结果为3 当上面只定义了1,2
fnd_message.set_string( 'please select your value'); v_result:=FND_MESSAGE.QUESTION('是','否','取消',1,4); 的执行效果如下:
是为1 取消为3 否为2
WHEN-MOUSE-LEAVE的问题的发现:
我在了解这个触发器的时候 发现这个触发器 貌似不像其名字一样触发 甚至 根本就没测到过他被触发过 因为根据这个名字 应该是每次离开 不管什么情况离开 它都是应该触发的 如在一个项里 离开,但是 此触发器貌似不行 然后 类似的POST-CHANGE WHEN-VALIDATE-ITEM POST-TEXT-ITEM 却不能做到每次都触发,如果我们要 实现“每次离开 都执行一些自己的代码逻辑”该怎么办呢? 我根据执行 的list项 如果原先值为a 我改为b后 再改为a 虽然最后结果和进入前一致但是还是触发了 我大胆假设 是因为 :块.项改变了 就会执行WHEN-VALIDATE-ITEM 所以 通过这个发现我在 某一项的WHEN-NEW-ITEM-INSTANCE 写如下代码:
declare aa int ;
begin
aa:=:CUX_PORDER_LINES_SYB_V.GOODS_PRICE; :CUX_PORDER_LINES_SYB_V.GOODS_PRICE:=aa+1;
:CUX_PORDER_LINES_SYB_V.GOODS_PRICE:=aa; end ;
即可执行 无论什么情况 WHEN-VALIDATE-ITEM 这个触发器都会执行的 这就实现了类似WHEN-MOUSE-LEAVE 的功能
此方法也可以用到记录上 ,这要在 数据块理 添加一个自定义项 然后 在WHEN-NEW-RECORD-INSTANCE的时候 改变这个自定义项即可 这样 就算不改变界面项的项值 当前记录还是改变了 所以其 WHEN-VALIDATE-RECORD 总是会执行的
上面的执行结果如下所示:
现在光标进入订单明细的第一行 如下所示:
然后直接离开 如下图所示:
即无条件执行了WHEN-VALIDATE-ITEM