一、建noTab的Folder Form:
1.創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象:
create table 和相應(yīng)的view。
2.基于模板Template.fmb創(chuàng)建一個(gè)新的Form:****.fmb
添加一個(gè)Library:APPFLDR.pll(目錄:$AU_TOP/Resource;打開(kāi)后,系統(tǒng)詢(xún)問(wèn)是否去掉絕對(duì)路徑,選擇YES)
再打開(kāi)APPSTAND.fmb:將其中的對(duì)象組STANDARD_FOLDER拖到自己的FORM中,選擇Subclass
3.添加窗口 window:
設(shè)置屬性:Subclass information:WINDOW
4.添加畫(huà)布:MAIN(內(nèi)容畫(huà)布) 和 CANVAS(堆疊畫(huà)布)
MAIN的type為content ;
CANVAS的type為stacked
subclass:canvas_Stacked
5.添加數(shù)據(jù)塊:block(基于數(shù)據(jù)庫(kù))、 block_prompt(放Title)
設(shè)置對(duì)應(yīng)屬性:subclass都為BLOCK
畫(huà)布block :Number of Records Displayed--8
ShowScrolbar--YES
Scrollbar Canvas-- MAIN 設(shè)置滾動(dòng)條顯示的畫(huà)布
========== 以下對(duì)數(shù)據(jù)塊block:======
6.添加觸發(fā)器:
對(duì)數(shù)據(jù)塊block:添加支持FOLDER的Block級(jí)的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
注:這兩個(gè)item要放置在塊的最上面。
設(shè)置屬性:SWITCHER:
item type:TEXT ITEM
SUBCLASS : SWITCHER
VISIBLE : yes
canvas :顯示在堆疊畫(huà)布CANVAS
PROMPT : 空
------------------------------
indicator:
ITEM TYPE: TEXT ITEM
SUBCLASS : CURRENT_RECORD_INDICATOR
VISIBLE : YES
CANVAS : 顯示在內(nèi)容畫(huà)布MAIN
PROMPT : 空
========== 以下對(duì)數(shù)據(jù)塊block_prompt:======
8.添加6個(gè)FOLDER特有的Item
注:放在block中的下方,順序?yàn)椋篵y321 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.添加與基于數(shù)據(jù)庫(kù)的block中的要顯示的item對(duì)應(yīng)的用于顯示title的item
注:必須與之同名,寬度必須一致,且在block中的上下順序一致。
設(shè)置屬性:ITEMtype : Display Item
subclass : FOLDER_PROMPT_MULTIROW
InitialValue:需要顯示的名稱(chēng)
10.更改App_custom Package 中的一些代碼:
將wnd='****' ---改為自己的窗口名:WINDOW
11.更改Form級(jí)Trigger
pre-form: app_window.set_window_position('WINDOW','FISRT_WINDOW');--是顯示的第一個(gè)窗口
12.設(shè)置窗口的primary Canvas 為 主畫(huà)布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',--客戶(hù)化自定義名
'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級(jí)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級(jí)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.固定列不再放在內(nèi)容畫(huà)布上,而是放在子類(lèi)型為canvas_stacked_fix_field的堆疊畫(huà)布上
2.API定義Folder時(shí)的參數(shù)不同,需指定:tab_canvas_name,fixed_canvas_name 兩個(gè)參數(shù)
*建Tab的Folder Form:
1.創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象:
create table 和相應(yīng)的view。
2.基于模板Template.fmb創(chuàng)建一個(gè)新的Form:****.fmb
添加一個(gè)Library:APPFLDR.pll(目錄:$AU_TOP/Resource;打開(kāi)后,系統(tǒng)詢(xún)問(wèn)是否去掉絕對(duì)路徑,選擇YES)
再打開(kāi)APPSTAND.fmb:將其中的對(duì)象組STANDARD_FOLDER拖到自己的FORM中,選擇Subclass
3.添加窗口 window:
設(shè)置屬性:Subclass information:WINDOW
4.添加畫(huà)布:MAIN(內(nèi)容畫(huà)布) 和 CANVAS(堆疊畫(huà)布)
CANVAS的subclass:canvas_Stacked
添加Tab類(lèi)型的畫(huà)布MAIN_Tab
設(shè)置屬性:CanvasType: Tab
subclass :TAB_CANVAS
VISIBLE : YES
WINDOW :window
對(duì)標(biāo)簽頁(yè)設(shè)置label(顯示標(biāo)題) 、設(shè)置subclass為T(mén)AB_PAGE
5.添加數(shù)據(jù)庫(kù):block(基于數(shù)據(jù)庫(kù))、 block_prompt(放Title)
設(shè)置對(duì)應(yīng)屬性:subclass都為BLOCK
畫(huà)布block :Number of Records Displayed--8
ShowScrolbar--YES
Scrollbar Canvas-- ***FIX 設(shè)置垂直滾動(dòng)條顯示的畫(huà)布(為fix畫(huà)布)
========== 以下對(duì)數(shù)據(jù)塊block:======
6.添加觸發(fā)器:
對(duì)數(shù)據(jù)塊block:添加支持FOLDER的Block級(jí)的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
注:這兩個(gè)item要放置在塊的最上面。
設(shè)置屬性:SWITCHER:
item type:TEXT ITEM
SUBCLASS : SWITCHER
VISIBLE : yes
canvas :顯示在堆疊畫(huà)布CANVAS
PROMPT : 空
------------------------------
indicator:
ITEM TYPE: TEXT ITEM
SUBCLASS : CURRENT_RECORD_INDICATOR
VISIBLE : YES
CANVAS : 顯示在內(nèi)容畫(huà)布MAIN
PROMPT : 空
========== 以下對(duì)數(shù)據(jù)塊block_prompt:======
8.添加6個(gè)FOLDER特有的Item
注:放在block中的下方,順序?yàn)椋篵y321 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.添加與基于數(shù)據(jù)庫(kù)的block中的要顯示的item對(duì)應(yīng)的用于顯示title的item
注:必須與之同名,寬度必須一致,且在block中的上下順序一致。
設(shè)置屬性:ITEMtype : Display Item
subclass : FOLDER_PROMPT_MULTIROW
InitialValue:需要顯示的名稱(chēng)
10.更改App_custom Package 中的一些代碼:
將wnd='****' ---改為自己的窗口名:WINDOW
11.更改Form級(jí)Trigger
pre-form: app_window.set_window_position('WINDOW','FISRT_WINDOW');--是顯示的第一個(gè)窗口
12.設(shè)置窗口的primary Canvas 為 主畫(huà)布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;
----------------------------------
/*隱藏標(biāo)簽頁(yè)*/
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;
----------------------------------
/*定位光標(biāo)*/
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;
----------------------------------
/*顯示標(biāo)簽頁(yè)*/
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;
----------------------------------
/*當(dāng)切換tab頁(yè)*/
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;
----------------------------------
/*當(dāng)隱藏item,不能隱藏第一個(gè)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級(jí)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級(jí)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級(jí)trigger:--解決TAB鍵在各個(gè)item之間導(dǎo)航時(shí),tab頁(yè)不變的問(wèn)題
when-new-item-instance:form_pkg.when_new_item_instance;