成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

詳談彈性域用法

彈性域的使用彈性域分為鍵彈性域和說(shuō)明性彈性域,本文就針對(duì)這兩種彈性域在二次開(kāi)發(fā)中使用進(jìn)行舉例說(shuō)明,并附帶說(shuō)明彈性域中經(jīng)常使用的值集一、彈性域開(kāi)發(fā)中需要做的前期工作1.注冊(cè)一個(gè)可以使用彈性域的表,字段本

彈性域的使用

彈性域分為鍵彈性域和說(shuō)明性彈性域,本文就針對(duì)這兩種彈性域在二次開(kāi)發(fā)中使用進(jìn)行舉例說(shuō)明,并附帶說(shuō)明彈性域中經(jīng)常使用的值集

一、彈性域開(kāi)發(fā)中需要做的前期工作

1.注冊(cè)一個(gè)可以使用彈性域的表,字段

本范例全部以如下對(duì)象為基礎(chǔ),進(jìn)行彈性域的說(shuō)明

CREATE TABLE FLEX_LN(

NAME VARCHAR2(20),

AGE NUMBER,

DEPT VARCHAR2(20),

ATTRIBUTE1 VARCHAR2(250),

ATTRIBUTE2 VARCHAR2(250),

ATTRIBUTE3 VARCHAR2(250),

ATTRIBUTE4 VARCHAR2(250),

ATTRIBUTE_CATEGORY VARCHAR2(250)

);

注冊(cè)數(shù)據(jù)庫(kù)表,列

系統(tǒng)中的數(shù)據(jù)庫(kù)表和列的注冊(cè)旨在支持系統(tǒng)的彈性域和預(yù)警系統(tǒng)兩個(gè)特性如果不需要這些特性不需要注冊(cè)

表.注冊(cè)方法: 用如下的過(guò)程注冊(cè)表

AD_DD.register_table (

p_appl_short_name in varchar2,

p_tab_name in varchar2,

p_tab_type in varchar2,

p_next_extent in number default 512,

p_pct_free in number default 10,

p_pct_used in number default 70);

如我們需要注冊(cè)表 FLEX_LN 用如下的語(yǔ)句在EDV 應(yīng)用中注冊(cè):

EXECUTE ad_dd.register_table('EDV','FLEX_LN','T');

這里說(shuō)明下,EDV是在系統(tǒng)注冊(cè)過(guò)的一個(gè)應(yīng)用簡(jiǎn)稱,二次開(kāi)發(fā)的程序,最好重新注冊(cè)一個(gè)應(yīng)用,這樣便

于今后的管理。如下圖:

(當(dāng)然注冊(cè)一個(gè)應(yīng)用的方法本文不在敘述)

注冊(cè)表中的列(彈性域列)方法如下.

begin

ad_dd.register_column('EDV','FLEX_LN','ATTRIBUTE1',1, 'VARCHAR2', 250,'Y', 'N');

ad_dd.register_column('EDV','FLEX_LN','ATTRIBUTE2',2, 'VARCHAR2', 250,'Y', 'N');

ad_dd.register_column('EDV','FLEX_LN','ATTRIBUTE3',3, 'VARCHAR2', 250,'Y', 'N');

ad_dd.register_column('EDV','FLEX_LN','ATTRIBUTE4',4, 'VARCHAR2', 250,'Y', 'N');

ad_dd.register_column('EDV','FLEX_LN','ATTRIBUTE_CATEGORY',5, 'VARCHAR2',250,'Y', 'N');

end;

COMMIT;

看我們是否注冊(cè)成功可以查看FND_TABLES/FND_COLUMNS 中是否存在我們已經(jīng)注冊(cè)的表和列,

如果我們想刪除我們的注冊(cè)可以引用下面的相應(yīng)的過(guò)程.

procedure delete_table (p_appl_short_name in varchar2,p_tab_name in varchar2);

procedure delete_column (p_appl_short_name in varchar2,

p_tab_name in varchar2,

p_col_name in varchar2);

注冊(cè)說(shuō)明性彈性域

注冊(cè)如圖所示:

,

應(yīng)用:選擇注冊(cè)的應(yīng)用

名稱:填寫(xiě)注冊(cè)說(shuō)明彈性域的名稱(必須唯一)

標(biāo)題:彈性域的標(biāo)題,在今后的應(yīng)用中,此說(shuō)明彈性域?qū)?huì)在窗口標(biāo)題上顯示在此定義的標(biāo)題內(nèi)容

說(shuō)明:

表應(yīng)用:在注冊(cè)表,列時(shí)指定的應(yīng)用(appl_short_name)

表名: 選擇注冊(cè)的表名稱

結(jié)構(gòu)列:必須也是存在于注冊(cè)過(guò)的列,結(jié)構(gòu)列的意義就是存放說(shuō)明性彈性域上下文提示的值

上下文提示:是在說(shuō)明性彈性域上下文字段的標(biāo)題描述

參考字段BUTTON里,如下界面

上面的界面是輸入界面,系統(tǒng)提供輸入,這里可以輸入多個(gè)記錄,當(dāng)然最終只能有一個(gè)字段來(lái)起作用,需要在段里指定。

字段名:必須與彈性域中選擇的表中的字段一致。

說(shuō)明:對(duì)字段的描述性文字

參考字段的含義:

參考字段的主要作用是 與結(jié)構(gòu)列的作用類似,可以在不選擇上下文字段的情況下,系統(tǒng)根據(jù)參考字段的含義來(lái)對(duì)應(yīng)顯示不用的彈性域,

舉例說(shuō)明:例如參考字段為 NAME,則在系統(tǒng)中輸入NAME信息后,系統(tǒng)會(huì)自動(dòng)根據(jù)NAME的信息來(lái)確定顯示什么樣的彈性域,這樣就可以避免來(lái)選擇上下文來(lái)顯示需要的彈性域。

列BUTTON里,如下界面

這里面顯示的是注冊(cè)后的列字段(如果填寫(xiě)了結(jié)構(gòu)列字段,則這里面將不在顯示結(jié)構(gòu)列字段,因?yàn)橄到y(tǒng)認(rèn)為結(jié)構(gòu)列字段

與彈性字段是不同的)

,

如果對(duì)某個(gè)彈性字段不需要,可以將起用CHECK ED 失效,這樣在構(gòu)造彈性域的時(shí)候,此彈性字段不會(huì)作用顯示系統(tǒng)注冊(cè)完彈性域的名稱后,下一步需要配置彈性域的彈性字段

界面如下:

此處的界面需要重點(diǎn)注意的地方:

上下文字段

->提示:這里的提示是上下文PROMPT的信息,在這里輸入信息后,在注冊(cè)彈性域 “上下文提示” 欄的內(nèi)容,兩者的內(nèi)容是一致的

->值集:為上下文字段的內(nèi)容提供一個(gè)值的LOV形式選擇,

以本例說(shuō)明:值集SET_VALUE_DESC_FLEX中包括的信息是“彈性一”、“彈性二”,這樣,就可以根據(jù)選擇不同的信息來(lái)實(shí)現(xiàn)不同的彈性域,而且,選擇的上下文字段信息(此處就是彈性域上下文AAAA欄)會(huì)保存在結(jié)構(gòu)列中。

->默認(rèn)值: 設(shè)定上下文的默認(rèn)值

->參考字段:此處系統(tǒng)提供的是一個(gè)LOV輸入,此處LOV里的數(shù)據(jù)來(lái)源于在注冊(cè)彈性域里的時(shí)候“參考字段:”BUTTON里的輸入記錄。

參考字段的含義是,可以以其他字段的輸入記錄來(lái)判斷是否顯示哪種彈性域。

上下文字段值

這里可以定義多個(gè)彈性域段:比如 彈性域1=彈性字段1 彈性字段2

彈性域2=彈性字段1 彈性字段2 彈性字段3

彈性域3=彈性字段1 彈性字段2 彈性字段3 彈性字段4

這里需要說(shuō)明下:每個(gè)彈性的段信息中,都有一個(gè)默

認(rèn)的段定義 Global Data Elements

,

彈性域Global Data Elements 的段結(jié)構(gòu)如下:

如果我們定義的彈性域只有一種段結(jié)構(gòu)的話,可以直接在 Global Data Elements段中進(jìn)行定義,如果有多個(gè)的話,需要在另創(chuàng)建記錄進(jìn)行段定義的需要,有一點(diǎn)需要說(shuō)明的是,一旦有注冊(cè)了的字段在 Global Data Elements中定義了結(jié)構(gòu)的話,那么用戶自己在創(chuàng)建其他的段結(jié)構(gòu),則不會(huì)顯示在Global Data Elements中使用了的字段

具體定義彈性域中需要那些彈性字段,需要在“段”BUTTON里的界面中進(jìn)行定義

如 彈性一 的段結(jié)構(gòu)

彈性二 的段結(jié)構(gòu)

,

以本文中的為例進(jìn)行說(shuō)明: Global Data Elements 段中定義了一個(gè) ATTRIBUTE1字段,那么在彈性一、彈性二中的段定義的時(shí)候,無(wú)法在選擇 ATTRIBUTE1這個(gè)字段。

針對(duì)此彈性域的配置,在實(shí)際使用中的說(shuō)明:

圖中紅色框代表的是加載說(shuō)明性彈性域的字段,點(diǎn)擊此處,便可出現(xiàn)彈性域的結(jié)構(gòu)。 由于在系統(tǒng)設(shè)置彈性域段的時(shí)候,給上下文段一個(gè)默認(rèn)值 = “彈性一” 則系統(tǒng)會(huì)自動(dòng)將彈性一的段結(jié)構(gòu)給顯示出來(lái)(定義了三個(gè)彈性字段TITLE分別為10、15、20),由于此彈性域還定義了一個(gè)Global Data Elements 的段結(jié)構(gòu),則系統(tǒng)會(huì)將Global Data Elements 顯示在最前面,作為整個(gè)彈性域的公共字段(不論彈性域上下文AAAA選擇的是“彈性一、彈性二”)

整個(gè)彈性域都將會(huì)顯示 Global Data Elements的段結(jié)構(gòu)。

選擇“彈性二”

后的界面如下:

,

下面在圖文說(shuō)明下 定義的參考字段“NAME ”的作用

在應(yīng)用彈性域界面中 在“NAME ”欄輸入 “彈性一”,選擇彈性欄位 得到的結(jié)果如下

如果在“NAME ”欄輸入 “彈性二” 選擇彈性欄位 得到的結(jié)果如下

從以上兩個(gè)圖可以說(shuō)明 參考字段也可以決定需要顯示的彈性結(jié)構(gòu)。

在這里需要提一個(gè):

參考字段 上下文段(不顯示 不需要) 這樣就可以在界面中動(dòng)態(tài)的控制彈性的結(jié)構(gòu),而不需要來(lái)選擇上下文的內(nèi)容當(dāng)然,參考字段與上下文段還是有所區(qū)別的,在參考字段輸入“彈性一”后,雖然顯示的是彈性一的段結(jié)構(gòu),然而也可以在選擇上下文段的值來(lái)重新選擇需要的段結(jié)構(gòu),這樣的話,參考字段的值=彈性一,而上下文的值=彈性二,也就是說(shuō),參考字段的作用是在于初始話一個(gè)彈性域的結(jié)構(gòu),一旦該彈性段有值以后,就不在作用了。真正跟彈性結(jié)構(gòu)相關(guān)的字段還是結(jié)構(gòu)列字段,也就是上下文段

這里可以看到,雖然參考字段是“彈性二”,但可以在繼續(xù)

選擇上下文來(lái)需要相應(yīng)的段結(jié)構(gòu)。

,

編寫(xiě)FORM設(shè)置和彈性域

1:加入非基表域用于容納彈性域,我們做一個(gè)ITEM叫DESC_FLEX 注意這個(gè)ITEM的CLASS屬性為 TEXT_ITEM, LOV處選擇ENABLE_LIST_LAMP,并把檢查有效性設(shè)為NO。

2:FORM中要包含所設(shè)置的彈性域如ATTRIBUTE_CATEGORY,ATTRIBUTE1,ATTRIBUTE2…... 注意這些域?yàn)榛眄?xiàng), 設(shè)置CANVANS為NULL或者顯示在畫(huà)布上都可以

3:把DESC_FLEX放在CANVANS上,弄成彈性域的樣子. 設(shè)置其屬性:值列表=ENABLE_LIST_LAMP 從列表中驗(yàn)證=否四:在FORM中注冊(cè)彈性域

為了FORM識(shí)別彈性域,在FORM級(jí)別的W HEN -NE W _FORM_INSTANCE 上加上如下的代碼

FND_DESCR_FLEX.DEFINE('FLEX_LN', -- FORM中的BLOCK NAME

FIELD =>'DESC_FLEX', -- FORM中的彈性域的ITEM NAME

APPL_SHORT_NAME=>'EDV', -- 注冊(cè)彈性域在那個(gè)USER下

DESC_FLEX_NAME=>'FLEX_LN'); -- 注冊(cè)彈性域的名稱

具體參數(shù)及意思.如下

含有彈性域的BLOCK叫FLEX_LN

DESC_FLEX我們命名的那個(gè)容納彈性域的域.

FLEX_LN 我們注冊(cè)的那個(gè)彈性域的名稱.

五:加入觸發(fā)器以支持彈性域.

分別在BLOCK級(jí)別加入如下的觸發(fā)器.

PRE -Q UERY

PRE -UPDATE

PRE -INSERT

POST -Q UERY

其觸發(fā)器的代碼分別對(duì)應(yīng)

FND_FLEX.EVENT('PRE-Q UERY ');

FND_FLEX.EVENT('PRE-UPDATE ');

FND_FLEX.EVENT('PRE-INSERT ');

FND_FLEX.EVENT('POST-Q UERY ');

在容納彈性域的域ITEM級(jí)別加入如下的觸發(fā)器

W HEN -VALIDATE_ITEM

FND_FLEX.EVENT('W HEN -VALIDATE -ITEM');

至此我們完成了本FORM ,只要打開(kāi)彈性域我們就可以像用系統(tǒng)彈性域一樣用這些彈性域了。

手工刪除說(shuō)明性彈性域腳本:

/* 刪除說(shuō)明性彈性域的段結(jié)構(gòu) */

DELETE FND_DESCR_FLEX_COL_USAGE_TL W HERE (APPLICATION_ID=660) and (DESCRIPTIVE_FLEXFIELD_NAME LIK E 'FLEX_LN')

/* 刪除說(shuō)明性彈性域的段 */

DELETE FND_DESCR_FLEX_CONTEXTS_TL W HERE (APPLICATION_ID=660) and (DESCRIPTIVE_FLEXFIELD_NAME LIK E 'FLEX_LN')

DELETE FND_DESCR_FLEX_COLUMN_USAGES W HERE (APPLICATION_ID=660) and (DESCRIPTIVE_FLEXFIELD_NAME LIK E 'FLEX_LN')

/* 刪除說(shuō)明性彈性域的注冊(cè)信息 */

DELETE FND_DESCRIPTIVE_FLEXS_TL A W HERE A.APPLICATION_ID=660 AND A.DESCRIPTIVE_FLEXFIELD_NAME='FLEX_LN';注冊(cè)鍵彈性域

鍵彈性域的注冊(cè)如下圖

,

應(yīng)用:選擇注冊(cè)的應(yīng)用

代碼:填寫(xiě)注冊(cè)鍵彈性域的CODE(必須唯一,最多四個(gè)字符,在調(diào)用鍵彈性域必須使用的值) 標(biāo)題:鍵彈性域的標(biāo)題,在今后的應(yīng)用中,此鍵彈性域?qū)?huì)在窗口標(biāo)題上顯示在此定義的標(biāo)題內(nèi)容 說(shuō)明:

表應(yīng)用:在注冊(cè)表,列時(shí)指定的應(yīng)用(appl_short_name)

表名: 選擇注冊(cè)的表名稱

結(jié)構(gòu)列:必須也是存在于注冊(cè)過(guò)的列,結(jié)構(gòu)列的意義就是存放鍵彈性域使用的是哪個(gè)段結(jié)構(gòu)的代碼 唯一標(biāo)識(shí)列:是記錄鍵彈性域唯一的值,要找到健彈性域的具體含義,必須通過(guò)此唯一標(biāo)識(shí)列 定義鍵彈性域的段結(jié)構(gòu),如下圖

點(diǎn)擊“段”按紐

進(jìn)行定義:

,

此處定義段結(jié)構(gòu)與說(shuō)明性彈性域一致,在此不再多說(shuō)。

鍵彈性域的開(kāi)發(fā)例子:

/***************************在客戶化的用戶下*******************************/

/* 鍵應(yīng)用表 */

CREATE TABLE T_K EY_FLEX

(

K EY_ID NUMBER , /* 鍵彈性域唯一值 */

AGE NUMBER ,

NAME VARCHAR2(30) ,

DEPT VARCHAR2(30) ,

TYPE VARCHAR2(30)

);

/* 創(chuàng)建存放鍵彈性域的結(jié)構(gòu)表 */

CREATE TABLE FLEX_LN_K EY

(

K EY_FLEX_STRUCTURE_ID NUMBER ,

K EY_FLEX_ID NUMBER ,

SUMMARY_FLAG VARCHAR2(1) , /* 必須有此字段 */

ENABLED_FLAG VARCHAR2(1) , /* 必須有此字段 */

START_DATE_ACTIVE DATE , /* 必須有此字段 */

END_DATE_ACTIVE DATE , /* 必須有此字段 */

LAST_UPDATED_BY NUMBER , /* 必須有此字段 */

LAST_UPDATE_DATE DATE , /* 必須有此字段 */

SEGMENT1 VARCHAR2(30) ,

SEGMENT2 VARCHAR2(30) ,

SEGMENT3 VARCHAR2(30) ,

SEGMENT4 VARCHAR2(30) ,

SEGMENT5 VARCHAR2(30) ,

SEGMENT6 VARCHAR2(30) ,

SEGMENT7 VARCHAR2(30) ,

SEGMENT8 VARCHAR2(30) ,

SEGMENT9 VARCHAR2(30) ,

SEGMENT10 VARCHAR2(30) ,

SEGMENT11 VARCHAR2(30) ,

SEGMENT12 VARCHAR2(30) ,

SEGMENT13 VARCHAR2(30) ,

SEGMENT14 VARCHAR2(30) ,

SEGMENT15 VARCHAR2(30)

);

/* 必須要?jiǎng)?chuàng)建一個(gè)與鍵結(jié)構(gòu)表對(duì)應(yīng)的序列 */

CREATE SEQ UENCE FLEX_LN_K EY_S START W ITH 1; --創(chuàng)建存放鍵彈性域表的對(duì)應(yīng)序列(鍵彈性域表名 "_S" ) /***************************在公共用戶APPS下*******************************/

conn apps/apps@egtc

/* 創(chuàng)建同義詞 */

CREATE SYNONYM FLEX_LN_K EY FOR ERP_dev.FLEX_LN_K EY ;

CREATE SYNONYM T_K EY_FLEXFOR ERP_dev.T_K EY_FLEX ;

CREATE SYNONYM FLEX_LN_K EY_SFOR ERP_dev.FLEX_LN_K EY_S;

/* 注冊(cè)鍵結(jié)構(gòu)表和字段 */

EXECUTE ad_dd.register_table('EDV', 'FLEX_LN_K EY', 'T');

EXECUTE ad_dd.register_column('EDV', 'FLEX_LN_K EY', 'K EY_FLEX_STRUCTURE_ID', 1, 'NUMBER', 38, 'Y','N' );EXECUTE ad_dd.register_column('EDV', 'FLEX_LN_K EY', 'K EY_FLEX_ID', 2, 'NUMBER', 38, 'Y', 'N' );EXECUTE ad_dd.register_column('EDV', 'FLEX_LN_K EY', 'SEGMENT1', 3, 'VARCHAR2', 30, 'Y', 'N' );

EXECUTE ad_dd.register_column('EDV', 'FLEX_LN_K EY', 'SEGMENT2', 4, 'VARCHAR2', 30, 'Y', 'N' );

EXECUTE ad_dd.register_column('EDV', 'FLEX_LN_K EY', 'SEGMENT3', 5, 'VARCHAR2', 30, 'Y', 'N' );

EXECUTE ad_dd.register_column('EDV', 'FLEX_LN_K EY', 'SEGMENT4', 6, 'VARCHAR2', 30, 'Y', 'N' );

EXECUTE ad_dd.register_column('EDV', 'FLEX_LN_K EY', 'SEGMENT5', 7, 'VARCHAR2', 30, 'Y', 'N' );

,

EXECUTE ad_dd.register_column('EDV', 'FLEX_LN_K EY', 'SEGMENT6', 8, 'VARCHAR2', 30, 'Y', 'N' );

EXECUTE ad_dd.register_column('EDV', 'FLEX_LN_K EY', 'SEGMENT7', 9, 'VARCHAR2', 30, 'Y', 'N' );

EXECUTE ad_dd.register_column('EDV', 'FLEX_LN_K EY', 'SEGMENT8', 10, 'VARCHAR2', 30, 'Y', 'N' );

EXECUTE ad_dd.register_column('EDV', 'FLEX_LN_K EY', 'SEGMENT9', 11, 'VARCHAR2', 30, 'Y', 'N' );

EXECUTE ad_dd.register_column('EDV', 'FLEX_LN_K EY', 'SEGMENT10',12, 'VARCHAR2', 30, 'Y', 'N' );

EXECUTE ad_dd.register_column('EDV', 'FLEX_LN_K EY', 'SEGMENT11', 13, 'VARCHAR2', 30, 'Y','N' );

EXECUTE ad_dd.register_column('EDV', 'FLEX_LN_K EY', 'SEGMENT12', 14, 'VARCHAR2', 30, 'Y','N' );

EXECUTE ad_dd.register_column('EDV', 'FLEX_LN_K EY', 'SEGMENT13', 15, 'VARCHAR2', 30, 'Y','N' );

EXECUTE ad_dd.register_column('EDV', 'FLEX_LN_K EY', 'SEGMENT14', 16, 'VARCHAR2', 30, 'Y','N' );

EXECUTE ad_dd.register_column('EDV', 'FLEX_LN_K EY', 'SEGMENT15',17, 'VARCHAR2', 30, 'Y', 'N' );

COMMIT;

FORM程序語(yǔ)法:

FND_K EY_FLEX.DEFINE (

BLOC K => 'T_K EY_FLEX', -- 操作的BLOCK

FIELD => 'K EY_FLEXITEM', -- 創(chuàng)建的ITEM,用來(lái)容納鍵彈性域

ID => 'K EY_ID', --保存K EY彈性域的唯一值

APPL_SHORT_NAME => 'EDV',

CODE => 'K _LN', -- 鍵彈性域的注冊(cè)代碼 fnd_id_flex_structures.id_flex_code

NUM => '101' --fnd_id_flex_structures.id_flex_num

);

分別在BLOCK級(jí)別加入如下的觸發(fā)器(可參考說(shuō)明性彈性域的應(yīng)用代碼).

PRE -Q UERY

PRE -UPDATE

PRE -INSERT

POST -Q UERY

W HEN -NE W-ITEM -INSTANCE

W HEN -VALIDATE -ITEM

W HEN -VALIDATE -RECORD

其觸發(fā)器的代碼分別對(duì)應(yīng)

FND_FLEX.EVENT('PRE-Q UERY ');

FND_FLEX.EVENT('PRE-UPDATE ');

FND_FLEX.EVENT('PRE-INSERT ');

FND_FLEX.EVENT('POST-Q UERY ');

FND_FLEX.EVENT('W HEN -NE W-ITEM -INSTANCE');

FND_FLEX.EVENT('W HEN -VALIDATE -ITEM');

FND_FLEX.EVENT('W HEN -VALIDATE -RECORD');

編寫(xiě)FORM設(shè)置和彈性域

加入非基表域用于容納彈性域,我們做一個(gè)ITEM叫 K EY_FLEXITEM 注意這個(gè)ITEM的CLASS屬性為 TEXT_ITEM, LOV處選擇ENABLE_LIST_LAMP,并把檢查有效性設(shè)為NO。

由下圖可以看出鍵彈性域的存放關(guān)系,在應(yīng)用表里存放的是鍵唯一值,而在鍵結(jié)構(gòu)表中存放的是鍵結(jié)構(gòu)值(段結(jié)構(gòu)代碼和

鍵唯一值)

標(biāo)簽: