EBS Form: 有tab和無tab 的Foder Form 開發


一、建noTab的Folder Form:
1.創建數據庫對象:
  create table  和相應的view。

2.基於模板Template.fmb創建一個新的Form:****.fmb
  添加一個Library:APPFLDR.pll(目錄:$AU_TOP/Resource;打開后,系統詢問是否去掉絕對路徑,選擇YES)
  再打開APPSTAND.fmb:將其中的對象組STANDARD_FOLDER拖到自己的FORM中,選擇Subclass

3.添加窗口 window:
  設置屬性:Subclass information:WINDOW

4.添加畫布:MAIN(內容畫布) 和 CANVAS(堆疊畫布)
   MAIN的type為content ;
   CANVAS的type為stacked
           subclass:canvas_Stacked

5.添加數據塊:block(基於數據庫)、 block_prompt(放Title)
  設置對應屬性:subclass都為BLOCK
                畫布block :Number of Records Displayed--8
                            ShowScrolbar--YES
                            Scrollbar Canvas-- MAIN 設置滾動條顯示的畫布
========== 以下對數據塊block:======
6.添加觸發器:
  對數據塊block:添加支持FOLDER的Block級的Trigger:
  PRE-QUERY -- app_folder.event('PRE-QUERY');
  POST-QUERY -- app_folder.event('POST-QUERY');
                app_globe.event('POST-QUERY');
  WHEN-NEW-BLOCK-INSTANCE    app_folder.event('WHEN-NEW-BLOCK-INSTANCE');
  WHEN-NEW-RECORD-INSTANCE   app_folder.event('WHEN-NEW-RECORD-INSTANCE');
app_folder.event('KEY-PREV-ITEM');          
app_folder.event('KEY-NEXT-ITEM');
app_folder.event('KEY-PRVREC');
app_folder.event('KEY-NXTREC');
app_folder.event('KEY-CLRREC');
app_folder.event('KEY-EXEQRY');
app_folder.event('KEY-ENTQRY');
app_folder.event('PRE-BLOCK');
app_folder.event('POST-BLOCK');
app_folder.event('KEY-CLRBLK');
pre-insert    fnd_standard.set_who;
7.添加ITEM: Folder_Switcher and CURRENT_RECORD_indicator
  注:這兩個item要放置在塊的最上面。
  設置屬性:SWITCHER:
            item type:TEXT ITEM
            SUBCLASS : SWITCHER
            VISIBLE : yes
            canvas   :顯示在堆疊畫布CANVAS
            PROMPT   : 空
       ------------------------------
            indicator:
            ITEM TYPE: TEXT ITEM
            SUBCLASS : CURRENT_RECORD_INDICATOR
            VISIBLE  : YES
            CANVAS   : 顯示在內容畫布MAIN
            PROMPT   : 空
========== 以下對數據塊block_prompt:======
8.添加6個FOLDER特有的Item
注:放在block中的下方,順序為:by321 dummy title open
                itemtype      subclass     visible      canvas
FOLDER_OPEN :    push        folder_open     yes         MAIN
FOLDER_TITLE:   Display     dynamic_title    yes         MAIN
FOLDER_DUMMY:    TEXT        FOLDER_DUMMY    YES        TOOLBAR
ORDER_BY1:       PUSH        FOLDER_ORDERBY   NO         CANVAS
ORDER_BY2:       push        FOLDER_ORDERBY   no         canvas
ORDER_BY3:      push        FOLDER_ORDERBY   NO         CANVAS

9.添加與基於數據庫的block中的要顯示的item對應的用於顯示title的item
注:必須與之同名,寬度必須一致,且在block中的上下順序一致。
  設置屬性:ITEMtype : Display Item
            subclass : FOLDER_PROMPT_MULTIROW
            InitialValue:需要顯示的名稱
10.更改App_custom Package 中的一些代碼:
   將wnd='****' ---改為自己的窗口名:WINDOW
           
11.更改Form級Trigger
   pre-form: app_window.set_window_position('WINDOW','FISRT_WINDOW');--是顯示的第一個窗口
12.設置窗口的primary Canvas 為 主畫布MAIN

13.添加PACKAGE: Form_pkg
===============================================================
PACKAGE BODY Form_pkg IS
   procedure  new_form_instance is
begin

   --定義Folder
     app_folder.define_folder_block('Cup_ORDER_4040_2',--客戶化自定義名
    'block',--folder_block_name
    'block_prompt',--prompt_block_name
     'canvas',--folder_canvas_name
     'window',--folder_window_name
      null,--disabled_functions
      null,--tab_canvas_name
       null);--fixed_canvas_name
    app_folder.event('INSTANTIATE');
  SYNCHRONIZE;
   end;
END;

================================
14.更改Form級trigger
 
when-new-form-instance :
FDRCSID('$Header: TRNORD4040.fmb 120.0 2005/05/06 23:25  appldev ship                                                                                                                                                                                                                                                                    $');
APP_STANDARD.EVENT('WHEN-NEW-FORM-INSTANCE');
form_pkg.new_form_instance;
 
folder_action:  
app_folder.event(:global.folder_action);
 
when-window-resized: 
if :system.event_window in ('ORDER_MAIN') then
  app_folder.event('WHEN-WINDOW-RESIZED');
end if;

key-CLRFRM :
APP_STANDARD.EVENT('KEY-CLRFRM');
app_folder.event('KEY-CLRFRM');

   更改Item級trigger
folder_switcher:  when-new-item-instance : app_folder_move_cursor('1');
current_record_indicator:   when-new-item-instance:  app_folder_move_cursor('1');

 

 

二、建有Tab的Folder Form:

 

*與非tab不同之處:
1.固定列不再放在內容畫布上,而是放在子類型為canvas_stacked_fix_field的堆疊畫布上
2.API定義Folder時的參數不同,需指定:tab_canvas_name,fixed_canvas_name 兩個參數

 


*建Tab的Folder Form:
1.創建數據庫對象:
  create table  和相應的view。

2.基於模板Template.fmb創建一個新的Form:****.fmb
  添加一個Library:APPFLDR.pll(目錄:$AU_TOP/Resource;打開后,系統詢問是否去掉絕對路徑,選擇YES)
  再打開APPSTAND.fmb:將其中的對象組STANDARD_FOLDER拖到自己的FORM中,選擇Subclass

3.添加窗口 window:
  設置屬性:Subclass information:WINDOW

4.添加畫布:MAIN(內容畫布) 和 CANVAS(堆疊畫布)
   CANVAS的subclass:canvas_Stacked
  添加Tab類型的畫布MAIN_Tab
  設置屬性:CanvasType: Tab 
            subclass  :TAB_CANVAS
            VISIBLE   : YES
            WINDOW    :window
  對標簽頁設置label(顯示標題) 、設置subclass為TAB_PAGE


5.添加數據庫:block(基於數據庫)、 block_prompt(放Title)
  設置對應屬性:subclass都為BLOCK
                畫布block :Number of Records Displayed--8
                            ShowScrolbar--YES
                            Scrollbar Canvas-- ***FIX 設置垂直滾動條顯示的畫布(為fix畫布)
========== 以下對數據塊block:======
6.添加觸發器:
  對數據塊block:添加支持FOLDER的Block級的Trigger:
  PRE-QUERY -- app_folder.event('PRE-QUERY');
  POST-QUERY -- app_folder.event('POST-QUERY');
                app_globe.event('POST-QUERY');
  WHEN-NEW-BLOCK-INSTANCE    app_folder.event('WHEN-NEW-BLOCK-INSTANCE');
  WHEN-NEW-RECORD-INSTANCE   app_folder.event('WHEN-NEW-RECORD-INSTANCE');
app_folder.event('KEY-PREV-ITEM');          
app_folder.event('KEY-NEXT-ITEM');
app_folder.event('KEY-PRVREC');
app_folder.event('KEY-NXTREC');
app_folder.event('KEY-CLRREC');
app_folder.event('KEY-EXEQRY');
app_folder.event('KEY-ENTQRY');
app_folder.event('PRE-BLOCK');
app_folder.event('POST-BLOCK');
app_folder.event('KEY-CLRBLK');
 fnd_standard.set_who;
7.添加ITEM: Folder_Switcher and CURRENT_RECORD_indicator
  注:這兩個item要放置在塊的最上面。
  設置屬性:SWITCHER:
            item type:TEXT ITEM
            SUBCLASS : SWITCHER
            VISIBLE : yes
            canvas   :顯示在堆疊畫布CANVAS
            PROMPT   : 空
       ------------------------------
            indicator:
            ITEM TYPE: TEXT ITEM
            SUBCLASS : CURRENT_RECORD_INDICATOR
            VISIBLE  : YES
            CANVAS   : 顯示在內容畫布MAIN
            PROMPT   : 空
========== 以下對數據塊block_prompt:======
8.添加6個FOLDER特有的Item
注:放在block中的下方,順序為:by321 dummy title open
                itemtype      subclass     visible      canvas
FOLDER_OPEN :    push        folder_open     yes         MAIN---改為fix
FOLDER_TITLE:   Display     dynamic_title    yes         MAIN---改為fix
FOLDER_DUMMY:    TEXT        FOLDER_DUMMY    YES        TOOLBAR
ORDER_BY1:       PUSH        FOLDER_ORDERBY   NO         CANVAS--更改為fix
ORDER_BY2:       push        FOLDER_ORDERBY   no         canvas
ORDER_BY3:      push        FOLDER_ORDERBY   NO         CANVAS

9.添加與基於數據庫的block中的要顯示的item對應的用於顯示title的item
注:必須與之同名,寬度必須一致,且在block中的上下順序一致。
  設置屬性:ITEMtype : Display Item
            subclass : FOLDER_PROMPT_MULTIROW
            InitialValue:需要顯示的名稱
10.更改App_custom Package 中的一些代碼:
   將wnd='****' ---改為自己的窗口名:WINDOW
           
11.更改Form級Trigger
   pre-form: app_window.set_window_position('WINDOW','FISRT_WINDOW');--是顯示的第一個窗口
12.設置窗口的primary Canvas 為 主畫布MAIN

13.添加PACKAGE: Form_pkg
===============================================================
PACKAGE BODY Form_pkg IS
---------------------------
   procedure  new_form_instance is
begin

   --定義TabFolder
   app_folder.define_folder_block('Cup_ORDER_4040_2',
    'ORDER_LINES',--folder_block_name
    'ORDER_LINES_PROMPT',--prompt_block_name
     'ORDER_CREATE_PROMPT,ORDER_CREATE_PROMPT_ADDITION',--folder_canvas_name
     'ORDER_TAB',--folder_window_name
      null,--disabled_functions
      'MAIN_TAB',--tab_canvas_name
       'FIX');--fixed_canvas_name
    app_folder.event('INSTANTIATE');
  SYNCHRONIZE;
   end;

----------------------------------
/*隱藏標簽頁*/  
    PROCEDURE hide_main_tab( p_tab_name  varchar2) IS 
BEGIN
 IF p_tab_name = 'ORDER_CREATE_PROMPT' THEN
   hide_view('ORDER_CREATE_PROMPT_ADDITION'); 
 ELSIF p_tab_name = 'ORDER_CREATE_PROMPT_ADDITION' THEN  
   hide_view('ORDER_CREATE_PROMPT');
 END IF;
END hide_main_tab;
----------------------------------
/*定位光標*/ 
    PROCEDURE go_tab_first_item(p_tab_name  varchar2) IS
BEGIN
 IF p_tab_name = 'ORDER_CREATE_PROMPT'  THEN
  go_item('ORDER_LINES.ITEM_NUMBER');
 ELSIF p_tab_name = 'ORDER_CREATE_PROMPT_ADDITION' then
  go_item('ORDER_LINES.ADDITION1');
 END IF;
END go_tab_first_item;
----------------------------------
/*顯示標簽頁*/
    PROCEDURE show_main_tab( p_tab_name  varchar2) is 
begin
 IF p_tab_name = 'ORDER_CREATE_PROMPT'  THEN
  show_view('ORDER_CREATE_PROMPT');
  show_view('FIX');
  ELSIF p_tab_name = 'ORDER_CREATE_PROMPT_ADDITION' THEN
  show_view('ORDER_CREATE_PROMPT_ADDITION'); 
  show_view('FIX');    
 end if;
END show_main_tab;
----------------------------------
/*當切換tab頁*/
PROCEDURE when_tab_page_changed is
    new_tab varchar2(30) := :system.tab_new_page;
    prev_tab varchar2(30) := :system.tab_previous_page;
begin
      hide_main_tab(prev_tab);
      show_main_tab(new_tab);
      go_tab_first_item(new_tab);
end when_tab_page_changed;
----------------------------------
/*當隱藏item,不能隱藏第一個item*/
PROCEDURE folder_return_action is
BEGIN
 IF(:global.folder_action = 'CONFIRM-HIDE-FIELD') THEN
  IF :global.folder_field = 'ADDITION1' THEN
   :global.folder_action_allowed := 'FALSE';
  elsif :global.folder_field='ITEM_NUMBER' then
   :global.folder_action_allowed := 'FALSE';
  END IF;
 ELSIF (:global.folder_action = 'SET-WHERE-CLAUSE') THEN
  --:global.folder_action_allowed := 'FALSE';
  null;
  END IF;
END folder_return_action;
----------------------------------

/*When_New_Item_Instance */
PROCEDURE When_New_Item_Instance IS
 
  curr_canvas_name Varchar2(30) := get_item_property(Name_In('SYSTEM.CURSOR_ITEM'),item_canvas);
 
  current_tab varchar2(30)      := get_canvas_property('MAIN_TAB',topmost_tab_page);
  tab_canvas_name    Varchar2(30) := Name_In('SYSTEM.EVENT_CANVAS');
Begin     

 
 IF curr_canvas_name in ('ORDER_CREATE_PROMPT','ORDER_CREATE_PROMPT_ADDITION') THEN
    IF curr_canvas_name != current_tab THEN
      set_canvas_property('MAIN_TAB', topmost_tab_page, curr_canvas_name);
    END IF;
 END IF;

END When_New_Item_Instance;
----------------------------------
   
END;

================================
14.更改Form級trigger
 
when-new-form-instance :
FDRCSID('$Header: TRNORD4040.fmb 120.0 2005/05/06 23:25  appldev ship                                                                                                                                                                                                                                                                    $');
APP_STANDARD.EVENT('WHEN-NEW-FORM-INSTANCE');
form_pkg.new_form_instance;
 
folder_action:  
app_folder.event(:global.folder_action);
 
when-window-resized: 
if :system.event_window in ('ORDER_MAIN') then
  app_folder.event('WHEN-WINDOW-RESIZED');
end if;

key-CLRFRM :
APP_STANDARD.EVENT('KEY-CLRFRM');
app_folder.event('KEY-CLRFRM');

Folder_return_action: form_pkg.folder_return_action;


添加:when-tab-page-changed: form_pkg.when_tab_page_changed;

   更改Item級trigger
folder_switcher:  when-new-item-instance : app_folder_move_cursor('1');
current_record_indicator:   when-new-item-instance:  app_folder_move_cursor('1');


   更改block級trigger:--解決TAB鍵在各個item之間導航時,tab頁不變的問題
when-new-item-instance:form_pkg.when_new_item_instance;

 


免責聲明!

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



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