如何在Form中使用键弹性域(Key Flexfield)
在應(yīng)用彈性域之前必須先定義彈性域,定義之前必須先注冊(cè)表列。如果你的彈性域已經(jīng)在Oracle Application Object Library中已經(jīng)定義和注冊(cè)了,并且彈性域表和列已經(jīng)在數(shù)據(jù)庫中存在,則忽略1、2、3步驟,適用于關(guān)鍵性也適用于描述性彈性域。
1.建立相關(guān)的數(shù)據(jù)庫表結(jié)構(gòu)、注冊(cè)表列
關(guān)鍵彈性域COMBINATIONS表必須包括這幾個(gè)部分:
(1)唯一的ID列
(2)KEY段,SEGMENT1、SEGMENT2、、、SEGMENTn
(3)ENABLED_FLAG和SUMMARY_FLAG列
(4)START_DATE_ACTIVE和END_DATE_ACTIVE列
(5)一些WHO列
(6)結(jié)構(gòu)ID列
(7)一個(gè)序列,名為“表名_S”
/***************************在客戶化的用戶下*******************************/
/* 鍵應(yīng)用表 */
create table hek_om_pop_validity_all(line_id number,inventory_item_id number, number_of_day number, start_date date, end_date date,
--=================擴(kuò)展字段================================ created_by number,creation_date date,last_updated_by number,last_update_date date,last_update_login number,org_id number,attribute_category varchar2(30),attribute1 varchar2(50),attribute2 varchar2(50),attribute3 varchar2(50),attribute4 varchar2(150),attribute5 varchar2(150)
);/* 創(chuàng)建存放鍵彈性域的結(jié)構(gòu)表 */
CREATE TABLE FLEX_LN_KEY
(KEY_FLEX_STRUCTURE_ID NUMBER , KEY_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 SEQUENCE FLEX_LN_KEY_S START WITH 1; --創(chuàng)建存放鍵彈性域表的對(duì)應(yīng)序列(鍵彈性域表名+"_S")grant all on T_KEY_FLEX to apps;grant all on FLEX_LN_KEY to apps;grant all on flex_ln_key_s to apps;/***************************在公共用戶APPS下*******************************/
conn apps/apps/* 創(chuàng)建同義詞 */CREATE SYNONYM FLEX_LN_KEY FOR HEK.FLEX_LN_KEY ;CREATE SYNONYM FLEX_LN_KEY_S FOR HEK.FLEX_LN_KEY_S;/* 注冊(cè)鍵結(jié)構(gòu)表和字段 */
BEGINad_dd.register_table('HEK', 'FLEX_LN_KEY', 'T');ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'KEY_FLEX_STRUCTURE_ID', 1, 'NUMBER', 38, 'Y','N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'KEY_FLEX_ID', 2, 'NUMBER', 38, 'Y', 'N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT1', 3, 'VARCHAR2', 30, 'Y', 'N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT2', 4, 'VARCHAR2', 30, 'Y', 'N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT3', 5, 'VARCHAR2', 30, 'Y', 'N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT4', 6, 'VARCHAR2', 30, 'Y', 'N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT5', 7, 'VARCHAR2', 30, 'Y', 'N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT6', 8, 'VARCHAR2', 30, 'Y', 'N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT7', 9, 'VARCHAR2', 30, 'Y', 'N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT8', 10, 'VARCHAR2', 30, 'Y', 'N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT9', 11, 'VARCHAR2', 30, 'Y', 'N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT10',12, 'VARCHAR2', 30, 'Y', 'N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT11', 13, 'VARCHAR2', 30, 'Y','N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT12', 14, 'VARCHAR2', 30, 'Y','N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT13', 15, 'VARCHAR2', 30, 'Y','N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT14', 16, 'VARCHAR2', 30, 'Y','N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT15',17, 'VARCHAR2', 30, 'Y', 'N' );
COMMIT;
END; ?2.定義鍵彈性域
進(jìn)入應(yīng)用開發(fā)員--彈性域--(說明性/鍵)--注冊(cè)可新定義一個(gè)彈性域
如圖所示,只有在步驟1中已注冊(cè)的Table,Colummn在定義彈性域時(shí)才能被選到。
對(duì)于同種類型的彈性域,每一個(gè)基表應(yīng)只定義一個(gè),但是一個(gè)彈性域可對(duì)應(yīng)多個(gè)Structure。
在Form中啟用彈性域時(shí),可利用代碼指定此彈性域使用的Structure。
應(yīng)用:選擇注冊(cè)的應(yīng)用
代碼:填寫注冊(cè)鍵彈性域的CODE(必須唯一,最多四個(gè)字符,在調(diào)用鍵彈性域必須使用的值)
標(biāo)題:鍵彈性域的標(biāo)題,在今后的應(yīng)用中,此鍵彈性域?qū)?huì)在窗口標(biāo)題上顯示在此定義的標(biāo)題內(nèi)容
說明:
表應(yīng)用:在注冊(cè)表,列時(shí)指定的應(yīng)用(appl_short_name)
表名:? 選擇注冊(cè)的表名稱
結(jié)構(gòu)列:必須也是存在于注冊(cè)過的列,結(jié)構(gòu)列的意義就是存放鍵彈性域使用的是哪個(gè)段結(jié)構(gòu)的代碼
唯一標(biāo)識(shí)列:是記錄鍵彈性域唯一的值,要找到健彈性域的具體含義,必須通過此唯一標(biāo)識(shí)列
3.定義鍵彈性域的段結(jié)構(gòu)
4.在Form中啟用彈性域:
(4.1)添加對(duì)應(yīng)的彈性域字段
一般在基表對(duì)應(yīng)的Block下面新建對(duì)應(yīng)的彈性域字段,相關(guān)的外觀設(shè)置可參考Oracle標(biāo)準(zhǔn)系統(tǒng)。
(4.1.1)創(chuàng)建隱藏字段
隱藏彈性域字段是作為從數(shù)據(jù)庫表(或者視圖)創(chuàng)建默認(rèn)form block的一部分。在彈性域字段的canvas屬性上設(shè)置為Null(這樣它們就不會(huì)出現(xiàn)在canvas上)
注意:你不應(yīng)該為隱藏字段寫邏輯來直接為這些字段設(shè)值。因?yàn)閺椥杂驎?huì)跟蹤是否一個(gè)記錄正被插入,更新,通過任意方法為這些字段設(shè)置值而不是彈性域本身(或者從數(shù)據(jù)庫中查詢)的話可能會(huì)引起錯(cuò)誤和數(shù)據(jù)錯(cuò)誤。
(4.1.2)創(chuàng)建顯示字段
創(chuàng)建你的連接分段字段為2000字符的顯示的,非數(shù)據(jù)庫文本字段KEY_FLEXITEM,其屬性:
Property?????????????????? Value ?
List of Values??????????? ENABLE_LIST_LAMP ?
Database Item????????? No
(4.2)添加必要的觸發(fā)器
分別在BLOCK級(jí)別加入如下的觸發(fā)器:
PRE-QUERY
PRE-UPDATE
PRE-INSERT
POST-QUERY
WHEN-NEW-ITEM-INSTANCE
WHEN-VALIDATE-ITEM
WHEN-VALIDATE-RECORD
其觸發(fā)器的代碼分別對(duì)應(yīng)
FND_FLEX.EVENT('PRE-QUERY ');
FND_FLEX.EVENT('PRE-UPDATE ');
FND_FLEX.EVENT('PRE-INSERT ');
FND_FLEX.EVENT('POST-QUERY ');
FND_FLEX.EVENT('WHEN-NEW-ITEM-INSTANCE');
FND_FLEX.EVENT('WHEN-VALIDATE-ITEM');
FND_FLEX.EVENT('WHEN-VALIDATE-RECORD'); (4.3)代碼定義彈性域字段
在FORM級(jí)觸發(fā)器PRE-FORM內(nèi)定義鍵彈性域:
beginfnd_key_flex.define(block => 'HEK_OM_POP_VALIDITY_V', -- 鍵彈性域所在的BLOCKfield => 'KEY_FLEXITEM', -- 鍵彈性域所在的BLOCK上創(chuàng)建的ITEM,用來容納鍵彈性域組合id => 'LINE_ID', -- 鍵彈性域所在的BLOCK上創(chuàng)建的ITEM,保存KEY彈性域的唯一值(block的表)appl_short_name => 'HEK', code => 'TEST', -- 鍵彈性域的注冊(cè)代碼 fnd_id_flex_structures.id_flex_codenum => '101' -- fnd_id_flex_structures.id_flex_num
);
end; ?5.補(bǔ)充
(5.1)定義會(huì)計(jì)科目鍵彈性域
begin--會(huì)計(jì)科目select chart_of_accounts_idinto :parameter.chart_of_accounts_idfrom org_organization_definitionswhere organization_id = :parameter.org_id;fnd_key_flex.define(block => 'CUX_INV_BCP_GANOH',field => 'TO_ACCOUNT',id => 'TO_ACCOUNT_ID',appl_short_name => 'SQLGL',code => 'GL#',num => ':PARAMETER.CHART_OF_ACCOUNTS_ID',vrule => '\\nSUMMARY_FLAG\\nI\\nAPPL=SQLGL;NAME=GL_NO_PARENT_SEGMENT_ALLOWED\\nN\\0GL_GLOBAL\\nDETAIL_POSTING_ALLOWED\\nE\\nAPPL=INV;NAME=INV_VRULE_POSTING\\nN',usedbflds => 'N',validate => 'FULL',required => 'N');fnd_key_flex.update_definition(block => 'CUX_INV_BCP_GANOH',field => 'TO_ACCOUNT',enabled => 'N');
end; ?
轉(zhuǎn)載于:https://www.cnblogs.com/lynnwang/p/4417656.html
總結(jié)
以上是生活随笔為你收集整理的如何在Form中使用键弹性域(Key Flexfield)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “雨打风摧花不全”上一句是什么
- 下一篇: Ubuntu系统