FORMS開發中FOLDER(資料夾)功能的應用

longwansheng發表於2008-11-04
FORMS開發中FOLDER(資料夾)功能的應用[@more@]

一、模板製作:YSFOLDER.FMB

開啟TEMPLATE.FMB,如果開啟的是APPSTAND.FMB,以下步驟省略

1FORM級觸發器:

1、 WHEN-NEW-FORM-INSTANCE後面新增以下程式碼:

--定義資料夾資料塊

app_folder.define_folder_block(

object_name => ' DETAILBLOCK _FOLDER' ,

folder_block_name => 'DETAILBLOCK',

prompt_block_name => 'DETAILBLOCK_PROMPT',

folder_canvas_name => 'DETAILBLOCK_STACKED',

folder_window_name => 'BLOCKNAME',

disabled_functions => '');

--以上引數均為VARCHAR2,長度不得超過20個字元

2、 增加FORM級觸發器:FOLDER_ACTION PL/SQL程式碼如下:

app_folder.event(:global.folder_action);

3、 增加FORM級觸發器:FOLDER_RETURN_ACTION PL/SQL程式碼如下:

null;

--

-- action code is in :global.folder_action

-- affected field is in :global.folder_field

--

2Attached Libraries

新增檔案:APPFLDR.PLL

來源:ERP安裝目錄下,AU目錄下查詢該類檔案所在的目錄

3Object Groups

繼承一個物件組:STANDARD_FOLDER

做法:複製APPSTAND.FMB中的同名物件,貼上到模板物件組中,選擇“Refence”(繼承),路徑方式選擇“Remove path”(不要路經)。

結果:將會把物件組中的所有物件對映新增到相應的物件節點中。

二、模板例子的製作

1、 修改WHEN-NEW-FORM-INSTANCE中資料夾資料塊定義語句中的引數,確定物件名稱(一般為form物件名稱)、資料夾資料塊名稱、標題塊名稱、堆疊畫布名稱、視窗名稱。

2、 定義視窗(windows),win_main:繼承屬性WINDOW_NORMAL

3、 定義堆疊畫布(stacked canvas-views, cv_detail_stacked:繼承屬性類CANVAS_STACKED

4、 定義資料夾資料塊(folder block),blk_detail:繼承屬性類BLOCK

(1) 觸發器:

· KEY-EXEQRY

app_folder.event('KEY-EXEQRY');

· KEY-NEXT-ITEM

app_folder.event('KEY-NEXT-ITEM');

· KEY-PREV-ITEM

app_folder.event('KEY-PREV-ITEM');

· POST-BLOCK

app_folder.event('POST-BLOCK');

· PRE-BLOCK

app_folder.event('PRE-BLOCK');

· WHEN-NEW-BLOCK-INSTANCE

App_folder.event('WHEN-NEW-BLOCK-INSTANCE');

· KEY_CLRBLK

App_folder.event(' KEY_CLRBLK ');

· KEY_ENTQRY

App_folder.event(' KEY_ENTQRY ');

· KEY_NXTREC

App_folder.event(' KEY_NXTREC ');

· KEY_PRVREC

App_folder.event(' KEY_PRVREC ');

· PRE_QUERY

App_folder.event(' PRE_QUERY ');

· WHEN-NEW-RECORD-INSTANCE

App_folder.event('WHEN-NEW-RECORD-INSTANCE');

(2) 定義資料項,可以是表項,也可以是非基表項,確定哪些項需要放在堆疊畫布上,注意只有在堆疊畫布上的項才能使用資料夾功能

(3) 注意:資料項的型別不能是:Display ItemList Item等;

可以是:Text ItemCheck Box等;

如果開啟folder時出現錯誤:“Set_Item_Property沒有這樣的屬性”,說明erp標準程式中用到的屬性在個別項中不存在,出現幾次就有幾個缺乏這個屬性的Item;是否擁有這個屬性,是由Item的型別確定的,因此有些Item型別不能用於folder功能。

(4) 確定各個項在畫布中的位置

5、 定義標題資料塊(prompt block, blk_detail_prompt:繼承屬性類BLOCK_DIALOG

便捷的做法:先複製資料夾資料塊blk_detail,改名稱,再刪去新塊下的全部觸發器,然後除去不需要的項,修改剩下所有項的屬性繼承FOLDER_PROMPT_MULTRIROW,最後將各個項的default value屬性值寫入對應的中文或英文標題

(1) 觸發器:無

(2) 標題項,來自資料夾資料塊blk_detail,屬性繼承自FOLDER_PROMPT_MULTIROWdefault value屬性值寫入相應的中英文標題

標題項必須和參與folder功能的資料項保持一一對應,名稱必須一致

(3) 資料夾功能項(6個):

· FOLDER_OPEN:屬性繼承FOLDER_OPEN

Canvas: CV_MAIN

· FOLDER_TITLE:屬性繼承DYNAMIC_TITLE

Canvas: CV_MAIN

· ORDER_BY1ORDER_BY2ORDER_BY3

屬性:

繼承FOLDER_ORDERBY

觸發器:

WHEN-BUTTON-PRESSED:

APP_FOLDER.EVENT('TOGGLE-ORDER-BY');

Canvas: CV_DETAIL_STACKED

FOLDER_OPENFOLDER_TITLE可見,放置在堆疊畫布的左上位置

(4) 確定各個項在畫布上的位置

(5) 注意:在資料夾資料塊中,項的初始寬度由同名的標題項的寬度確定,而且只有存在標題項的資料夾資料項才能使用資料夾功能。設計時,應該將資料夾資料塊中項的寬度與標題塊中項的寬度保持一致

(6) 如果資料夾資料塊在第一個視窗,可能會出現初次進入視窗標題項沒有顯示的現象,需要在form級觸發器when-new-form-instance中,在導航到控制塊之前,先將導航到標題塊,例如:

GO_BLOCK(‘BLK_DETAIL_PROMPT’);

GO_BLOCK(‘BLOCKCONTROL’);

(7) Q&A

三、基於模板的開發過程

1.模板名:XZ_FOLDER.fmb

2.模板說明:

2.1 APP_FOLDER.DEFINE_FOLDER_BLOCK引數說明

'XZ_FOLDER'àMODULE NAME ,表單名稱

'BLK_DETAIL'àFOLDER資料塊名稱

'BLK_DETAIL_PROMPT'àFOLDER標題塊名稱

'CAVSTACK'àFOLDER資料塊所在畫布

'WINFOLDER'à FOLDER資料塊所在畫布所屬的視窗

2.2資料塊

2.2.1 BLK_DETAILàFOLDER資料塊

2.2.2 BLK_DETAIL_PROMPTàFOLDER標題塊

其中的:FOLDER_OPENFOLDER_TITLEORDER_BY1ORDER_BY2ORDER_BY3,不用動。

2.3畫布

'CAVSTACK'àFOLDER資料塊所在畫布,堆疊型別

'CAVMAIN'àcontent型別, CAVSTACK堆疊在其上邊。

2.4視窗

3修改過程

3.1修改form級觸發器WHEN-NEW-FORM-INSTANCEAPP_FOLDER.DEFINE_FOLDER_BLOCK('XZ_FOLDER','BLK_DETAIL','BLK_DETAIL_PROMPT','CAVSTACK','WINFOLDER','ENABLED');

在模板xz_folder.fmb基礎上開發程式時,把‘XZ_FOLDER’替換為自己的表單名即可。

3.2修改資料塊BLK_DETAIL,在模板塊的基礎上改資料來源,增刪資料項

3.3修改資料塊BLK_DETAIL_ PROMPT在模板塊的基礎上增刪項,BLK_DETAIL中的項一一對應。

3.4調整畫布輸出及大小格式

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/92289/viewspace-1012943/,如需轉載,請註明出處,否則將追究法律責任。

相關文章