客制化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:

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进行赋值操作。
  ③效果如下:

 

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错误。效果如下:
  

CIO之家 www.ciozj.com 公众号:imciow
关联的文档
也许您喜欢