天天看點

OAF_OAF控件系列10 - Key Flexfield鍵值彈性域的實作(案例)

2014-06-17 Created By BaoXinjian

一、摘要

OAF的彈性域的實作基本和Form的彈性域實作的大體思路是一緻的,在注冊Table和彈性域完全一樣,之後通過控件去實作具體的彈性域顯示

Form的彈性域初始化基本都在trigger when-new-form-instance中

OAF的彈性域初始化基本都在processRequest中,或者在processRequest調用AM中的初始化方法

1. 網上的一個例子

建立一個EO,其中需要有相關的CCID字段。這裡,如果在EO的Dynamic Attribute Groups裡添加鍵彈性域的内容時,會報錯,是以這裡不在這裡進行設定。

建立一個基于EO的VO,這個這個VO裡需要有相關CCID的字段。

要錄入資訊的字段添加到頁面上(CCID字段不需要),然後添加一個Item

Style類型為flex的項。(注意,在messageComponentLayout裡不能添加flex項,是以要先添加一個

messageLayout,然後再在messageLayout裡添加flex項)。設定flex項的ID:DF, Appl Short

Name:SQLGL, Name:GL#, Type:key, View Instance:自己定義的VO執行個體。

2. 鍵值彈性域必須存在的四個屬性

Appl Short Name:SQLGL

Name:GL#

Type:key

View Instance:自己定義的VO執行個體

負責系統會報無法找到彈性域錯誤

3. 在使用鍵值彈性域時,必須在processRequest中進行初始化,負責無法使用該鍵彈性域

因為鍵彈性域的結構、并聯哪個字段(即哪個字段為CCID字段)都沒有設定,是以這裡需要代碼來控制,在processRequest裡添加代碼,如下:

public void processRequst

{

OAKeyFlexBean keyFlex = (OAKeyFlexBean)webBean.findChildRecursive(“DF”);

keyFlex.setStructureCode(“ACCOUNTING_FLEXFIELD”);

keyFlex.setCCIDAttributeName(“CCID字段”);

keyFlex.mergeSegmentsWithParent(pageContext);

}

4. 注意,鍵值彈性域需關心兩個表

驗證彈性域分段的輸入值,且如果這樣的組合已經存在,使用目前組合的CCID來更新視圖對象.如果這樣的組合不存在,将會插入一個新的CCID行到組合表。

比如總賬的會計科目彈性域,在expense invoice po中隻存一個CCID,其具體的描述在gl_code_combination中,如組合不存在則插入一條會計科目

使用最多的鍵值彈性域,我相信應該也就是會計科目彈性域了

二、案例實作

案例: 使用總賬的會計科目鍵值彈性域定義Expense Header中的會計科目

1. 确認GL中的會計科目鍵彈性域定義方式

2. 建立一個測試使用的Accouting Structure,會計科目有不同的結構,通過Structure去區分

3. 在OAF中新增一個Key Flex彈性域

4. 在CO中進行初始化,制定彈性域的Structure和Account ID

三、案例測試

1. 打開頁面,确認Key Flexfield無問題

2. 錄入新的會計科目

3. 儲存後檢視資料庫

3.1 在基表中隻存放了account id欄位

3.2 具體的account組合存在在總賬的會計科目彈性域對應的表gl_code_combinations中

Thanks and Regards

<b>ERP技術讨論群: 288307890</b>

<b>技術交流,技術讨論,歡迎加入</b>

<b>Technology Blog Created By Oracle ERP - 鮑建立</b>

繼續閱讀