Wednesday, 23 April 2025

OIC Useful links

 How to Call a BIP Report from OIC?

https://mylearn.oracle.com/ou/learning-path/become-an-oracle-apex-developer-professional/146080



---BEENUM LEARNINGS---- VVIMP

https://www.youtube.com/c/BEENUMLEARNING/playlists


---ORA TRAININGS----  VVIMP  SaaS OIC

https://www.youtube.com/c/SriOracle/playlists


----Fox Oracle Apps Solutions---

https://www.youtube.com/channel/UC5Ni1Xrhotyx_uFykxhZU6g/playlists


https://docs.oracle.com/en/database/oracle/oracle-rest-data-services/21.2/aelig/installing-REST-data-services.html#GUID-BEF8B58F-53C2-4377-AC38-595A85094E79


-------OIC BASICS -----------

https://www.oicbasics.com/p/home_26.html


-----OIC blog----

https://soalicious.blogspot.com/2021/08/oracle-integration-cloud-serviceoics.html



---Oracle Integration Cloud Overview--- VVIMP  Demo NOTES

https://www.youtube.com/watch?v=I-ILqtZZYiM


---Learn Oracle Integration Cloud - Overview---

https://www.youtube.com/watch?v=KokrJVXl_-Y


----Oracle Integration Cloud and Fusion----

https://www.youtube.com/watch?v=b7zrJ1uyUx8


---OracleIntegrationCloud OverviewAndDemo--  VVIMP  Demo Notes

https://www.youtube.com/watch?v=3MF_vFrmlPY


---Oracle Integration Cloud Services Online Training (Oracle OIC Demo)--  VVIMP Demo NOTES

https://www.youtube.com/watch?v=XL3YbHCq1Nc


---Oracle Integration Cloud Tutorial |Oracle Integration Cloud Service| Oracle Integration Cloud Demo 1



https://www.youtube.com/c/BEENUMLEARNING/playlists


---Oracle Integration Cloud Service (OIC/ICS) Overview---

https://www.youtube.com/watch?v=M-3kR2M_3Yw



----Learn Oracle Integration Cloud - XML, XSD - Session1---

https://www.youtube.com/watch?v=dh7DpImortk


----Oracle Integration Capabilities: B2B---

https://www.youtube.com/watch?v=hpDwmLCdpsY


--------------------------------------------------------------------------------------------------------------


----------------------------------------------VBCS------------------------------------------------------------


--------------------------------------------------------------------------------------------------------------


https://hashnode.com/@satishkumar


---Single Select usage in Oracle VBCS----

https://mayukhmitra.hashnode.dev/single-select-usage-in-oracle-vbcs


----Dependent LOV using Single Select in Oracle VBCS----

https://mayukhmitra.hashnode.dev/dependent-lov-using-single-select-in-oracle-vbcs


---How to Filter Table Data in Oracle Visual Builder---

https://satishkumar.hashnode.dev/how-to-filter-table-data-in-oracle-visual-builder


---Updating and Deleting Selected Records in Read-Only JET Table (Part - 2)---

https://mayukhmitra.hashnode.dev/updating-and-deleting-selected-records-in-read-only-jet-table-part-2



https://oracleerplearning.blogspot.com/2021/10/custom-search-page-in-vbcs.html

https://venkspr.github.io/oow19/index

https://redthunder.blog/2018/11/17/teaching-how-to-invoke-rest-apis-from-oracle-visual-builder-web-mobile-apps/

https://www.youtube.com/watch?v=cxfJ_v-9NvM&list=PLx_KEor7e3PYstV5dwsasyn1_ylYtzobn

https://www.youtube.com/playlist?list=PLPIzp-E1msrYDyzVHxCcGHZ3KQg6cx3ox

https://www.youtube.com/watch?v=47pEQidRVSU

https://www.youtube.com/watch?v=pAPp49ZWjiQ&list=PLSKf-atSzZeiB4mTN8163D5Ohx3DzuHcd


https://conneqtiongroup.com/blog/category/vbcs


---VBCS solutions---

https://www.oracle.com/webfolder/technetwork/jet-830/jetCookbook.html?


component=rowExpander&demo=tableRowExpander

----VBCS Training----

https://www.youtube.com/user/ShayJDev/playlists


----VBCS Training videos---

https://www.youtube.com/c/OracleApplicationBuilderCloud


---Search --RaiseEVENT----

https://www.youtube.com/watch?v=kWSEDyToYg4


---Tilak VBCS----

https://www.youtube.com/c/TilakMichael/playlists


----Add Bar and Area Charts to an oracle VBCS page----

https://docs.oracle.com/en/cloud/paas/app-builder-cloud/tutorial-add-basic-charts-dev/index.html


---VBCS page margins paddings -----

https://www.oracle.com/webfolder/technetwork/jet/jetCookbook.html?component=spacing&demo=spacingvariants


dialogue box -- Image button action


-----Oracle Images-----

https://static.oracle.com/cdn/fnd/gallery/2301.0.0/images/preview/index.html


---VBCS Lab----

https://venkspr.github.io/oow19/index



---VBCS page links---

https://soalicious.blogspot.com/2022/04/vbcs-page-links.html


---VBCS External REST service calling---

https://www.youtube.com/watch?v=MtaCP3CwRZk&list=PLPIzp-E1msrYDyzVHxCcGHZ3KQg6cx3ox&index=24


---Convert UTC Date & time to another timezone in OIC---

https://www.techsupper.com/2017/11/convert-utc-date-time-to-another-timezone-in-oracle-integration-cloud-serviceics.html


---Automate CI/CD for Oracle Integration with Oracle Visual Builder Studio---

https://www.youtube.com/watch?v=UnfEbVOIPVY


---Automate Oracle Integration Export Import Process | OIC---

https://www.youtube.com/watch?v=DP9tYS0LJDs


https://docs.oracle.com/en/cloud/paas/integration-cloud/rest-api/api-integrations-integrations.html

https://www.techsupper.com/2018/08/migrate-integration-cloud-service-ics-integrations-to-integration-cloud-oic.html

https://amysimpsongrange.com/2021/08/11/oic-integration-lifecycle-using-rest/


----Conditional mapping in OIC---

https://wpsbutton.com/conditional-mapping-in-oic/


----B2B for Oracle Integration---

https://soalicious.blogspot.com/2022/07/b2b-for-oracle-integration.html


----Using B2B for Oracle Integration----

https://docs.oracle.com/en/cloud/paas/integration-cloud/integration-b2b/two-patterns-using-b2b-oracle-integration-standalone-or-trading-partners.html



----OIC Blogs----

https://oracleerplearning.blogspot.com/2022/03/oic-tutorial-link.html

https://soalicious.blogspot.com/2021/08/oracle-integration-cloud-serviceoics.html


  ---Switching Visual Builder Tenant DB To Oracle ATP Database---

  https://k21academy.com/oracle-integration-cloud-service/switching-visual-builder-tenant-db-to-oracle-atp-database/

  

  ----Switching Visual Builder to Use The Oracle ATP Database---

      https://blogs.oracle.com/vbcs/post/switching-visual-builder-to-use-the-oracle-atp-database

  

    ---Switching Visual Builder to use Oracle ATP Database----

  https://www.youtube.com/watch?v=V-LZC4aH4lI

  

  https://developercommunity.blog/2022/05/16/visual-builder-on-existing-oracle-database-with-business-object-by-shay-shmeltzer/

  https://blogs.oracle.com/vbcs/post/bringyourschema

  

  https://onlineappsdba.com/index.php/2020/09/26/switching-visual-builder-tenant-db-to-oracle-atp-database/


---ORDS---


https://docs.oracle.com/en/database/oracle/oracle-rest-data-services/22.4/qsord/get-started-with-oracle-rest-data-services.html#GUID-F6961F9D-C0FA-4ED4-AA88-88FDDF208D83


https://k21academy.com/oracle-integration-cloud-service/how-to-use-oracle-rest-data-services-ords/


https://docs.oracle.com/en/database/oracle/oracle-rest-data-services/23.1/orddg/oracle-rest-data-services-developers-guide.pdf


https://www.youtube.com/watch?v=V7sihCkC5qs

Thursday, 25 May 2023

OAF How to invoke concurrent program with parameters on button event

package cnsi.oracle.apps.fnd.webui;

import java.util.Vector; import oracle.apps.fnd.common.VersionInfo; import oracle.apps.fnd.cp.request.ConcurrentRequest; import oracle.apps.fnd.framework.OAApplicationModule; import oracle.apps.fnd.framework.OAException; import oracle.apps.fnd.framework.server.OADBTransaction; import oracle.apps.fnd.framework.webui.OAControllerImpl; import oracle.apps.fnd.framework.webui.OAPageContext; import oracle.apps.fnd.framework.webui.beans.OAWebBean; /** * Controller for ... */ public class InvokeConcurrentProgCO extends OAControllerImpl { public static final String RCS_ID="$Header$"; public static final boolean RCS_ID_RECORDED = VersionInfo.recordClassVersion(RCS_ID, "%packagename%"); /** * Layout and page setup logic for a region. * @param pageContext the current OA page context * @param webBean the web bean corresponding to the region */ public void processRequest(OAPageContext pageContext, OAWebBean webBean) { super.processRequest(pageContext, webBean); } /** * Procedure to handle form submissions for form elements in * a region. * @param pageContext the current OA page context * @param webBean the web bean corresponding to the region */ public void processFormRequest(OAPageContext pageContext, OAWebBean webBean) { super.processFormRequest(pageContext, webBean); String eventNameStr= pageContext.getParameter(EVENT_PARAM); if(eventNameStr!=null && "invoke_event".equals(eventNameStr)) { int requestID = submitCPRequest(pageContext,webBean); throw new OAException("COncurrent Request ID-->"+requestID); } } public int submitCPRequest(OAPageContext pageContext, OAWebBean webBean) { OAApplicationModule am = (OAApplicationModule)pageContext.getApplicationModule(webBean); try { OADBTransaction tx = (OADBTransaction)am.getOADBTransaction(); java.sql.Connection pConncection = tx.getJdbcConnection(); ConcurrentRequest cr = new ConcurrentRequest(pConncection); String applnName = "FND"; //Application that contains the concurrent program String cpName = "QAG_INV_REPORT_NEW"; //Concurrent program name String cpDesc = "Invoking From OAF"; // concurrent Program description // Pass the Arguments using vector // Here i have added my parameter headerId to the vector and passed the vector to the concurrent program String headerIDStr ="123"; //Number invoiceIDNum = new Number(123); Vector cpArgs = new Vector(); cpArgs.addElement(headerIDStr); // cpArgs.addElement("Enum"); // cpArgs.addElement("pBatch"); // Calling the Concurrent Program int requestId = cr.submitRequest(applnName, cpName, cpDesc, null, false, cpArgs); tx.commit(); return requestId; } catch (Exception e) { e.printStackTrace(); throw new OAException(e.getMessage()); } } }

Thursday, 13 April 2023

Oracle Bursting Program

 1)Create Data definition.

2)Create Bursting File.

3)Template

4 ) After Trigger.



                              <?xml version="1.0" encoding="utf-8"?>

<dataTemplate name="QAG_HR_ISP_SEPARATION" description = "QAG HR Separation Report - ISP" Version="1.0" defaultPackage="xxqr_uip_utility_pkg">

  <properties>

<property name="xml_tag_case"      value="UPPER"/>

<property name="debug_mode"        value="ON"/>

<property name="include_rowsettag" value="FALSE"/>

  </properties>

   <parameters>

   </parameters>

<dataQuery>

<sqlstatement name="SEPARATION_REPORT">

<![CDATA[

SELECT papf.employee_number STAFF_NUMBER ,

  INITCAP (papf.title)

  || ' '

  || papf.first_name

  || ' '

  || DECODE (TRIM (papf.middle_names), NULL, TRIM (papf.last_name), TRIM (papf.middle_names)

  || ' '

  || TRIM (papf.last_name)) STAFF_NAME ,

  TO_CHAR(qr_final_settlement_cpnt.qr_service_date( papf.person_id) ,'DD-MON-YYYY') HIRE_DATE ,

  hr_general.decode_organization(paaf.organization_id) DEPARTMENT ,

  TO_CHAR(ppos.actual_termination_date,'DD-MON-YYYY') LWD ,

  TO_CHAR(ppos.LAST_UPDATE_DATE,'DD-MON-YYYY') LAST_UPDATE_DATE ,

  FU.USER_NAME LAST_UPDATED_BY ,

  'wassem@qatarairways.com.qa' EMAIL_TO ,

  'bvijayakumaran@qatarairways.com.qa' EMAIL_CC

FROM per_all_people_f papf,

  per_all_assignments_f paaf,

  per_periods_of_service ppos,

  FND_USER FU

WHERE papf.person_id              = paaf.person_id

AND primary_flag                  = 'Y'

AND ppos.person_id                = papf.person_id

AND ppos.actual_termination_date IS NOT NULL

AND FU.USER_ID                    = PPOS.LAST_UPDATED_BY

AND (trunc(ppos.actual_termination_date) = trunc(sysdate-1)

              or (ppos.actual_termination_date is not null and trunc(ppos.LAST_UPDATE_DATE) = trunc(sysdate-1) and trunc(ppos.actual_termination_date) < trunc(sysdate-1))

             )

AND ppos.actual_termination_date IS NOT NULL

--AND TRUNC(ppos.LAST_UPDATE_DATE)  = TRUNC(sysdate-1)

AND ppos.date_start               =

  (SELECT MAX (date_start)

  FROM per_periods_of_service

  WHERE person_id = ppos.person_id

  )

AND TRUNC(sysdate) BETWEEN papf.effective_start_date AND papf.effective_end_date

AND TRUNC(sysdate) BETWEEN paaf.effective_start_date AND paaf.effective_end_date

AND employee_number NOT LIKE 'TSS%'

AND employee_number NOT IN ('99996','99997','IT001')

AND employee_number     IN

  (SELECT papf.employee_number

  FROM PER_ALL_PEOPLE_F PAPF,

    PER_ALL_ASSIGNMENTS_F PAAF ,

    PAY_ELEMENT_TYPES_F patf ,

    PAY_ELEMENT_ENTRIES_F peef

  WHERE PAPF.PERSON_ID =PAAF.PERSON_ID

  AND patf.element_name='QAG_ISP_INFO'

  AND TRUNC(SYSDATE) BETWEEN PAAF.EFFECTIVE_START_DATE AND PAAF.EFFECTIVE_END_DATE

  AND TRUNC(SYSDATE) BETWEEN PAPF.EFFECTIVE_START_DATE AND PAPF.EFFECTIVE_END_DATE

  AND PATF.ELEMENT_TYPE_ID =PEEF.ELEMENT_TYPE_ID

  AND PEEF.ASSIGNMENT_ID   =PAAF.ASSIGNMENT_ID

  AND TRUNC(sysdate) BETWEEN peef.effective_start_date AND peef.effective_end_date

 -- AND current_employee_flag='Y'

  )

 ORDER BY 1,1 

   ]]> 

</sqlstatement>

<sqlstatement name="ROOT_DATA">

<![CDATA[

     SELECT TRUNC(SYSDATE) FROM DUAL

   ]]> 

</sqlstatement>

</dataQuery>  

<dataTrigger name="afterReport" source="xxqr_uip_utility_pkg.submit_bursting()"></dataTrigger>  

 <dataStructure>

   <group name="ROOT_DATA_GROUP" dataType="varchar2" source="ROOT_DATA">

       <group name="DATA_GROUP" dataType="varchar2" source="SEPARATION_REPORT">

             <element name="STAFF_NUMBER"      dataType="varchar2" value="STAFF_NUMBER"/>

             <element name="STAFF_NAME"        dataType="varchar2" value="STAFF_NAME"/>

             <element name="HIRE_DATE"         dataType="DATE"     value="HIRE_DATE"/>

             <element name="DEPARTMENT"        dataType="varchar2" value="DEPARTMENT"/>

             <element name="LWD"               dataType="varchar2" value="LWD"/>

             <element name="LAST_UPDATED_BY"   dataType="varchar2" value="LAST_UPDATED_BY"/>

             <element name="LAST_UPDATE_DATE"  dataType="varchar2" value="LAST_UPDATE_DATE"/>

             <element name="EMAIL_TO"          dataType="varchar2" value="EMAIL_TO"/>

             <element name="EMAIL_CC"          dataType="varchar2" value="EMAIL_CC"/>

       </group>

   </group>

</dataStructure>

</dataTemplate>


2)<?xml version="1.0" encoding="UTF-8"?>

<xapi:requestset xmlns:xapi="http://xmlns.oracle.com/oxp/xapi" type="bursting">

<xapi:request select="/QAG_HR_ISP_SEPARATION/ROOT_DATA_GROUP">

<xapi:delivery>

<xapi:email id="123" server="qrsmtp.gmail.com" port="25" from="erpservices@gmail.com" reply-to="erpservices@gmail.com">

<xapi:message id="123" to="bvijayakumaran@gmail.com" bcc="bvijayakumaran@gmail.com" attachment="true" content-type="excel" subject="Separation Report">

Hi,

Please find the attached Separation Report List.

</xapi:message>

</xapi:email>

</xapi:delivery>

<xapi:document output="QAG_HR_ISP_SEPARATION" output-type="excel" delivery="123">

<xapi:template type="rtf" location="xdo://QAIR.QAG_HR_ISP_SEPARATION.en.US/?getSource=true">

</xapi:template>

</xapi:document>

</xapi:request>

</xapi:requestset>


FUNCTION submit_bursting

  RETURN BOOLEAN;


FUNCTION submit_bursting

  RETURN BOOLEAN

IS

  l_req_id          NUMBER;

  p_conc_request_id NUMBER := fnd_global.conc_request_id;

BEGIN

  l_req_id   := fnd_request.submit_request ('XDO' ,'XDOBURSTREP' ,'' ,'' ,FALSE ,'Y' ,p_conc_request_id ,'N' ,CHR (0) ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' );

  IF l_req_id > 0 THEN

    RETURN TRUE;

  ELSE

    RETURN FALSE;

  END IF;

END submit_bursting;

Staff Number

Staff  Name

Department

Last Working Day

FSTAFF_NUMBER

STAFF_NAME

DEPARTMENT

LWDE



Wednesday, 12 April 2023

SQL Running in OAF Page

 

1)    Create one Webui page.



package qair.oracle.apps.qaghr.selfservice.dataload.webui;

 

import java.io.Serializable;

import oracle.apps.fnd.common.VersionInfo;

import oracle.apps.fnd.framework.OAApplicationModule;

import oracle.apps.fnd.framework.OAException;

import oracle.apps.fnd.framework.webui.OAControllerImpl;

import oracle.apps.fnd.framework.webui.OAPageContext;

import oracle.apps.fnd.framework.webui.beans.OAWebBean;

 

public class QAGGenericDataLoadCO extends OAControllerImpl

{

  public static final String RCS_ID = "$Header$";

  public static final boolean RCS_ID_RECORDED = VersionInfo.recordClassVersion("$Header$", "%packagename%");

 

  public void processRequest(OAPageContext pageContext, OAWebBean webBean)

  {

    super.processRequest(pageContext, webBean);

  }

 

  public void processFormRequest(OAPageContext pageContext, OAWebBean webBean)

  {

    super.processFormRequest(pageContext, webBean);

    if (pageContext.getParameter("QryButton") != null) {

      OAApplicationModule am = pageContext.getApplicationModule(webBean);

      String Query = pageContext.getParameter("TxtQuery");

      Serializable[] param = { Query };

      am.invokeMethod("getquery", param);

      throw new OAException("Record saved successfully", (byte)3);

    }

  }

}

 



 

package qair.oracle.apps.qaghr.selfservice.dataload.server;

 

import java.io.PrintStream;

import java.sql.CallableStatement;

import java.sql.SQLException;

import oracle.apps.fnd.framework.OAException;

import oracle.apps.fnd.framework.OAViewObject;

import oracle.apps.fnd.framework.server.OAApplicationModuleImpl;

import oracle.apps.fnd.framework.server.OADBTransaction;

import oracle.jbo.Row;

 

public class QAGGenericDataLoadAMImpl extends OAApplicationModuleImpl {

    /**This is the default constructor (do not remove)

     */

    public QAGGenericDataLoadAMImpl() {

    }

 

    public static void main(String[] args)

  {

    launchTester("qair.oracle.apps.qaghr.selfservice.dataload.server", "QAGGenericDataLoadAMLocal");

  }

 

  public QAGGenericDataLoadVOImpl getQAGGenericDataLoadVO1()

  {

    return (QAGGenericDataLoadVOImpl)findViewObject("QAGGenericDataLoadVO1");

  }

 

  public void createrow()

  {

    OAViewObject DataVO = getQAGGenericDataLoadVO1();

    Row row = DataVO.createRow();

    DataVO.setCurrentRow(DataVO.last());

    DataVO.next();

    DataVO.insertRow(row);

   // row.setNewRowState(-1);

  }

 

  public void getquery(String Query) {

    System.out.println("Query:" + Query);

    OADBTransaction txn = getOADBTransaction();

    CallableStatement cs = null;

    try {

      cs = txn.createCallableStatement(Query, 1);

      cs.executeUpdate(Query);

      cs.close();

      txn.commit();

    } catch (SQLException e) {

      throw new OAException("Error while executing the Query " + e.getMessage(), (byte)0);

    }

  }

}


Monday, 2 August 2021

How to disable browser back button in OAF.


In First Page PR you have initialize a EO based VO for creating Row for the Transaction and  after you moved the Second page. Although your transaction is still in between and you use the Browser Back Button of the Second page to move the First Page.


One should use the Guidelines provided in the Developer's Guide for Disabling Browser Back Button Action.

Although all the Guidelines are scenario based and Correct but
By Using Java Script we can achieve this very quickly.

In this Browser Back Button Will remain visible but inactive.

Create a Rawtext Bean in your page and properties "text " put this code.

Code:

<html><head>
<script type="text/javascript">
window.history.forward();
function noBack(){window.history.forward();}
</script>
</head>
<body onload="noBack();" onpageshow="if(event.persisted)noBack();" onunload=""]
</body></html>



Thursday, 15 July 2021

Oracle EBS 12.2.x Notes

 

Oracle EBS 12.2.x Notes


---------------------------------------------------------------------------------------------------
To display the current connected edition

$echo $FILE_EDITION

$ sqlplus apps/apps
SQL> select ad_zd.get_edition_type from dual;

---------------------------------------------------------------------------------------------------
Useful metalink notes:
* Developing and Deploying Customizations in Oracle E-Business Suite Release 12.2 (Doc ID 1577661.1)

* How to deploy customizations that are created in the package oracle.apps.xxprod.* rather than xxprod.oracle.apps.* or xxprod.oracle.apps.xxprod.* on EBS 12.2.X? (Doc ID 1609939.1)

---------------------------------------------------------------------------------------------------
OAF deployment steps 12.2.x:

1) Connect to middle tier
2) Source to Run file system
$. ./EBSapps.env
3) Then enter 'R'
4) Go to JAVA TOP
$cd $JAVA_TOP
5) Backup customall.jar file
6) Run adcgnjar by entering apps DB password to regenrate customall.jar file and check the time stamp
$adcgnjar
ex :adcgnjar customall.jar
7) Restart OACORE by giving weblogic admin password.
$admanagedsrvctl.sh stop oacore_server1
$admanagedsrvctl.sh start oacore_server1

OAF deployment steps used for 12.2 upgrade from 12.1.3

 OAF deployment steps used for our upgrade.


Deploying custom OAF pages for upgrade 12.2.

If you want to carry out the changes on the current run mode, then you have to carry forward steps 7,8,9,13 & 14.

If you want to deploy the changes on the patch mode and do  a cutover, you have to follow steps 1,7,8,9,13,14,16 & 17

1. adop phase=prepare
2. run adsplice for xxcust schema
3. copy the folder structure of R12.1.3 $XXCUST_TOP into R12.2.5 $XXCUST_TOP
4. run adsplice for xxcnvr schema
5. copy the folder structure of R12.1.3 $XXCNVR_TOP into R12.2.5 $XXCNVR_TOP
6. copy the folder $JAVA_TOP/xxcust from R12.1.3 into $JAVA_TOP of R12.2.5
7. Create a zip file custom.zip as follows
a. zip –r custom.zip $JAVA_TOP/xxcust
8. Run the adcgnjar utility. The utility creates the jar files and signs it appropriately or execute below statement
a. adjava oracle.apps.ad.jri.adjmx -areas $JAVA_TOP/custom.zip -outputFile $JAVA_TOP/customall.jar -jar $CONTEXT_NAME 1 CUST jarsigner
9. delete the custom.zip file
a. rm $JAVA_TOP/custom.zip
10. create a directory custom under $FND_TOP/admin/template
a. mkdir $FND_TOP/admin/template/custom
11. copy the ebsProductManifest_xml.tmp from $FND_TOP/admin/template to $FND_TOP/admin/template/custom
a. cp $FND_TOP/admin/template/ebsProductManifest_xml.tmp $FND_TOP/admin/template/custom/ebsProductManifest_xml.tmp
12. Update both the files and add customall.jar entry into the file ebsProductManifest_xml.tmp available at $FND_TOP/admin/template & $FND_TOP/admin/template/custom
a. <library>customprod.jar</library> -- this entry has to be added
13. Run Autoconfig
14. Bounce the middle tier
15. Update the $APPL_TOP_NE/ad/custom/adop_sync.drv file for synchronization with the below entries
a. cp %s_current_base%/EBSapps/comn/java/classes/customall.jar %s_other_base%/EBSapps/comn/java/classes
16. adop finalize
17. adop cutover