關於在Oracle EBS環境下如何尋找資料來源的文章幾年前就已經開始整理,但是其中關於OAF方面的一直沒有整理,導致這份文檔一直殘缺不全,
有很多次同事都向我索要相關文檔都未能如願以償,新的一屆培訓工作再次啟動,為了自己也能夠“一勞永逸”,將相關內容整理髮出。
在Oracle E-Business Suite 環境下進行二次開發,要求技術顧問對EBS系統的結構和實現有一定的瞭解,同時熟悉系統的關鍵流程,進而掌握背景表結構設計,尋找資料來源需要達到的兩個目的是:
- 到對應的資料庫物件:視圖或表
- 找到介面中欄位對應背景表列
本文先介紹如何尋找Form介面對應的資料來源,快速找出FOrm介面後台對應的表/視圖以及對應的列,
Form本身特有的特點,致使尋找Form介面所對應的後台資料來源變得相對簡單方便。
一、使用“查看—> 記錄”功能
“曆史紀錄”可以找出資料區塊對應的後台資料庫物件,並不能找出欄位所對應的資料庫列。
適用場合:適用於基於資料庫塊的資料來源尋找
前提:游標停留在需要查詢資料來源的資料區塊中,並按某個條件查詢出資料
步驟:
- 選擇菜單:Help –> Record History(協助 –> 曆史紀錄)
- 查看快顯視窗中Table Name的值,這個值便是游標所在資料區塊對應的後台資料庫檢視或資料庫表
執行個體(尋找使用者所對應的後台資料庫物件):
- 游標定位於User Name欄位
- 執行查詢,查詢出SYSADMIN使用者資訊
- 選擇菜單:Help –> Record History
- 彈出如下視窗,其中Table Name的值:FND_USER,既是後台資料庫物件
限制:曆史紀錄”的方式只適用於基於資料庫塊的查詢;而對於非資料庫塊的後台查詢沒有辦法使用,不能使用的地方會彈出如下的訊息:
二、使用“查看 —> 診斷 –> 檢查”
通過檢查功能可以尋找出欄位對應後台資料庫列資訊,因此使用此方法的需要先找出對應的資料庫檢視或者表
步驟:
- 游標停留在Form介面中的一個欄位
- 選擇菜單:Help —> Diagnostics –> Examine
- 在彈出的視窗中輸入資料庫使用者APPS的密碼,確定
- 快顯視窗中Field對應的值既是Form所對應的欄位,一般情況下,此值既是資料列的列名
執行個體(尋找出User Name欄位所對應的後台資料庫列):
- 游標停留在User Name欄位中
- 選擇菜單:HelpàDiagnosticsàExamine
- 彈出如下視窗,輸入資料庫使用者APPS的密碼,確定
- 彈出如下視窗,Filed的值:USER_NAME就是User Name欄位所對應的後台資料庫列,因此本欄位為:fnd_user.user_name
注意事項:使用此方法來尋找資料列時,我們得到的只是Form欄位的名稱,很多使用Form欄位的名稱和所對應的資料來源列一致,但是在少數情況下,Form欄位名稱和後台資料庫列名存在差異,這個使用此方法就無法100%適用,而需要通過名稱等進一步推測確認。
三、使用”Last Query”功能
使用最後查詢可以找出在Form中最後執行查詢的SQL語句,從而得知對應的資料來源以及相關資料庫列資訊
適用場合:同時適用於基於資料庫塊和非資料庫塊的資料來源尋找
步驟:
- 在Form中進行資料查詢
- 游標停留在Form介面中的一個欄位上
- 選擇菜單:Help –> Diagnostics –> Examine
- 在彈出的視窗中輸入資料庫使用者APPS的密碼,確定
- 快顯視窗中,選擇Block為:SYSTEM,Field為:LAST_QUERY
- Value中的SQL語句既是Form中最後查詢的語句
執行個體(找出並發管理器對應的後台資料來源):
- 進入並發管理器介面,並進行查詢(自動查詢),使用“曆史紀錄”方法無法得到表
- 選擇菜單:Help –> Diagnostics –> Examine,在彈出的視窗中輸入APPS使用者密碼
- 快顯視窗中,選擇Block為:SYSTEM,Field為:LAST_QUERY
- 取得Value為:
?[Copy to clipboard]View Code SQL
12345678910111213141516 |
SELECT ROWID, row_id, concurrent_queue_name, user_concurrent_queue_name, target_node, max_processes, application_id, concurrent_queue_id, control_code, manager_type FROM fnd_concurrent_queues_vl WHERE enabled_flag = 'Y' ORDER BY decode(application_id, 0, decode(concurrent_queue_id, 1, 1, 4, 2)), sign(max_processes) DESC, concurrent_queue_name, application_id |
這樣可以取得資料庫檢視:FND_CONCURRENT_QUEUES_VL
限制:由於Last Query中查詢到的SQL語句是Form中最後一次查詢的語句,因此如果需要尋找像主從關係中主塊資料來源就沒有辦法適用
四、使用SQL Trace功能
使用SQL Trace功能,可以知道在Form操作過程中,對資料庫系統進行了哪些查詢、DML和DDL操作,可以全面的查看與資料庫有關的操作和效能統計資訊。
此方法是這些方法中功能最強大,同時也是最複雜的一個,而且它經常成為效能調試中的一個得力工具。
步驟:
- 啟動Trace模式
- 在Form中進行操作,並保證操作有查詢、插入、更新或刪除動作
- 關閉Trace模式
- 登陸資料庫伺服器
- 使用Tkprof工具格式化Trace結果檔案輸出
- 查看被格式化過的Trace檔案
- 推測驗證資料來源
執行個體(定義一個使用者時,找到後台所進行的DML操作,進而找到後台資料來源):
- 開啟Form介面進入輸入狀態,還是以上面使用的User介面為例
- 選擇菜單:Help –> Diagnostics –> Trace –> (Regular Trace, Trace with Binds, Trace with Waits, Trace with Binds and Waits)
- 記下Trace檔案路徑及名稱
- 在介面上操作,輸入資訊,儲存
- 選擇菜單:Help –> Diagnostics –> Trace –> No Trace,失效Trace功能
- 使用資料庫作業系統使用者Telnet到資料庫伺服器,切換到$ORACLE_HOME/admin/<SID>_<hostname>/udump(上面所顯示的路徑)
- 使用Tkprof命令格式化Trace輸出:tkprof demo_ora_21088_SYSADMIN.trc demo_ora_21088.out
- 下載並查看輸出檔案:demo_ora_21088.out
五、查看Form原始碼
對於Form應用來說,如果上面的方法還不足以滿足需求的話,可能就需要採用最徹底的辦法了,直接查看Form的原始碼,我想這個方法是最能夠解決問題的方法了,但是由於需要查看原始碼,對於查看的人員就需要熟悉Form的開發,因此一般情況下不先推薦使用它,但是對於如果希望完全搞清楚Form應用後台邏輯的情況下,也只能採用這種方式。
此方法在此就不做介紹了,此方法可以說只適合Form開發人員使用。
上面的方法是Oracle EBS二次開發中最常用最有效方法,在Form相關的開發和應用中,掌握的以上的方法基本上能夠解決絕大多數的問題。
轉載:http://oracleseeker.com/2009/08/11/how_to_find_the_table_view_of_form_application_in_oracle_ebs/