一.描述性彈性域
前言介紹:
描述性彈性域的實質就是系統預留自定字段,系統可以使用說明性彈性域來獲取業務所特有的重要附加信息。系統可能自定義說明性彈性域,以顯示存儲更多信息的字段,提供一套完整的“自定義”機制,可以用值集來驗證字段、字段間可以設置依賴關系等等。
1.注冊表和字段到EBS(記得COMMIT):
說明:
注冊表 :
AD_DD.REGISTER_TABLE(p_appl_short_name in varchar2, --應用名簡稱/所有者 p_tab_name in varchar2, --表名 p_tab_type in varchar2, --T 自動擴展/S 非自動擴展/F p_next_extent in number, --下一區 p_pct_free in number, p_pct_used in number)
注冊列:
AD_DD.REGISTER_COLUMN(p_appl_short_name in varchar2, p_tab_name in varchar2, --應用名簡稱/所有者 p_col_name in varchar2, --列名 p_col_seq in number, --序號,唯一 p_col_type in varchar2, --類型 p_col_width in number, --字段寬度 p_nullable in varchar2, --是否為空 p_translate in varchar2, --是否可以轉換 p_precision in number default null, p_scale in number default null)
2.在應用開發員>彈性域>說明性>注冊 中注冊說明性彈性域,通常NAME 起名和表名一致,Title的值為可明顯區分:
保存后,點擊Columns,可以看到,系統自動選中了所有Attribute字段:
3.創建非數據庫項:
在塊中手工創建一個字段,名字通常叫DESC_FLEX,子類為TEXTITEMDESCFLEX,Prompt為一對大括號"[]",布局時通常放在最后,但不隨滾動條滾動:
注:為非數據庫字段,Database Item屬性為No
4.觸發器:
4.1Form級:WHEN-NEW-FORM-INSTANCE
fnd_descr_flex.define(BLOCK => 'BLOCKNAME',
field => 'DESC_FLEX',
appl_short_name => 'SCF',
desc_flex_name => 'CUX_FLEXFIELD_DEMO');
例:
fnd_descr_flex.define(BLOCK => 'ORDER_HEADERS'
,field => 'DESC_FLEX'
,appl_short_name => 'CUX'
,desc_flex_name => 'CUX_OE_ORDER_HEADERS_25305_ALL');
4.2塊級 :
PREINSERT中追加: fnd_flex.event('PREINSERT');
PREUPDATE中追加: fnd_flex.event('PREUPDATE');
PREQUERY中追加: fnd_flex.event('PREQUERY');
POSTQUERY中追加: fnd_flex.event('POSTQUERY');
WHENVALIDATERECORD中追加: fnd_flex.event('WHENVALIDATERECORD');
4.3Item級:
WHENNEWITEMINSTANCE中追加: fnd_flex.event('WHENNEWITEMINSTANCE');
WHENVALIDATEITEM中追加: fnd_flex.event('WHENVALIDATEITEM');
注意::可以把這些觸發器(Block級和Item級)寫在Form級,這樣不需要每個塊都寫,不過如果為了其它功能 在塊級寫了同名觸發器,執行層次需要改為Before(修改觸發器的Execution Hierarchy屬性,該屬性默認為Override,可以改為After,Before)。
1、 Override模式,默認模式,不再觸發高級別事件(執行順序是Item級別——》Block級別——》Form級別);
2、 Before模式,觸發完本級別的事件后,再觸發高級別事件;
3、 After模式,先觸發高級別事件,再回來觸發本級別事件
5.啟用彈性域:
通過Application Developer職責/Flexfield/Descriptive/Segments啟用彈性域:選擇相應字段並保存 。
6.效果:
二.鍵彈性域
前言介紹:
鍵彈性域具有足夠的“彈性”,它允許根據需要使用任意的代碼組合以描述實體。系統可為每個鍵彈性域確定一個實體具有多少段、每個段的含義、每個段可具有的值以及每個段值表示的含義。系統也可以定義管理段值組合有效的規則(交叉驗證規則),或定義段與段之間的相關性。從而系統可以使用其所需的代碼。鍵彈性域通常用來處理有層次結構的編碼,比如賬戶、類別等,極少自行客戶化開發,一般都是使用系統標准的鍵彈性域而已。
1.要求:
1.1基表要求:
鍵彈性域對應的表都有一個ID字段,如果在客戶化開發中需要使用該表 作為外鍵,當然需要一個外鍵ID字段,名字根據需要起即可。
1.2字段要求:
字段要求:一個鍵代碼組合字段+一個可選的鍵描述組合字段 :這兩個字段可以是數據庫項,也可以不是。 代碼組合字段子類是Text_Item,描述組合字段子類通常是 Text_Item_Display_Only;注意它們的長度要足夠,不然可能放不下組合。 對代碼組合字段,需要設置其Lov屬性(List of Values設置為 ENABLE_LIST_LAMP,Validate from List設置為NO,非必需)。
2.觸發器:
2.1Form級:
WHEN-NEW-FORM-INSTANCE:
fnd_key_flex.define(BLOCK => 'FLEXFIELD_DEMO', field => 'ACCOUNT_CODE', description => 'ACCOUNT_DESC', appl_short_name => 'SQLGL', code => 'GL#', id => 'CODE_COMBINATION_ID', required => 'N', usedbflds => 'N', validate => 'FULL', 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', --因為不同公司啟用的Structure不同,實際開發中不要寫死Num值。 num => 101);
注:可以使用以下SQL查詢不同鍵彈性域的定義:
SELECT app.application_short_name, app.application_name, flx.id_flex_code, flx.id_flex_name, str.id_flex_num, str.id_flex_structure_code, str.id_flex_structure_name FROM fnd_id_flexs flx, fnd_id_flex_structures_vl str, fnd_application_vl app WHERE flx.application_id = str.application_id AND flx.id_flex_code = str.id_flex_code AND flx.application_id = app.application_id ORDER BY 1, 3, 5
2.2塊級:
PRE-INSERT中追加:
fnd_flex.event('PRE-INSERT');
PRE-UPDATE中追加:
fnd_flex.event('PRE-UPDATE');
PRE-QUERY中追加:
fnd_flex.event('PRE-QUERY');
POST-QUERY中追加:
fnd_flex.event('POST-QUERY');
WHEN-VALIDATE-RECORD中追加:
fnd_flex.event('WHEN-VALIDATE-RECORD');
2.3Item級:
WHEN-NEW-ITEM-INSTANCE中追加:
fnd_flex.event('WHEN-NEW-ITEM-INSTANCE');
WHEN-VALIDATE-ITEM中追加:
fnd_flex.event('WHEN-VALIDATE-ITEM');
注:可以把這些觸發器(Block級和Item級)寫在Form級,這樣不需要每個塊都寫,不過如果為了其它功能 在塊級寫了同名觸發器,執行層次需要改為Before(同說明性彈性域)
3.效果: