1. 程式人生 > 其它 >EBS描述性彈性域和鍵彈性域的區別

EBS描述性彈性域和鍵彈性域的區別

Editor.md
開源線上 Markdown 編輯器

一.描述性彈性域

  描述性彈性域的實質就是系統預留自定欄位,系統可以使用說明性彈性域來獲取業務所特有的重要附加資訊。系統可能自定義說明性彈性域,以顯示儲存更多資訊的欄位,提供一套完整的“自定義”機制,可以用值集來驗證欄位、欄位間可以設定依賴關係等等。

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,子類為TEXT•ITEM•DESCFLEX,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'
一.描述性彈性域
  描述性彈性域的實質就是系統預留自定欄位,系統可以使用說明性彈性域來獲取業務所特有的重要附加資訊。系統可能自定義說明性彈性域,以顯示儲存更多資訊的欄位,提供一套完整的“自定義”機制,可以用值集來驗證欄位、欄位間可以設定依賴關係等等。

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,子類為TEXT­ITEM­DESCFLEX,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塊級 :
      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’);

    

    4.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(修改觸發器的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.效果:

Editor.md
Copyright © 2015-2019 Editor.md, MIT license.

Design & Develop By: MdEditor