????? 在Oracle EBS中的Java并發程序(Java Concurrent Program)是系統功能中的一個亮點,它的出現使得用戶可以在ERP系統中運行自己定義的Java程序。本文為學習筆記,所以不會介紹太多背景知識。
???? 使用Java并發程序的好處:
???? 當遇到如下2種情況的時候,用PLSQL程序包來完成將無比麻煩:
???? 1、將服務器上的文件通過FTP安全有效的導入到apps環境下
???? 2、使用JDBC連接一個非Oracle的數據庫,并獲取里面的數據,通過驗證和轉換導入到apps下的客制化表。對于上述假定,需要DBA建立透明網關,對于如此簡單的需求將會做復雜的設置。
????? 綜上所述,可以在EBS中使用Java并發程序來解決這些事情。
????? 如下為一個簡單的例題并做簡單說明:
import oracle.apps.fnd.cp.request.*;
import oracle.apps.fnd.util.*;//如果是測試Java并發程序,則新建一個class實現JavaConcurrentProgram 這個interface
public class MainTest implements JavaConcurrentProgram {
??? //實現interface中的runProgram方法
??? public void runProgram(CpContext ctx) {??????? //取得并發程序傳入的參數列表
??????? ParameterList lPara = ctx.getParameterList();
??????? ReqCompletion lrc = ctx.getReqCompletion();
??????? try
??????? {??????????? //把參數名字和參數的值分別在log和output中打印出來
??????????? while(lPara.hasMoreElements())
??????????? {
??????????????? NameValueType nvt = lPara.nextParameter();
??????????????? ctx.getOutFile().writeln(nvt.getName() + ":" + nvt.getValue());
??????????????? ctx.getLogFile().write(nvt.getName() + ":" + nvt.getValue(), LogFile.STATEMENT);
??????????? }???????????? //完成打印的步驟后,設置程序的結束狀態為Normal,如果這個步驟不做,雖然程序沒有錯誤,但是執行結果還是會報錯的
??????????? lrc.setCompletion(ReqCompletion.NORMAL, "Normal Ending");
??????? }
??????? catch(Exception e)
??????? {??????????? //如果程序出現異常,設置程序的執行結果,本來是應該設置ERROR的
??????????? ctx.getLogFile().write(e.toString(), LogFile.STATEMENT);
??????????? lrc.setCompletion(ReqCompletion.WARNING, "Exception Occurs!!!");
??????? }
??? }
}?把程序掛到EBS中后,執行結果如下圖所示:
log中顯示如下(因為log中程序沒有換行,所以寫到了一行里面):
output中因為換行的原因,格式與log中的有一點不同,如下所示(左半部分為輸入的參數的說明,右半部分則為程式打印的output):
轉載于:https://www.cnblogs.com/echochen/archive/2011/11/17/2253148.html