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錯誤。效果如下:
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
