前言:
有時候,因某些需要,必須知道Oracle的Form被使用的情況,以方面我們做出決策;
例如,如果某個Form被使用的次數非常多,那么,這個Form的相關SQL代碼就應該優先處理,以減少服務器負荷,從而提供系統運行速度。
或者,(特別是)在系統要升級的時候,這些數據就顯得非常重要了:決定哪個Form應該留,哪個Form應該拿掉。
當然,這個信息只是做出決策的參考數據而已。
1. 在Oracle EBS上進行Form跟蹤的技術方法:
Oracle EBS的一個Profile 提供此功能:
User_Profile_Option_Name = 登錄:審計層(Sign-On:Audit Level)
View_Name = FND_SIGNON_AUDIT_VIEW
此Profile有4個可選值:
‘無’:不跟蹤--A
‘用戶’:只跟蹤到哪個用戶登陸
‘職責’:只跟蹤到哪個用戶以哪個職責登陸
‘表單’:跟蹤哪個用戶以哪個職責登陸后,運行哪個FORM--D
啟用此Profile后,可以在FND_SIGNON_AUDIT_VIEW中查詢到相關數據
通過PID或PROCESS_SPID與 v$process/v$session 關聯
2. 系統Profile設置:登錄:審計層
“登錄:審計層”允許您選擇審計登錄至 Oracle 應用產品用戶的層,並增加了四個審計層的功能:無、用戶、責任和表單。
“無”是默認值,
表示不審計登錄到 Oracle 應用產品的任何用戶。
在“用戶”層的審計線索:
登錄至您的系統的用戶
用戶登錄和退出的時間
占用的終端
在“責任”層審計執行了“用戶”層審計功能和線索:
責任用戶選擇
用戶使用每個責任的時間量
在“表單”層審計執行了“責任”層審計功能和線索:
用戶選擇的表單
用戶使用每個表單的時間
系統管理員在所有層均可進行查看、更新。
用戶無法查看或更改此預置文件選項。
此預置文件選項在全部四個層均可查看和更新。
層 |
是否可查看 |
是否允許更新 |
站點 |
是 |
是 |
應用 |
是 |
是 |
責任 |
是 |
是 |
用戶 |
是 |
是 |
此預置文件選項的內部名稱為 SIGNONAUDIT:LEVEL。
參考連接:http://www.onejava.com/article/oracle/fnd/adupapp.htm
系統配置實例:
3. 如何監控客制化的Form:
標准功能的Form,都會被只要設定Profile值,都會被監控的;
但是,客制開發的Form,如果想被系統記錄其使用情況和使用次數,必須寫代碼:
在Pre-Form(或者WHEN-NEW-FORM-INSTANCE)正確輸入下面語句,就可以記錄每次User登錄Form的信息(登錄時間,次數等)了:
FND_STANDARD.FORM_INFO('$Revision: 120.0 $', 'From_Name', 'Application_Short_Name',
'$Date: 2010/11/02 23:25 $', '$Author: Sam.T $');
例如,Form名稱是:XYG_WIP_MOVE_SCH_QY
注冊的模組的簡稱是:XYG
FND_STANDARD.FORM_INFO('$Revision: 120.0 $', 'XYG_WIP_MOVE_SCH_QY', 'XYG',
'$Date: 2010/11/02 23:25 $', '$Author: Sam.T $');
只要User登錄這個Form,就會被記錄下來,方便以后統計Form的被使用次數等信息。
邏輯是:只要在同一個權限登錄一次Form,就會被記錄一次。
同時,用DB工具也可以方便查看目前用戶使用Form的信息。
例如,我打開一個Form下面這個Form:
Form信息:
4. 相關腳本文件:
---記錄Form的使用次數:
SELECT A.*, B.FORM_NAME, B.DESCRIPTION
FROM FND_LOGIN_RESP_FORMS A, FND_FORM_VL B
WHERE A.FORM_ID = B.FORM_ID
---實時查看User的使用Form情況:
SELECT * FROM FND_SIGNON_AUDIT_VIEW
---記錄相關信息的PKG:FND_SIGNON
-向Form使用次數的表格塞記錄:
/*
INSERT INTO FND_LOGIN_RESP_FORMS(LOGIN_ID
,LOGIN_RESP_ID
,FORM_APPL_ID
,FORM_ID
,START_TIME
)
SELECT AUDIT_FORM.LOGIN_ID
,AUDIT_FORM.LOGIN_RESP_ID
,A.APPLICATION_ID
,F.FORM_ID
,SYSDATE
FROM FND_FORM F, FND_APPLICATION A
WHERE F.FORM_NAME = AUDIT_FORM.FORM_NAME
AND F.APPLICATION_ID = A.APPLICATION_ID
AND A.APPLICATION_SHORT_NAME = AUDIT_FORM.FORM_APPLICATION;
*/