Forms Menu Related Information

APP_SPECIAL.INSTANTIATE

Example 1

APP_SPECIAL.INSTANTIATE('SPECIAL3','&Book Order', 'POBKORD', TRUE, 'LINE');
APP_POPUP.INSTANTIATE('POPUP1','First Entry'); 
APP_POPUP.INSTANTIATE('POPUP2','Second Entry', TRUE,'LINE'); 
APP_POPUP.INSTANTIATE('POPUP3','Third Entry', FALSE);

Example 2

app_special.instantiate('SPECIAL12_CHECKBOX',
                        'Specia&l 12 Check Box with Line',
                         separator=>'LINE'); 
app_special.set_checkbox('SPECIAL12_CHECKBOX','TRUE');  

results in a menu entry that looks like the following:

-----------------------------------
[x] Speciall 12 Check Box with Line

Example3

DECLARE
l_menu_label VARCHAR2(80);
BEGIN
fnd_message.set_name('PO', 'PO_SPECIAL_ALL_VIEW_MSG_HSTRY');
fnd_message.get(l_menu_label);
app_special.instantiate('SPECIAL9', l_menu_label, NULL,FALSE,NULL);
END;

Reference:http://docs.oracle.com/cd/E18727_01/doc.121/e12897/T302934T457083.htm#I_ax2Dtoolbar


APP_SPECIAL.ENABLE

APP_SPECIAL.ENABLE('SPECIAL3',PROPERTY_ON);
app_special.enable('SPECIAL6', PROPERTY_ON); 
app_special.enable('SPECIAL6', PROPERTY_OFF); 


Set_Menu_Item_Property

Declare
mi_id MenuItem ;
BEGIN
If your_conditionThen
mi_id := Find_Menu_Item('menu.item');
If not id_null ( mi_id ) Then
Set_Menu_Item_Property( 'menu.item', ENABLED, PROPERTY_TRUE ) ;
Set_Menu_Item_Property( 'menu.item', ENABLED, PROPERTY_FALSE ) ;
End if ;
End if ;
END;

VISIBLE
set_menu_item_property ('menu1.TRANS',visible,PROPERTY_TRUE);
set_menu_item_property ('menu1.TRANS',visible,PROPERTY_FALSE);

=================================

Difference between menu & special in personalization

source:https://forums.oracle.com/forums/thread.jspa?messageID=10513442

MENU1 through MENU15 menu entries, available in the Tools pulldown menu. These are guaranteed not to be used by Oracle and are exclusively for customer use, therefore we strongly encourage you to use these entries as opposed to the SPECIAL menu entries in order to avoid collisions of code. When the user selects the entry, it will fire the corresponding MENU# trigger. You must also create another rule that traps this Trigger Event and performs the desired functionality.

Forms Personalization:
SPECIALn
Populate tools menu (SPECIAL 1-15)
Populate reports menu (SPECIAL 16-30)
Populate actions menu (SPECIAL 31-45)
MENUn
Populate tools menu (MENU1-15)
Use these before SPECIALn


=================================

Tools Menu

source:http://oracle.anilpassi.com/forms-personalization-best-practices-4.html

To create new Tool Menus, always use MENU1-MENU15, as Oracle guarantees never to use these during development.
Same is not true for SPECIAL Menus, as Oracle development may release a patch utilising the same SPECIALx as you may have personalized.
MENU1..15 is available starting from 11.5.10 CU2 onwards

=================================

Oracle EBS还允许客制化Form的菜单栏
zz:http://ryanlunar.blog.163.com/blog/static/183577092201283101830760/

用户最多可以定义45form-leveltrigger,名称必须为SPECIALn,其中SPECIAL1 to SPECIAL15属于Tools菜单项,SPECIAL16 to SPECIAL30属于Reports菜单项, SPECIAL31 to SPECIAL45属于Actions菜单项,其中ReportsActions的名称可以被修改。

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

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

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


SPECIAL菜单:

触发器When-New-Form-Instance

Form级app_special.instantiate('SPECIAL1','<Prompt>');


触发器Pre_Block

app_special.enable('SPECIAL1',property_on);


=================================

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

zz: http://blog.youkuaiyun.com/rfb0204421/article/details/7567199

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

用户最多可以定义45form-leveltrigger,名称必须为SPECIALn,其中SPECIAL1 to SPECIAL15属于Tools菜单项,SPECIAL16 to SPECIAL30属于Reports菜单项, SPECIAL31 to SPECIAL45属于Actions菜单项,其中ReportsActions的名称可以被修改。

修改代码为:

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 POPUP10trigger中,应该在正确的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错误。效果如下:

  



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

用户最多可以定义45form-leveltrigger,名称必须为SPECIALn,其中SPECIAL1 to SPECIAL15属于Tools菜单项,SPECIAL16 to SPECIAL30属于Reports菜单项, SPECIAL31 to SPECIAL45属于Actions菜单项,其中ReportsActions的名称可以被修改。

修改代码为:

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 POPUP10trigger中,应该在正确的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错误。效果如下:

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值