oracle ebs 工作心得(4)

2019-03-15 20:47

(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


oracle ebs 工作心得(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:地暖施工须知以及验收时的注意事项

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: