Login
Register

Home

Trainings

Fusion Blog

EBS Blog

Authors

Contact Us

OA Framework - All Articles
  • Register

Oracle Gold Partners, our very popular training packages, training schedule is listed here
Designed by Five Star Rated Oracle Press Authors & Oracle ACE's.

webinar new Click here to raise Support Ticket. Get reply within 48 hours.

Search Courses

User Rating: 5 / 5

Star ActiveStar ActiveStar ActiveStar ActiveStar Active
 
Please find an article that explains basics of a Java Concurrent Programs, with a working example, ciring various features of a Java Concurrent Program.

Why the need for java concurrent program when we can write pl/sql concurrent programs?
Let’s admit PL/SQL is primarily an Oracle database language. What if you wish to do the following seamlessly in a single pl/sql concurrent program:-
Scenario 1.  FTP the file from a server securely, validate and load into apps using an API
Scenario 2.  Connect to a non-oracle database using JDBC, fetch the data, load into Apps Custom tables, validate/transform and interface using API.

For the above scenario (1), yes you may find a way of doing so PL/SQL, but that will be clumsy, as you will write a host program followed by loader, followed by Oracle PL/SQL.
However in case of Java Concurrent Program, you can google on ftp classes, download, put those into your CLASSPATH, and its there to be used.

For scenario(2), in PL/SQL your DBA will need to setup Gateways, which is an infrastructural overhead, and also an overkill for simple requirement just to get data from a SQL*Server.  



What should be the best practice for developing Java Concurrent Program?
Do not try to write massive PL/SQL operations inside java concurrent program directly. For simplicity, call a PL/SQL package procedure/function with parameters from java concurrent program. I tend to use java only where PL/SQL is found to be deficient.



I wish to interface newly created employee records from PeopleSoft regularly, given that this specific PeopleSoft instance is in SQL*Server database, tell me the steps for such point to point interface?
1.
Download free jdbc driver for SQL*Server from this link to an educational site

2. Unzip the jdbc zip file on you server, note down the directory location. You may decide to dump that into $JAVA_TOP, but please do not clutter JAVA_TOP in apps.

3. Open jDeveloper, and ensure that your project has in its CLASSPATH the entire oracle FND Classes. You may need to FTP those classes from $JAVA_TOP/oracle/apps/fnd to your PC.
Although, I vaguely remember that FND Classes come bundled with patch 4573517.
Develop your java concurrent program class xxInterfaceFromPeopleSoft, by implementing class JavaConcurrentProgram

4. Navigate to Application Developer responsibility, Register concurrent program executable xxInterfaceFromPeopleSoft of type java

5. Define concurrent program, and in option field enter the CLASSPATH. See the next step carefully.

6. CLASSPATH...you can either change the CLASSPATH of the Oracle Apps environment or you can override the CLASSPATH per concurrent program. I think the decision will be driven by how many Java Concurrent Programs you plan to develop.
Anyway, in the option field, include the following directories with their absolute path
$JAVA_TOP:apps.zip with path:appsborg.zip:your custom directory where java/jdbc files will be stored.

7. In java concurrent program do this....
Inside main
-->Open JDBC connection to Sql*Server
Note: - You already have a connection object for APPS, given by CpContext.getJDBCConnection()
-->Here lies the beauty, you have now connections to both SQL*Server and Apps in one single program.
-->Get the records into result set.
-->Call the PL/SQL wrapper code, which in turn will use TCA API’s
You can write into Concurrent program log within java concurrent program.


Before I paste a sample java concurrent program, let’s have some important notes:-
1. Can I write into log and output of concurrent program, i.e. equivalent  FND_FILE?
Answer : Yes, you can use logFile.writeln

2. Will I have fnd_global context set in jcp?
Answer: Yes, internally the java classes call fnd_global before passing you the connection object.

3. Is java concurrent program stable?
Answer : Yes, very stable. I have been using this for 4years to do variety of things, ever since it was released in 11.5.8.

4. Can I make a Java Concurrent Program end with warning?
Answer: Yes you can, by doing CpContext.getReqCompletion.setCompletion(ReqCompletion.WARNING, pCompletionText)

5. On which server should the class file be deployed?
Answer : On the server where your Concurrent Managers are running, which traditionally is the database server.

Please find the same java concurrent program for interfacing with pseudo PeopleSoft.
The code below contains compiled example for all the above operations.


import java.sql.*;
import oracle.jdbc.driver.OracleCallableStatement;
import oracle.apps.fnd.cp.request.* ;
import java.io.*;
import oracle.apps.fnd.util.*;

/**
 * Demo by Anil Passi for http://oracle.anilpassi.com
 * This class will interface data from a pseudo Peoplsoft SQL Server into APPS
 */


public class xxInterfaceFromPeopleSoft implements JavaConcurrentProgram {
    // Application Short Name
    private String applName;

    // Single CUSTOMER Number for which the process is being run
    private String singleCUSTOMERNumber;
    private String singleCUSTOMERNumberTemp;

    // The order by clause
    private String orderByClauseSQL;

    //File Separator
    private String mFileSeparator;

    //
    private String mControlFilepath;

    // Debug Flag
    private String mDebugFlag;

    // mPeopleSoftServerName fetched from profile
    private String mPeopleSoftServerName;

  //1=Yes,  2=No
  private String errorsEncounteredFlag ;

    CpContext mCtx;

    LogFile logFile;

    OutFile outFile;

    Connection mConn = null;

    ReqCompletion lRC;

    int mRequestStatus = -1; //uninitialized

  //to set the maximum number of records that can be processed
     int max_number_of_records = 99999999;
//    long max_number_of_records = 2;
    public static final String M_SUCCESS = "SUCCESS";

    public static final String M_ERROR = "ERROR";

    public static final String M_WARNING = "WARNING";

    String mProfileValue = " Declare l_value     Varchar2(50); " + " BEGIN "
            + " :1 := FND_PROFILE.VALUE(:2); " + " END;";

    String doesErrorExist = " Declare l_value     Varchar2(50); " + " BEGIN "
            + " :1 := xxPeopleSoftInterfacePkg.does_error_exist; " + " END;";

    String mLastRunDate = " Declare l_value     Varchar2(50); " + " BEGIN "
            + " :1 := xxPeopleSoftInterfacePkg.get_last_run_date(:2); " + " END;";

    String mCaptureIFaceCtrl = " Declare " + " BEGIN "
            + " xxPeopleSoftInterfacePkg.capture_control_record ; "
            + " END;";

    private void registerControlRecord()
  {
        OracleCallableStatement lStmt_ctrl = null;
        try {
      logMessage("Inside registerControlRecord()");
            lStmt_ctrl = (OracleCallableStatement) mConn
                    .prepareCall(mCaptureIFaceCtrl);

            lStmt_ctrl.execute();
            lStmt_ctrl.close();
        } catch (SQLException s) {
            logMessage(
                    "In Caputre Trx registering control record: Exception thrown w/ error message: "
                            + s.getMessage(), "Y");
            lRC.setCompletion(ReqCompletion.WARNING, M_WARNING);
            s.printStackTrace();
        }    finally {
            try {
                if (lStmt_ctrl != null)
                    lStmt_ctrl.close();
            } catch (SQLException e) {
            }
        }
  }

    private void logMessage(String str, String lDebugMode) {
        java.util.Date now = new java.util.Date();
        logFile.writeln(now.toString() + ": " + str, LogFile.STATEMENT);
    }

    private void logMessage(String str) {
        java.util.Date now = new java.util.Date();
    logFile.writeln(now.toString() + ": " + str, LogFile.STATEMENT);
    }

    /**
     * A generic method made to return the profile value of the passed profile
     * name.
     */
    private String getProfileValue(String profile) {
        String l_debug_mode = null;
        OracleCallableStatement lStmt = null;

        try {
            lStmt = (OracleCallableStatement) mConn.prepareCall(mProfileValue);
            lStmt.setString(2, profile);
            lStmt.registerOutParameter(1, java.sql.Types.VARCHAR, 0, 255);
            lStmt.execute();
            l_debug_mode = lStmt.getString(1);
            lStmt.close();

            logMessage("Profile '" + profile + "' Value : " + l_debug_mode,
                    mDebugFlag == null ? "Y" : mDebugFlag);

        } catch (SQLException s) {
            logMessage(
                    "FileLoader.getProfileValue(): Exception thrown w/ error message: "
                            + s.getMessage(), "Y");
            lRC.setCompletion(ReqCompletion.WARNING, M_WARNING);
            s.printStackTrace();
        } finally {
            try {
                if (lStmt != null)
                    lStmt.close();
            } catch (SQLException e) {
            }
        }
        return (l_debug_mode);
    }


    private String getErrorFlag() {
        String l_error_flag = null;
        OracleCallableStatement lStmt = null;

        try {
            lStmt = (OracleCallableStatement) mConn.prepareCall(doesErrorExist);
            lStmt.registerOutParameter(1, java.sql.Types.VARCHAR, 0, 255);
            lStmt.execute();
            l_error_flag = lStmt.getString(1);
            lStmt.close();
            logMessage("Error API Returned '" + "' Value : " + l_error_flag);

        } catch (SQLException s) {
            logMessage(
                    "Exception thrown in getErrorFlag: "
                            + s.getMessage(), "Y");
            lRC.setCompletion(ReqCompletion.WARNING, M_WARNING);
            s.printStackTrace();
        } finally {
            try {
                if (lStmt != null)
                    lStmt.close();
            } catch (SQLException e) {
            }
        }
        return (l_error_flag);
    }


    public String getMessage(String appName, String msgName) {

        if (mCtx != null && mCtx.getResourceStore() != null)
            return (mCtx.getResourceStore().getResourceText(appName, msgName));
        else
            return msgName;
    }


    /**
     * Returns the file separator
     */
    private String getFileSeparator() {
        return (System.getProperty("file.separator"));
    }


    static Connection con = null;
//    static Connection oraConn = null; 

    static String mCaptureCustomer = " Declare " + " BEGIN "
            + " xxPeopleSoftInterfacePkg.manage_Customer(p_CUSTOMER => :1,"
            + " p_peopleSoft_customer_id => :2, "
            + " p_deleted => :3, "
            + " p_name => :4, "
            + " p_parentCustomerName => :5, "
            + " p_type_ => :6"     
      + "); "
            + " END;";


// ####################### Begin manage_Customer #######################
    private void manage_Customer
  (
    String p_CUSTOMER
  , String p_peopleSoft_customer_id
  , String p_deleted
  , String p_name
  , String p_parentCustomerName
  , String p_type_
  )
    {
        String l_debug_mode = null;
        OracleCallableStatement lStmt = null;
                    logMessage("Fetching data for Customerator CUSTOMER=>"
                            + p_CUSTOMER +  "   Deletion Flag=>"+ p_deleted);

        try {
            lStmt = (OracleCallableStatement) mConn
                    .prepareCall(mCaptureCustomer);
            lStmt.setString(1, p_CUSTOMER);
            lStmt.setString(2, p_peopleSoft_customer_id);
            lStmt.setString(3, p_deleted);
            lStmt.setString(4, p_name);
            lStmt.setString(5, p_parentCustomerName);     
            lStmt.setString(6, p_type_);
            lStmt.execute();
            lStmt.close();
        } catch (SQLException s) {
            logMessage(
                    "In Caputre for CUSTOMER=>" + p_CUSTOMER + " Exception thrown w/ error message: "
                            + s.getMessage(), "Y");
      //            lRC.setCompletion(ReqCompletion.WARNING, M_WARNING);
            s.printStackTrace();
        }
    finally {
            try {
                if (lStmt != null)
                    lStmt.close();
            } catch (SQLException e) {
            }
        }
    }
// ####################### End manage_Customer #######################



    public void openConection() {
      logMessage( "In  openConection()");
        try {
      logMessage( "Before Loading Driver com.microsoft.jdbc.sqlserver.SQLServerDriver");   
            Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
      logMessage( "After Loading Driver com.microsoft.jdbc.sqlserver.SQLServerDriver");         
      logMessage( "Attempting to connect to " + mPeopleSoftServerName);
     
            con = DriverManager
                    .getConnection("jdbc:microsoft:sqlserver://" + mPeopleSoftServerName + ":1433;User=pplsoft_apps;Password=guestpeoplesoft");
      //Use the default port for PeopleSoft SQL*Server 1433
      logMessage( "After con assigned from getConnection(jdbc:microsoft:sqlserver://" + mPeopleSoftServerName + ":1433;User=pplsoft_apps;Password=*****");

        } catch (java.lang.ClassNotFoundException e) {
            logMessage("openConection() ClassNotFoundException: " + e);
        } catch (SQLException ex) {
            logMessage("openConection() SQLException: " + ex);
        }
    }

    public void closeSQLServerConnection() {
        try {
      logMessage( "In  closeSQLServerConnection().......closing JDBC Connection");
      if (con != null)
      {
      logMessage( "Con is not null");
        con.close();
      logMessage( "Con Closed Successfully");       
      }
      else
        logMessage( "Connection object was null, hence skipping close");
        } catch (SQLException ex) {
            logMessage("SQLException: " + ex);
        }
    catch (Exception ex) {
            logMessage("Exception in closeSQLServerConnection() : " + ex);
        }   
    }

    /**
     * Method that returns the date when this interface ran the last time
     */
    private Date getLastRunDate() {
        String l_debug_mode = null;
        CallableStatement lStmt = null;
    Date lastRunDate = null;
        try {
            lStmt = (CallableStatement) mConn.prepareCall(mLastRunDate);
            lStmt.setString(2, singleCUSTOMERNumberTemp);
            lStmt.registerOutParameter(1, Types.DATE);
            lStmt.execute();
            lastRunDate  = lStmt.getDate(1);
            lStmt.close();
            logMessage("getLastDate is returning : " + lastRunDate , "Y");

        } catch (SQLException s) {
            logMessage(
                    "getLastRunDate(): Exception thrown w/ error message: "
                            + s.getMessage(), "Y");
            lRC.setCompletion(ReqCompletion.WARNING, M_WARNING);
            s.printStackTrace();
        } finally {
            try {
                if (lStmt != null)
                    lStmt.close();
            } catch (SQLException e) {
            }
        }
        return (lastRunDate);
    }


    private void processPeopleSoftCustomerRecords() {
        int number_of_recs = 0;
 Date lastRunDate = getLastRunDate();
//############# Begin Customerator #############    
        try {
            {

                PreparedStatement stmt = con.prepareStatement("SELECT CUSTOMER_NUMBER ,Customer_id ,deleted_flag ,CustomerName ,Parent_Customer_name FROM   pplapps.PeopleSoftCustomerView WHERE ModifiedWhen >= ?" + singleCUSTOMERNumber + orderByClauseSQL );

        stmt.setDate(1,lastRunDate);

                ResultSet rst = stmt.executeQuery();

                while (rst.next()) {
                    number_of_recs++;
                    if (number_of_recs == max_number_of_records)
                        break;

                manage_Customer(
         rst.getString(1), rst.getString(2)
        ,rst.getString(3), rst.getString(4)
        ,rst.getString(5), "" /*We do not have any value for Customer
                               * Type_ from peoplesoft*/
        );
                }
                stmt.close();
                rst.close();
            }
      mConn.commit();
        } catch (SQLException ex) {
            logMessage("SQLException: " + ex);
        }
    catch (Exception ex) {
            logMessage("Exception:: " + ex);
        }
   
        closeSQLServerConnection();


    }


    /**
     * Concurrent Processing provides an interface 'JavaConcurrentProgram' with
     * abstract method runProgram().
   * It is within this method that we load the SQL*Server Driver for
   * TCA Customers.
   * All the inserts/updates in APPS will be done using various TCA PL/SQL
   * APIs within xxPeopleSoftInterfacePkg
     */
    public void runProgram(CpContext pCpContext) {
        applName = "MSC"; 
        String l_file_path = null;
        String l_msc_top = null;
        mCtx = pCpContext;

        //get handle on request completion object for reporting status
        lRC = pCpContext.getReqCompletion();

        // assign logfile
        logFile = pCpContext.getLogFile();

        // assign outfile
        outFile = pCpContext.getOutFile();

        // get the JDBC connection object
        mConn = pCpContext.getJDBCConnection();

        // assign fileseparator
        mFileSeparator = getFileSeparator();

        //get debug mode
        mDebugFlag = getProfileValue("XX_ENABLE_DEBUG_MODE");

        //get Pubs server name
        mPeopleSoftServerName = getProfileValue("XX_PEOPLESOFT_SERVER_NAME");

        l_file_path = ((new File(outFile.getFileName())).getParent() == null ? ""
                : (new File(outFile.getFileName())).getParent());

        // get parameter list object from CpContext
        ParameterList lPara = pCpContext.getParameterList();
    while(lPara.hasMoreElements())
    {
     NameValueType aNVT = lPara.nextParameter() ;
     //Currently using only one Parameter, else we need to use aNVT.getName
     singleCUSTOMERNumber = aNVT.getValue() ;
     singleCUSTOMERNumberTemp = singleCUSTOMERNumber ;
    }

    if (!(singleCUSTOMERNumber == null || singleCUSTOMERNumber == ""))
      singleCUSTOMERNumber = " and CUSTOMER = " + singleCUSTOMERNumber ;

    orderByClauseSQL = " order by ModifiedWhen, ID " ;

    logMessage("singleCUSTOMERNumber=>"+ singleCUSTOMERNumber );
   
    /** openConection() Opens the connection to SQL Server Database*/
    openConection() ;
    logMessage("Before Calling processPeopleSoftCustomerRecords()");
        processPeopleSoftCustomerRecords();
    logMessage("After Calling processPeopleSoftCustomerRecords()");
    logMessage("singleCUSTOMERNumber=>" + singleCUSTOMERNumber );
    //The control record will be registered only when the CUSTOMER passed in is NULL
    if (singleCUSTOMERNumber == null || singleCUSTOMERNumber == "")
    {
      logMessage("singleCUSTOMERNumber=>" + singleCUSTOMERNumber );   
      registerControlRecord() ;
    }
        try
    {
            // get OutFile object from CpContext
            OutFile lOF = pCpContext.getOutFile();
      errorsEncounteredFlag = getErrorFlag() ;
      if (errorsEncounteredFlag.equals("1"))
                  setCompletion(ReqCompletion.WARNING, "Request Encountered some errors");
      else
      {
            outFile.writeln("No Errors Encountered.");
                  setCompletion(ReqCompletion.NORMAL, "Request Completed Normal");
      }
     
        } catch (Exception e) {
            setCompletion(ReqCompletion.ERROR, e.toString());
        } finally {
            pCpContext.releaseJDBCConnection();
        }       
    }
    /**
     * Sets the request completion status based on proper precedence. ERROR >
     * WARNING > NORMAL
     *
     * @param pStatus
     *            Status of the request.
     * @param pCompletionText
     *            Request's completion text.
     */
    public void setCompletion(int pStatus, String pCompletionText) {
        if ((pStatus == ReqCompletion.ERROR)
                || ((pStatus == ReqCompletion.WARNING) && (mRequestStatus != ReqCompletion.ERROR))
                || ((pStatus == ReqCompletion.NORMAL)
                        && (mRequestStatus != ReqCompletion.WARNING) && (mRequestStatus != ReqCompletion.ERROR))) {
            mRequestStatus = pStatus;
            lRC.setCompletion(pStatus, pCompletionText);
        }
    } 
}


Anil Passi

Comments   

0 #1 Runa Shrivastava 2006-12-17 00:00
Anil,
I am trying to do something similar as the sample code above. The code would be a great help . Thanks!

I have 2 questions:
1. On which location should we usually keep a custom java class. Should we define in a new package or keep it under the apps package. I dont see any standards mentioned for custom java files. Your java class is not under any package currently.
2. I am planning to send an email to a predefined group informing about any failure of the concurrent request. Should I be writing a java sendmail class or call in pl/sql procedure from java using sendmail.
Quote
0 #2 Runa Shrivastava 2006-12-17 00:00
Anil,
I am trying to do something similar as the sample code above. The code would be a great help . Thanks!

I have 2 questions:
1. On which location should we usually keep a custom java class. Should we define in a new package or keep it under the apps package. I dont see any standards mentioned for custom java files. Your java class is not under any package currently.
2. I am planning to send an email to a predefined group informing about any failure of the concurrent request. Should I be writing a java sendmail class or call in pl/sql procedure from java using sendmail.
Quote
0 #3 ajay singh 2006-12-29 00:00
hai anil
my name is ajay singh i m from mumbai .i m new for oracle apps technical . i want more information ab this and also want to do the project .
can you guide me
Quote
0 #4 ajay singh 2006-12-29 00:00
hai anil
my name is ajay singh i m from mumbai .i m new for oracle apps technical . i want more information ab this and also want to do the project .
can you guide me
Quote
0 #5 Suresh 2006-12-30 00:00
thank u very much for ur informative website it is very helpfull to me and i have few clarifications as listed below in the OA frame work plss help me in this
1.How to insert the data in to the tables by oa frames?
2. How to register the frame designed in the OA Framework in to apps?
3. How to see and personalize the Frames already exiasting in the apps these are the three big Question Marks for me in the OA Framework,
i request u plsss help me in this issues plsssss.... i know u ill help me... thankssssss MY MAil : plsss send me the mail
Quote
0 #6 Suresh 2006-12-30 00:00
thank u very much for ur informative website it is very helpfull to me and i have few clarifications as listed below in the OA frame work plss help me in this
1.How to insert the data in to the tables by oa frames?
2. How to register the frame designed in the OA Framework in to apps?
3. How to see and personalize the Frames already exiasting in the apps these are the three big Question Marks for me in the OA Framework,
i request u plsss help me in this issues plsssss.... i know u ill help me... thankssssss MY MAil : plsss send me the mail
Quote
0 #7 Runa Shrivastava 2007-01-30 00:00
Hi Anil,

I did not thank you for your quick response to my queries.
I was checking up your other articles and you are doing a great job with this site here!!

Thank You.

Runa
Quote
0 #8 kumar 2007-04-05 00:00
Hi Anil,

I liked this site very much. The articles here are great and worth reading
Quote
0 #9 kumar 2007-04-05 00:00
Hi Anil,

I liked this site very much. The articles here are great and worth reading
Quote
0 #10 Pritosh 2007-05-13 00:00
Is there any API documentation available on
import oracle.apps.fnd .cp.request.* ;
import oracle.apps.fnd .util.*;
Quote
0 #11 Anil Passi 2007-05-14 00:00
Hi

Indeed there is documentation plus the java doc from OAF-jDeveloper[ download the patch]. You can also look at sample programs in metalink and more importantly code for some of the seeded java concurrent programs delivered by Oracle.

If you have any specific questions on those APIs, then please feel free to ask

Thanks,
Anil Passi
Quote
0 #12 Anil Passi 2007-06-28 00:00
Thanks Rehan
Quote
0 #13 Dan Hildreth 2007-08-09 21:58
We tried ............

6 . CLASSPATH...you can either change the CLASSPATH of the Oracle Apps environment or you can override the CLASSPATH per concurrent program. I think the decision will be driven by how many Java Concurrent Programs you plan to develop.
Anyway , in the option field, include the following directories with their absolute path
$JAVA_TOP: apps.zip with path:appsborg.z ip:your custom directory where java/jdbc files will be stored.

We got............ .......
Excepti on in thread "main" java.lang.NoCla ssDefFoundError : oracle/apps/fnd /cp/request/Run

Any ideas?
Quote
0 #14 venkats 2007-09-12 03:11
Hi Anil,
Thanks a lot for your wonderful articles.
I learned a lot from this blog.
It would be great if you can put some articles on JSP customization in apps as well
That would be really helpful
thanks
Quote
0 #15 jkjk 2007-09-13 18:13
Hi Dan,
I have the same issue... I am in a Catch-22 situation. No matter what I put in the "Options" text field, even any gibberish, I get the same error - Exception in thread "main" java.lang.NoCla ssDefFoundError : oracle/apps/fnd /cp/request/Run . When I leave the "Options" field blank I get java.lang.Class NotFoundExcepti on: .

Anil, do you have any suggestions?

- --------------- --------------- --------------- --------------- ----------
We tried ............

6. CLASSPATH...you can either change the CLASSPATH of the Oracle Apps environment or you can override the CLASSPATH per concurrent program. I think the decision will be driven by how many Java Concurrent Programs you plan to develop.
Anyway, in the option field, include the following directories with their absolute path
$JAVA_TOP:apps .zip with path:appsborg.z ip:your custom directory where java/jdbc files will be stored.

We got............ .......
Exception in thread "main" java.lang.NoCla ssDefFoundError : oracle/apps/fnd /cp/request/Run

Any ideas?
Quote
0 #16 Hariram 2007-10-18 17:31
If i want to see the source code of the java file which they used to develop the java concurrrent program, where would it be.
any standard path they would be in ?
Quote
0 #17 Sanket 2008-01-08 11:01
I too followed your instructions on setting the classpath and received the same error as Dan and JkJk...

On analyzing I realized that Oracle Apps while executing the Java Concurrent Program is converting all periods "." to slashes "/" and hence it can not resolve anything. You must be having some work around. Can you please guide me as to how can I over-come this issue?

Thanks.

-Sanket
Quote
0 #18 Sanket 2008-01-08 12:53
In the OPTIONS write the following

-cla sspath full_path_to_$A U_TOP/appsborg. zip:full_path_t o_ur_directory/ ur_classes.jar: full_path_to_ur _directory/ur_c lasses.zip

It is working GREAT now. :-D

Thanks.

- Sanket
Quote
0 #19 Anil Passi 2008-01-08 13:08
Thats right Sanket. You need to be using absolute path.
Although it becomes a real pain when environment gets cloned from production, as the absolute path must replaced again

Thanks
A nil Passi
Quote
0 #20 Rehan Yusuf 2008-01-19 05:40
hello Anil,

Coming back the API documentation bit, i was trying to make a JCP which submits another programatically . But I'm challenged by the documentation available on the seeded classes (ex. oracle.apps.fnd .cp.request.Con currentRequest) . So, I raised a SAR with oracle to check availability on the documentation and I've been there isn't any.
I see a lot of potential for reusing some of the seeded classes in our custom programs, but the developer would be hampered by the lack of Javadoc for these classes.
Any thoughts around this ?

regards,
Reh an Yusuf
Quote
0 #21 Anil Passi 2008-01-19 06:47
It is debatable whether Oracle should provide documentation for java classes.
Unfort unately they dont.

However you can also decompile the java class using jad

Thanks,
An il Passi
Quote
0 #22 Satish P 2008-01-26 21:33
Hi Anil,

Great website!! you are going great help to the Oracle apps community for spreading knowledge. I have a question realted to this article. I am trying to find the documentation which outlines the tecnical details regarding Java concurrent program. Alos,want to know where can I get the documentation for all the AOL packages for Java concurrent programs.

-Tha nks again,
Satya
Quote
0 #23 Mad 2008-02-26 09:01
I want to modify 'PoGenerateDocu mentCP.class' which is registered as java concurrent program
.This is a first customisation we are doing on java concurrent program. Could you please send me steps implement after modifying this program. Should i change name of this program and copy under custom top retaining original path. Could you send steps for this customisation.
Quote
0 #24 Hanumesh 2008-03-07 07:11
Hi Anil,

I am new to Oracle Apps, i tried to Register a Sample Java Concurrent Program which Prints "Hello World" in Output file and Log file.
I registered the Java Class file successfully, when i tried to run the Program from Apps frontend its completing with error i found following Exceptions in Log file of the Request.
I have compiled the Java Program in JDK 1.5_0_7

What steps i need to take to resolve this problem ?

java.lang.Un supportedClassV ersionError: oracle/apps/fnd /gems/Hello (Unsupported major.minor version 49.0)
at java.lang.Class Loader.defineCl ass0(Native Method)
at java.lang.Class Loader.defineCl ass(ClassLoader .java:539)
at java.security.S ecureClassLoade r.defineClass(S ecureClassLoade r.java:123)
at java.net.URLCla ssLoader.define Class(URLClassL oader.java:251)
at java.net.URLCla ssLoader.access $100(URLClassLo ader.java:55)
a t java.net.URLCla ssLoader$1.run( URLClassLoader. java:194)
at java.security.A ccessController .doPrivileged(N ative Method)
at java.net.URLCla ssLoader.findCl ass(URLClassLoa der.java:187)
a t java.lang.Class Loader.loadClas s(ClassLoader.j ava:289)
at sun.misc.Launch er$AppClassLoad er.loadClass(La uncher.java:274 )
at java.lang.Class Loader.loadClas s(ClassLoader.j ava:235)
at java.lang.Class Loader.loadClas sInternal(Class Loader.java:302 )
at java.lang.Class .forName0(Nativ e Method)
at java.lang.Class .forName(Class. java:141)
at oracle.apps.fnd .cp.request.Run .main(Run.java: 157)


Thanks in Advance,
Quote
0 #25 Naveenkcl 2008-05-01 13:01
Hello ANIL,
Your training articles are great....Could you please provide some training articles for reports and also How to add new report to OAF pages and how to customize existing web reports?
OIC commission statement report that runs on web how to customize this report...

Than ks in advance
Naveen
Quote
0 #26 Kashif Baksh 2008-07-22 08:53
Hi Anil

I am customizing a report "Send Separate Remittance Advices" in AP (R12).

From your document, the Data Definition code and the short name of the Concurrent program should be same, but following are the details of the existing report (they both are different).

Co ncurrent Name: Send Separate Remittance Advices
Short name:IBY_FD_SRA _FORMAT

Templa te name : Separate Remittance Advice
Template Code: IBYR_SRA

Data Definition name:Oracle Payments Funds Disbursement Payment Instruction Extract 1.0
Data Definition Code: IBY_FD_INSTRUCT ION_1_0

As seeded Templates cannot be updated, I have created another template and attached the above Data definition to that and inactivated the existing Template. But still the system picks up the same template and concurrent program fails as END DATE has passed.

The most confusing part is why the Data Definition Code and Short name of CP are different and how they are being liked with each other.

Thanks in advance for your help!
Supriya
Quote
0 #27 Anil Passi- 2008-07-22 09:28
Hi Supriya

It is a convention to have the Data Definition and Short Name to match.
However this is not mandatory if BI Publisher is being submitted programatically .
For example the below Java Code excerpt can pass template code and XML output as parameter to generate a PDF

Coming back to your question, it appears there is a hardcoding of template name.
If hardcoding is indeed the case, then you are left with no choice but to modify the existing template.
In case you want additional data to be displayed in output, then you can modify package IBY_FD_EXTRACT_ EXT_PUB

Thanks,
Anil


It can be done using java code by setting the properties using the code below
Properties prop= new Properties();
prop.put("pdf-s ecurity", "true"); // PDF security control
prop.put("pdf-p ermissions-pass word", "abc"); // permissions assword
prop.put("pdf-o pen-password"," welcome");
prop.put("pdf-e ncription-level ", "0"); //encryption level
//pass the set properties to TemplateHelper Class
TemplateH elper.processTe mplate(
appsCon text, // AppsContext
app lShortName, // Application short name of the template
templa teCode, // Template code of the template
langCo de, // ISO language code of the template
territ oryCode, // ISO territory code of the template
dataIn putStream, // XML data for the template
output Type, // Output type of the procesed document
proper ties, // Properties for the template processing
docO utputStream); // OutputStream where the processed document goes.
}
Quote
0 #28 Kashif Baksh 2008-07-22 11:35
Thanks a lot for your detailed explanation Anil!

One more question (as Iam new to working on Java files),

Form the Concurrent Program Executable,

Ex ecution File name : FDSeparateRemit tanceAdvice
Exe cution File Path : oracle.apps.iby .scheduler

Whe n I go to the following path, I find only .class files. I loaded this class file in the JDeveloper. It generates skeleton of the java program.
/u02/o racle/DEV2/apps /apps_st/comn/j ava/classes/ora cle/apps/iby/sc heduler

Not sure of how to find the exact java program etc. It would be great if you can throw some light on that..

Thanks
Supriya
Quote
0 #29 Anil Passi- 2008-07-22 11:51
You need to decompile the .class file and convert that into java file

For this most popular tool is jad which can be downloaded from http://www.kpdus.com/jad.html#download

Thanks,
Anil
Quote
0 #30 deepaksri 2009-06-30 12:29
like in oracle application11i
fnd_request.su bmit

can i able to create own concurrent program and submit request in Model view controller web applications that will run oracle application server10G.

Thanks
Deepak
Quote
0 #31 Suzanne Camyre 2009-07-07 15:33
Hi Anil,

I am trying to add a new font to an Oracle java concurrent program (PO Output for Communication), but the font is not being applied in the report. The font is recognized and used in other Oracle BI Pulblisher reports but I am thinking the java concurrent program needs to have the font setup differently.

H ow can I troubleshoot how the font should be setup for the java concurrent program? I've gone through the java code and do not see specific font calls - is there a default aliasing file for fonts?

Thanks,
Suzanne
Quote
0 #32 Matta 2010-01-21 21:07
Hi Suzanne,
This is your question on changing fornt for "PO Output for communication". .

Actually if you want to see different font in your output/pdf, you don't need to change above mentioned program.
All you need to do is change font settings in the template "PO_STANDARD_XS LFO.xls".
Or if you can create your new custom template from PO_STANDARD_XSL FO.xls and do all your customizations/ changes and then register your new template.
I have documented/disc ussed these points in chandramatta.blogspot.com/
You can take a look.

Thanks,
Matt
Quote
0 #33 Neha J 2011-01-17 00:40
Hello Anil,

I need to customize the Separate Remittance Advise report...but i m going no where in that report as i m not getting where i need exactly change the report..to get additional data in the report...

I need to show Invoice number and invoice date in the remitance report...but i m bot getting where does the query resides and where exatcly i have to change to get the required information..

I have checked all the Java code file to get some linked packages and queries.....but unfortunaltey could not find the query to update...

As i new with this kind of report....pleas e if possible tell me how such report works...and guide me to make the required changes..

Than ks,
Neha
Quote
0 #34 LETA26Kennedy 2011-06-08 00:22
I opine that to get the credit loans from creditors you should have a good reason. Nevertheless, once I've got a financial loan, because I wanted to buy a building.
Quote
0 #35 Jayati 2011-09-20 00:36
Hello Anil,

I have th same qesion I need to customize the Separate Remittance Advise report...but i m going no where in that report as i m not getting where i need exactly change the report..to get additional data in the report...

I need to show Invoice desciptn remitance report...but i m bot getting where does the query resides and where exatcly i have to change to get the required information..

I have checked all the Java code file to get some linked packages and queries.....but unfortunaltey could not find the query to update...

As i new with this kind of report....pleas e if possible tell me how such report works...and guide me to make the required changes..

Thanks,
Jayati
Quote
0 #36 kamal@tcs 2012-03-29 01:09
Hi Anil,

I created one Java Con Program and the program needs 15 to 16 Third party jar fiiles.
When i enter the classpath in OPTIONS column of CONCURRENT PROGRAMS form, it is giving error saying the OPTIONS field contains not more than 250 character.
But our classpath exceeds 600 character.

Ple ase help us to resolve this issue.
Thanks in advance.
Quote
0 #37 putchakayala ram 2014-03-07 02:53
Hi Anil,

I created one Java Con Program and the program needs 15 to 16 Third party jar fiiles.
When i enter the classpath in OPTIONS column of CONCURRENT PROGRAMS form, it is giving error saying the OPTIONS field contains not more than 250 character.
But our classpath exceeds 600 character.

Ple ase help us to resolve this issue.
Thanks in advance.
Quote
0 #38 Sunil Kaswan 2014-11-20 11:33
Hi Anil,

I need to customize the Separate Remittance Advise report. I have to modify the template add line details in template IBYR_SRA. I checked your previous reply where you mentioned that to display additional data in layout we have to make changes in package IBY_FD_EXTRACT_ EXT_PUB. I did not find any procedure or function relating to this type of requirement where i can change the code. Could you please guide me how to fulfill the requirement. My requirement is to display additional information in the layout beneath the remittance detail for example few more columns in another table related to invoice number. How the xml will get generated?

Thanks in advance for your timely help.
Quote
0 #39 corporate attorneys 2021-06-17 14:59
Hi my loved one! I wish to say that this post is
awesome, nice written and come with almost all vital infos.
I'd like to look extra posts like this .

My web-site ... corporate attorneys: http://www.Indiriyorum.net/user/berryrest9/
Quote

Add comment


Security code
Refresh

Search Trainings

Fully verifiable testimonials

Apps2Fusion - Event List

<<  Jun 2021  >>
 Mon  Tue  Wed  Thu  Fri  Sat  Sun 
   1  2  3  4  5  6
  7  8  910111213
14151617181920
21222324252627
282930    

Enquire For Training

Fusion Training Packages

Get Email Updates


Powered by Google FeedBurner