转:FORM:客制化Form的菜单栏和右鍵菜單

Oracle EBS还允许客制化Form的菜单栏。

用户最多可以定义45个form-level的trigger,名称必须为SPECIALn,

其中SPECIAL1 to SPECIAL15属于Tools菜单项,

SPECIAL16 to SPECIAL30属于Reports菜单项,

SPECIAL31 to SPECIAL45属于Actions菜单项,其中Reports、Actions的名称可以被修改。

修改代码为:

APP_SPECIAL.INSTANTIATE('SPECIAL_B','库存');

APP_SPECIAL.ENABLE('SPECIAL_B',PROPERTY_On);

其中SPECIAL,SPECIAL_B,SPECIAL_C分别代表的是Tools,Reports,Actions。

 

初始化示例:

  IF (FND_FUNCTION.TEST('DEMVC_DEMVCEOR_PRINT_ORDER')) THEN

   app_special.instantiate('SPECIAL1','&Print Order');

   app_special.enable('SPECIAL1',PROPERTY_ON);

   app_special.instantiate('SPECIAL2','Specia&l 2 Line', '',TRUE,'LINE');

    app_special.instantiate('SPECIAL3_CHECKBOX','Spe&cial 3 Box w Line', '',TRUE,'LINE');

    app_special.set_checkbox('SPECIAL3_CHECKBOX','TRUE');

    app_special.instantiate('SPECIAL4_CHECKBOX','Special &4 Box');

    app_special.set_checkbox('SPECIAL4_CHECKBOX','TRUE');

    app_special.instantiate('SPECIAL18','Specia&l 18 Line SEP', separator=>'LINE');

    app_special.instantiate('SPECIAL32','Specia&l 32 Line', '',TRUE,'LINE');

    app_special.instantiate('SPECIAL33','Specia&l 33');

    app_special.instantiate('SPECIAL30','Specia&l 30');

    app_special.instantiate('SPECIAL31','Specia&l 31 Line','',TRUE,'LINE');

    app_special.instantiate('SPECIAL45','Spe&cial 45');

/* and display a button on the form */

    app_item_property.set_property('orders.print_order',

                               DISPLAYED, PROPERTY_ON);

    ELSE

    app_item_property.set_property('orders.print_order',

                               DISPLAYED, PROPERTY_OFF);

    END IF;

app_special.instantiate设置菜单项的文字说明,

app_special.enable设置菜单项是否可用,

app_special.set_checkbox设置check_box菜单项的选定状态。

在form-level 的SPECIALn trigger中,定义了这些菜单项选中后的处理代码,如下所示:

Eg1:

  demvceor.PRINT_ORDER('SPECIAL1');

Eg2:

 if (app_special.get_checkbox('SPECIAL3_CHECKBOX')='TRUE') then

     fnd_message.debug('Special 3 is True!');

else

     fnd_message.debug('Special 3 is False!');

end if;

  

  右键菜单也可以自定义,form-level PRE-POPUP-MENU trigger引用APPSTAND.EVENT('PRE-POPUP-MENU')建立default menu;建立block /item level pre-pop-menu trigger须(Execution HierarchyàAfter)。

从block /item level pre-pop-menu trigger(Execution HierarchyàAfter)中调用app_popup.instantate函数初始化右键菜单项:

procedure APP_POPUP.INSTANTIATE(

option_name varchar2,

txt varchar2,

initially_enabled boolean default true,

separator varchar2 default null);

   Example

  • This example results in a menu that has a line above the second custom entry and

   has the third custom entry grayed out (disabled)

APP_POPUP.INSTANTIATE(

‘POPUP1’,’First Entry’);

APP_POPUP.INSTANTIATE(

‘POPUP2’,’Second Entry’, TRUE, ‘LINE’);

APP_POPUP.INSTANTIATE(

‘POPUP3’,’Third Entry’, FALSE);

  右键菜单的处理函数写在名为POPUP1 through POPUP10的trigger中,应该在正确的level上建立这些trigger (通常是block/item level)。

 

客制化菜单

  Effect:

 

  

 

  Usage:调用 app_special.instantiate包

 

  Examples:

 

  1、增加一个自定义Form Level的触发器(SPECIAL11)

 

  

 

  2、增加测试代码如下:

 

  ――――――――――――――――――――――――――――――――――――――――――――――

 

  declare

 

  v_invoice_num varchar2(50);

 

  begin

 

  v_invoice_num := '菜单栏客制化100';

 

  fnd_message.debug(v_invoice_num);

 

  end;

 

  ―――――――――――――――――――――――――――――――――――――――――――――――

 

  3、在Form WHEN-NEW-FORM-INSTANCEFJ 进行调用:

 

  APP_SPECIAL.INSTANTIATE('SPECIAL11','测试菜单2', '', TRUE, 'LINE');

 

  ―――――――――――――――――――――――――――――――――――――――――――――――

 

  4、一些特殊说明:

 

  上面自定义FORMS级触发器,名字必须定义为“SPECIAL+数字‖,否则会报错。并且数字的大小决定了菜单出现的先后顺序。数字还有更大作用就是决定了,自定义菜单选项放在哪个主菜单下。

 

  SPECIAL1—SPECIAL15在“工具”主菜单下。

 

  SPECIAL16—SPECIAL30在“报表”主菜单下。

 

  SPECIAL31—SPECIAL45在“活动”主菜单下。

 

  SPECIAL46以上就直接报错了。^_^

 

  如下图

 

  

 

  5、 控制自定义菜单的是否激活可用。

 

  使用app_special.enable函数可以控制菜单是否可以使用。

 

  例如:基于不同的数据块,实现菜单的不可用。在block的‖when-new-block-instance‖中加入

 

  效果:

 

  app_special.enable('SPECIAL1',property_off);

 

  效果

 

  

 

  6、 在自定义的菜单上使用checkbox按钮。

 

  ①增加一个自定义Form Level的触发器(SPECIAL1_CHECKBOX),代码如下:

 

  if app_special.get_checkbox('SPECIAL1_CHECKBOX')='TRUE' then

 

  fnd_message.debug('Special 1 is True!');

 

  else

 

  fnd_message.debug('Special 1 is False!');

 

  end if;

 

  注:使用app_special.get_checkbox来获取checkbox的状态值。

 

  ②在Form的WHEN-NEW-FORM-INSTANCE触发器中初始化菜单。

 

  app_special.instantiate('SPECIAL1_CHECKBOX','Spe&cial 1 Box w Line', '',TRUE,'LINE');

 

  app_special.set_checkbox('SPECIAL1_CHECKBOX','TRUE');

 

  注:app_special.set_checkbox是对checkbox进行赋值操作。

 

  ③效果如下:

 

  

客制化右键菜单

  1、 首先如果是要为某个ITEM,另外开发一个右键菜单。这个需要直接按照FORM的开发教程,自定义一个POPUP菜单就可以了。但本文讲的在EBS所有的快捷菜单上,额外增加所需的菜单按钮。也就是要图上所示的快捷菜单上增加菜单按钮。

  

  2、 在FROM-LEVEL增加自定义触发器(名字规则为:POPUP+N)

  

  3、 ITEM的“PRE-POPUP-MENU”触发器上初始化菜单。

  APP_POPUP.INSTANTIATE('POPUP1','First Entry');

  APP_POPUP.INSTANTIATE('POPUP10','SECONED Entry',TRUE,'LINE');

  APP_POPUP.INSTANTIATE('POPUP3','THREE Entry',FALSE,NULL);

  

  4、 如果是整个BLOCK的ITEM都需要客制化快捷菜单,可以在BLOCK的“PRE-POPUP-MENU”定义。

  APP_POPUP.INSTANTIATE('POPUP1','global');

  

  调用EBS日期控件

  1、 首先将ITEM的LOV属性设置为“ENABLE_LIST_LAMP”、列表验证属性设置为“否”

  

  2、在ITEM的“KEY-LISTVAL”解发器下加入对下代码:

  BEGIN

  calendar.show();

  END;

  3、注意:ITEM对应数据库类型必须是DATE类型,否则会报frm-40700错误。效果如下:

  

 

posted @ 2016-03-23 10:16  pompeii  阅读(667)  评论(0编辑  收藏  举报