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] Specia
l
l 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/
用户最多可以定义 45 个 form-level 的 trigger ,名称必须为 SPECIALn ,其中 SPECIAL1 to SPECIAL15 属于 Tools 菜单项, SPECIAL16 to SPECIAL30 属于 Reports 菜单项 , SPECIAL31 to SPECIAL45 属于 Actions 菜单项 , 其中 Reports 、 Actions 的名称可以被修改。
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.csdn.net/rfb0204421/article/details/7567199
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错误。效果如下:
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错误。效果如下: