天天看點

OAF_開發系列25_實作OAF中Java類型并發程式開發oracle.apps.fnd.cp.request(概念)

 20150719 Created By BaoXinjian

一、摘要

在是使用Form/Report/SQL等并發程式時,集中在資料的操作和處理上,但是在事物處理與系統互動有很大的局限性,沒有Java程式友善,

是以需要EBS系統中注冊并運作Java并發程式,通過Java的強大功能實作EBS的功能擴充

在Oracle EBS中的Java并發程式(Java Concurrent Program)是系統功能中的一個亮點,它的出現使得使用者可以在ERP系統中運作自己定義的Java程式。

使用Java并發程式的好處:

當遇到如下2種情況的時候,用PLSQL程式包來完成将無比麻煩:

(1). 将伺服器上的檔案通過FTP安全有效的導入到apps環境下

(2). 使用JDBC連接配接一個非Oracle的資料庫,并擷取裡面的資料,通過驗證和轉換導入到apps下的客制化表。對于上述假定,需要DBA建立透明網關,對于如此簡單的需求将會做複雜的設定。

2. 程式接口

(1). 所有的java并發可執行都必須實作這個接口(從這個接口繼承),

它定義了一個抽象方法public abstract void runProgram(CpContext cpcontext),其子類必須實作該方法。

(2). 兩個重要的包

oracle.apps.fnd.cp.request.*

oracle.apps.fnd.utl.*

二、CpContext類

1. LogFile LOG_FILE = CpContext.getLogFile():取得并發請求的日志類

LOG_FILE.writeln(String msg, 1):往日志裡面寫内容

反編譯LogFile類,可以看到它的構造函數:

2. ParameterList parameterlist = CpContext.getParameterList():取得并發請求的參數

通過這個while循環就可以取出所有的并發請求參數,并将他們存到Hashtable m_hashParametersList中,後面随時要用到并發請求參數的時候就可以通過m_hashParametersList.get(String)方法取出參數值來

3. ReqDetails mReqDetails = CpContext.getReqDetails():取得并發請求細節資訊

(1). mReqDetails.getRequestId():擷取RequestId資訊

(2). mReqDetails.ReqGeneralInfo():取得并發請求的資訊類mReqGeneralInfo,這個類提供更相信的有關并發請求的資訊,如下所示:

(3). mReqDetails.getSessInfo():取得session相關資訊ReqSessInfo類

EnableTrace,NlsLanguage,NlsTerritory,NlsCodeSet,NlsNumChar的setter和getter方法。

(4). mReqDetails.getUserInfo():取得使用者相關資訊ReqUserInfo類

UserId,RespId,RespAppId,LoginId,SecGrpId,UserName,RespName的setter和getter方法。

(5). mReqDetails.getParaInfo():取得參數相關資訊ReqParameterInfo類

定義了對參數的操作:添,删等。

實際上這些細節是通過一條SQL從Oracle表中取出,看其getDetails(Connection connection)方法就可以知道了。

4. OutFile OUT_FILE = CpContext. getOutFile():取得并發請求的日志類

OUT_FILE.writeln(String):往标準請求輸出裡面寫内容

5. Locale mLocale = CpContext.getLocale():取得地點區域資訊(見java.util.Locale)

6. ReqCompletion mReqCompletion = CpContext.getReqCompletion():取得請求結束資訊ReqCompletion類

另外還有setReqDetails(ReqDetails reqdetails, int i)方法。

(1). ReqCompletion.setCompletion(int i, String s):s參數可以寫入一些資訊,設定請求結束狀态

(a) 0: NORMAL

(b) 1: WARNING

(c) 2: ERROR

(d) 3: PAUSED

(2). ReqCompletion.setPaused(String s):暫停請求

7. Connection mJConn = CpContext.getJDBCConnection:取得Oracle JDBC驅動連接配接

8. CpContext.commit(Connection connection):commit連接配接

9. CpContext.rollback(Connection connection):rollback連接配接

另外還有CpContext.setRollbackSegment(Connection connection)設定復原段

10. AppsEnvironmentStore = CpContext.createEnvironmentStore():建立EBS環境AppsEnvironmentStore類,它定義了Oracle擷取dbc檔案,建立連接配接環境的的操作

11. CpContext.setParameterList(String s):設定并發請求參數。格式(參數間用’冒号’分隔)如下:

12. CpContext.initContext():初始化上下文,裡面定義了一些初始化變量的方法和setter方法

13. CpContext.initGlobal():初始化全局環境,可以檢視到裡面的代碼如下:

14. CpContext.initConcurrent():初始化并發,檢視代碼下:

15.CpContext.initParameterList():初始化并發請求參數清單,檢視代碼如下:

16. CpContext.loadProfiles():

将SECURITY_GROUP_ID、

USER_ID、

USERNAME、

CONC_LOGIN_ID、

RESP_ID、

RESP_APPL_ID、

CONC_REQUEST_ID、

CONC_PROGRAM_APPLICATION_ID、

PROG_APPL_ID、

CONC_PROGRAM_ID、

PROGRAM_ID、

CONC_PROGRAM_NAME、

APPL_SHRT_NAME、

CONC_PRIORITY_REQUEST、

CONC_PARENT_REQUEST、

AFLOG_ENABLED、

AFLOG_LEVEL資訊加載到并發請求的Profiles中(這些參數都可以通過mReqDetails來擷取)。

另外還有對應的CpContext.setReqProfile(String s, String s1)方法

17. CpContext.setSession():設定會話相關參數(語言和地區),檢視代碼如下:

首先擷取環境EnvironmentStore environmentstore = getEnvStore();

然後mReqDetails.getSessInfo()的getNlsLanguage()、getNlsTerritory()比較,如果取出的值是一緻的,則執行如下執行如下PL/SQL:

18. CpContext.setUserContext():設定了使用者環境(将使用者資訊添加到SessionManager)

CpContext.setNLSLocale():擷取本地資訊存放到CpContext.mLocale中

CpContext.setTrace():首先判斷System.getProperty("request.enabletrace");是否為’Y’;如果是,則運作                               

BEGIN DBMS_SESSION.SET_SQL_TRACE(TRUE); END;

來設定Trace為啟用

19. CpContext.requestEnd():執行如下PL/SQL來結束請求

BEGIN FND_CONC_STAT.COLLECT; END;

20. CpContext.modifyOutFileInDb(String s):更新FND_CONCURRENT_REQUESTS表的OUT_FILE

UPDATE FND_CONCURRENT_REQUESTS  SET OUTFILE_NAME= ? WHERE REQUEST_ID= ?

21. CpContext.loadEnvironment(Connection connection):加載環境上下文,調用如下PL/SQL

Thanks and Regards

參考:http://blog.csdn.net/cunxiyuan108/article/details/7677773

參考:http://blog.csdn.net/cunxiyuan108/article/details/7677758

參考:http://www.cnblogs.com/echochen/archive/2011/11/17/2253148.html

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

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

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