(整理)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.

SPECIAL菜單項選中后的處理代碼在SPECIALn 觸發器中定義

右擊快捷菜單選中后的處理代碼在PRE-POPUP-MENU觸發器中定義,用於對文本項目的右擊快捷菜單最多可增加10個菜單項。在項目級別或者數據塊級別的PRE-POPUP-MENU觸發器中調用,設置該觸發器的Execution Hierarchy 屬性為After。

 

Procedure APP_SPECIAL.INSTANTIATE(

option_name varchar2,  -----傳入SPECIAL1到SPECIAL45之間的值,代表的是菜單項的位置

hint varchar2 default null,-------- 菜單項顯示文本

icon varchar2 default null,-------- 工具欄要顯示的小圖標的名字,如果不需要在工具欄上顯示小圖標,傳入NULL即可

initially_enabled boolean default true,--------- 表示菜單項初始化時是否可用,傳入TRUE或者FALSE

separator varchar2 default null -----如果想在新增菜單項的上面顯示分割線,請傳入’LINE’,給SPECIAL1(_CHECKBOX), SPECIAL16, 或者SPECI                                  ---AL31傳入’LINE’將會被忽略

);

說明:用於創建程序特定的菜單。在表達級別的PRE-FORM觸發器的APP_STANDARD.EVENT(’PRE–FORM’) 改行代碼后調用。當用戶點擊創建的菜單項或者其對應的工具欄按鈕時,一個與參數option_name 相同的自定義觸發器將被觸發執行。

參數:

option_name 請傳入SPECIAL1到SPECIAL45之間的值,代表的是菜單項的位置,SPECIAL1代表的是第一個特殊菜單(EBS中目前是工具菜單)最上面的菜單項,SPECIAL15代表的是第一個特殊菜單(EBS中目前是工具菜單)最下面的菜單項,SPECIAL16代表的是第二個特殊菜單(EBS中目前是報表菜單)最上面的菜單項,SPECIAL30代表的是第二個特殊菜單(EBS中目前是報表菜單)最下面的菜單項,SPECIAL31代表的是第三個特殊菜單(EBS中目前是活動菜單)最上面的菜單項,SPECIAL45代表的是第三個特殊菜單(EBS中目前是活動菜單)最下面的菜單項。當你調用該過程后,新增菜單項對應的特殊菜單項自動可用了。

菜單項邊上顯示復選框只對第一個特殊菜單可用,請傳入SPECIAL1_CHECKBOX到SPECIAL15_CHECKBOX來顯示復選框。如果你使用了復選框,你還應該使用APP_SPECIAL.SET_CHECKBOX來設置復選框的初始值。

傳入SPECIAL, SPECIAL_B, 或者SPECIAL_C來控制這個特殊菜單是否可用,按順序分別控制第一、第二和第三個特殊菜單的是否可用。

hint 菜單項顯示文本。

icon 工具欄要顯示的小圖標的名字,如果不需要在工具欄上顯示小圖標,傳入NULL即可,對於菜單欄項目旁邊顯示復選框的菜單項不可以同時擁有工具欄圖標。

initially_enabled 邏輯值,表示菜單項初始化時是否可用,傳入TRUE或者FALSE。

Separator 如果想在新增菜單項的上面顯示分割線,請傳入’LINE’。給SPECIAL1(_CHECKBOX), SPECIAL16, 或者SPECIAL31傳入’LINE’將會被忽略。

舉例:

APP_SPECIAL.INSTANTIATE(’SPECIAL3’,’&Book Order’, ’POBKORD’,TRUE, ’LINE’);

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

app_special.set_checkbox(’SPECIAL12_CHECKBOX’,’TRUE’);

 

 

Procedure APP_SPECIAL.ENABLE(

option_name varchar2,-------- 菜單項的名稱。可能的值包括ABOUT, ATTACHMENTS,MODAL, SAVE, SELECT_ALL, SINGLE,SPECIAL1, ...到 SPECIAL45                      --------(或者SPECIALn_CHECKBOX 菜單項), SPECIAL,SPECIAL_B, SPECIAL_C, SUMMARY/DETAIL,TRANSLATION,或者是菜單項的                     --------全名。如果要禁用所有的特殊菜單則傳入SPECIAL。

state number         --------傳入PROPERTY_ON代表可用,PROPERTY_OFF代表禁用。

);

描述:

啟用或者禁用某些菜單項(包括該菜單項對應的工具欄圖標),也可以用於啟用禁用特殊菜單項,也就是你新增的菜單項。

如果某個菜單項對於表單中的大部分數據塊是可用的,那么在表單的PRE-FORM觸發器中啟用這個菜單項,對於不能使用這個菜單項的數據塊,在它的PRE-FORM觸發器中禁用這個菜單項,並將這個觸發器的Execution Hierarchy 屬性為Override。

 

啟用或者禁用菜單項保存來控制File>保存和文件>保存並繼續這兩個菜單項。當你調用APP_FORM.QUERY_ONLY MODE,保存會自動被禁用。

進入擁有菜單欄的模塊窗口前調用APP_SPECIAL.ENABLE(’MODAL’, PROPERTY_OFF),當你離開這個模塊窗口時將其屬性設置為PROPERTY_ON。設置為PROPERTY_OFF時將會禁用那些不能在模塊窗口中使用的菜單。

你可以控制ATTACHMENTS,TRANSLATION, SUMMARY/DETAIL, and SELECT_ALL等菜單項的是否可用。

如果是一次只能顯示一條記錄的數據塊,則傳入SINGLE,將會禁用查看>記錄>第一個,查看>記錄>最后一條菜單項。原文中還提到了會禁用查看>記錄>上一條記錄和查看>記錄>下一條記錄,但是ebs中並沒有。

傳入ABOUT來禁用幫助>歷史記錄菜單項。

 

舉例:

APP_SPECIAL.ENABLE(’SPECIAL3’,PROPERTY_ON);

APP_SPECIAL.ENABLE(’SPECIAL’,PROPERTY_OFF); ---禁用所有的特殊菜單(比如當數據塊進入查詢模式時)

 

Function APP_SPECIAL.GET_CHECKBOX(

option_name varchar2 ------請傳入SPECIAL1_CHECKBOX到SPECIAL15_CHECKBOX中的一個值

)

RETURN varchar2;

描述:用來獲取菜單項旁邊有復選框的新增特殊菜單項的復選框的值,如果選中狀態,則返回TRUE這個字符串,否則返回FALSE這個字符串,如果菜單項不存在則會引發錯誤。

舉例:

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;

 

Procedure APP_SPECIAL.SET_CHECKBOX(

option_name varchar2, ------傳入SPECIAL1_CHECKBOX到SPECIAL15_CHECKBOX中的一個值

new_value varchar2    ------傳入字符串TRUE或者FALSE

);

描述:用於設置新增的帶有復選框的特殊菜單項旁邊的復選框的初始值,通常在初始化SPECIAL菜單項后調用。

舉例:

app_special.instantiate(’SPECIAL3_CHECKBOX’,’Spe&cial 3 Box with 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’);

 

同步更新

菜單欄項和工具欄項是否可用是由標准的表單級別的WHEN-NEW-RECORD-INSTANCE、WHEN-NEW-BLOCK-INSTANCE、WHEN-NEW-ITEM-INSTANCE等觸發器控制的。如果你更改了數據塊或者項目的屬性,菜單項和工具欄項不會立即更着更新除非其相應的觸發器觸發了。

比如將鼠標放在某個數據塊上,然后將數據塊的INSERT ALLOWED屬性設置為關閉狀態,此時需要調用如下代碼來同步更新菜單項和工具欄項:

APP_STANDARD.SYNCHRONIZE;

 

 

Procedure APP_POPUP.INSTANTIATE(

option_name varchar2,------ 到POPUP10,最后數字越大代表該新增菜單項越靠底部

txt varchar2,        ------菜單項顯示的文本

initially_enabled boolean default true, ----邏輯值,表示菜單項初始化時是否可用,傳入TRUE或者FALSE

separator varchar2 default null  ----如果希望在增加的菜單項的上面顯示一個分割線則傳入’LINE’。注意,右擊彈出菜單的新增的文件夾菜單項                                  ---下面的那個菜單項上面會自動加上分隔線。

);

描述:用於對文本項目的右擊快捷菜單增加最多10個菜單項。在項目級別或者數據塊級別的PRE-POPUP-MENU觸發器中調用,設置該觸發器的Execution Hierarchy 屬性為After。

舉例:

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

APP_POPUP.INSTANTIATE(’POPUP2’,’Second Entry’, TRUE,’LINE’);

APP_POPUP.INSTANTIATE(’POPUP3’,’Third Entry’, FALSE);

 

 

SPECIAL菜單舉例

    如果你想要的行為沒有自動提供,你可以使用APP_SPECIAL.ENABLE這個過程來動態控制菜單項。這么做首先要確定默認菜單控制器控制菜單項是否有問題,而且確實有必要覆蓋這個默認行為。

    如果菜單項不是由默認菜單控制器控制的,請使用合適的觸發器(一般是PRE-BLOCK或者WHEN-NEW-BLOCK-INSTANCE觸發器)增加如下的代碼:

app_special.enable(’the menu item’, PROPERTY_OFF|ON);

當你離開時使用合適的觸發器(一般都是POST-BLOCK觸發器)來使菜單項恢復原狀,代碼方法同上。

代碼中的then menu item參數應該使用菜單項的全稱,比如

app_special.enable(’CLEAR.FIELD’, PROPERTY_OFF);

如果菜單項是由默認菜單控制器控制的,你也想修改它是否可用,可以通過在項目級別或者數據塊級別的觸發器(主要指WHEN-NEW-BLOCK-INSTANCE、WHEN-NER-RECORD-INSTANCE、WHEN-NEW-ITEM-INSTANCE)中編寫代碼來解決,將該觸發器的Execution Hierarchy 屬性設置為Override,示例代碼如下:

app_standard.event(’TRIGGER_NAME’);

app_special.enable(’Menu_item’, PROPERTY_OFF|ON);

因為菜單項會在轉到其他數據塊時由默認菜單控制器自動設置,所以在離開數據塊或者記錄或者項目時不需要特意編寫代碼來恢復設置。

    影響菜單的常見錯誤編碼方法

v  一個項目或者數據塊的觸發器的Execution Hierarchy被設置為Before,但是它的邏輯在調用APP_STANDARD.EVENT( ) 時被重置了。

v  一個項目或者數據塊的觸發器的Execution Hierarchy被設置為Override,但是在撰寫邏輯類代碼前沒有調用APP_STANDARD.EVENT( )。

v  數據塊級別的QUERY ALLOWED, DELETE ALLOWED, INSERT ALLOWED設置錯誤。在任何時候,你更改了數據塊的屬性,要強迫刷新菜單欄((因為控制菜單欄的WHEN類觸發器,只有你的更改確實生效了才會觸發),請調用APP_STANDARD.SYNCHRONIZE。

v  控制塊使用了基表

假設你想在菜單欄和工具欄同時增加一個Book Order的項目,這個項目是第一個最頂層的菜單(一般是工具菜單)的第一個菜單項,同時還想在工具欄顯示個小圖標。還有就是它只是在數據塊Header 上可用,其余地方不可用。

解決方案:

l 步驟1:修改表單級別的PRE-FORM觸發器增加代碼

app_special.instantiate(’SPECIAL1’, ’&Book Order’, ’bkord’);

如果菜單項將來可能涉及到不同語言之間的轉換,請使用消息字典(Message Dictionary)或者參數或者靜態記錄組來存儲菜單的顯示文本。然后提取轉換后的值給一個變量,並將這個變量提供給這個過程,比如

app_special.instantiate(’SPECIAL1’, my_menu_entry, ’bkord’);

l 步驟2:修改表單級別的PRE-BLOCK觸發器增加代碼:

app_special.enable(’SPECIAL1’,PROPERTY_OFF);

l 對你想使用該菜單項的數據塊(本例中是Header數據塊)的PRE-BLOCK增加如下代碼來激活該菜單項和工具欄項:

app_special.enable(’SPECIAL1’,PROPERTY_ON);

l 對你想使用該菜單項的數據塊(本例中是Header數據塊)增加一個名稱為SPECIAL1的觸發器,撰寫你想在點擊該菜單項或者工具欄項時執行的功能。每次點擊都會執行這個觸發器。

在你的表單中增加工具欄項目小圖標

這個圖標應該放在虛擬目錄OA_MEDIA里面(請咨詢web 服務器管理員獲取該目錄信息),必須是標准gif格式圖片。請注意獲取這個圖片需要到服務器上下載到客戶機上,如果性能為關注的焦點的話,請盡量控制工具欄圖片的數量。

 

保存並繼續(Save and Process)菜單項

默認情況下,該菜單項執行保存后,將光標移至表單的第一個導航數據塊上的下一條記錄,你可以更改這種默認行為。

對表單級別的ACCEPT觸發器,沒有創建它並將其Execution Hierarchy 屬性設置為Override,並調用如下的代碼:

l APP_STANDARD.EVENT(’ACCEPT’) 調用它則使用的是默認行為。

l APP_STANDARD.EVENT(’ACCEPT:0’) 調用它與默認行為基本相同,只是焦點依然停留在當前數據塊。

l APP_STANDARD.EVENT(’ACCEPT:’) 調用它與默認行為基本相同,只是光標移到參數指定的數據塊。

l 其他合適的代碼。

 

右鍵菜單自定義

     Oracle應用程序為所有文本項目提供了默認的右鍵快捷菜單,當在文本項目上右擊時會彈出自適應的快捷菜單,你可以定制這個菜單,增加與應用程序特定相關的最多10個菜單項,這些新增的菜單項會放在文件夾和幫助這兩個菜單項之間,當然你還可以為你的新增菜單項增加分隔線

     為右擊快捷菜單每新增一個菜單項最少需要使用兩個觸發器。第一個觸發器是PRE-POPUP-MENU觸發器,可以根據需要放在數據塊級或者項目級。這個觸發器調用APP_POPUP.INSTANTIATE 來增加菜單項,這個過程可以傳入兩個參數,第一個是POPUPn(n為1到10的數字,是新增菜單項從上倒下排列的順序),第二個參數是要顯示的菜單項文本。請將觸發器PRE-POPUP-MENU的Execution Hierarchy 屬性設置為After,這樣你的這個觸發器就會在表單級別的PRE-POPUP-MENU觸發后觸發。(表達級別的PRE-POPUP-MENU觸發器先觸發確定用戶當前光標所在項目,然后設置為默認的右擊快捷菜單)。

第二個觸發器就是自定義的POPUPn(n為1到10的數字,是新增菜單項從上倒下排列的順序)觸發器,也就是選擇菜單項時執行的代碼,一般是項目級或者數據塊級的觸發器。請注意,即使光標所在項目是禁用的項目,選擇了右擊快捷菜單項也會執行其對應的功能,所以你在撰寫代碼時應該考慮到這種情況。

 

舉例

假設你想在右擊快捷菜單中增加一個Approve的菜單項(中文意思是審批通過),是新增的第一個特殊菜單項,只有在項目Requisition Number上可用,解決方案如下:

l 步驟1:項目Requisition Number的PRE-POPUP-MENU觸發器增加如下代碼,確保設置該觸發器的Execution Hierarchy 屬性為After。

app_popup.instantiate(‘POPUP1’, ’Approve’);

l 步驟2:對項目Requisition Number增加一個名稱為POPUP1的觸發器,撰寫合適的代碼來執行用戶選擇該菜單項時執行的功能。

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 ~  POPUP10的trigger中,應該在正確的level上建立這些trigger (通常是block/item level)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM