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>