Request A Demo
Back to All Blog Articles

E-Business Suite Post Clone Refresh – It’s Magic with FlexDeploy!

Cloning is an important part of managing an Oracle E-Business Suite implementation. It allows the syncing of recent and relevant data into the non-production environments. The cloning process isn’t without its drawbacks however. In its purest form, the clone takes an exact copy of the Production database and overlays a non-prod environment.

With this process, the non-prod database loses any customizations in the upcoming releases. At this point, developers need to redeploy their customizations in the non-production environment which leads to loss of productivity.

FlexDeploy can help in this situation with its post clone refresh process. To demonstrate, let’s take a look at FlexDeploy before and after a clone. This example will involve cloning the Production environment to the Development environment.

Prior to the EBS Clone

Below is the output of the Environment Discrepancies report for the XXHR module. One particular file, XXHR_BIPUB_REP_PKG.pkb, is what we are going to focus on.

Environment Discrepancies

The Development and Production environments show two different SCM revisions deployed for our file, 25a4aa649852 and d138f3fcf930 respectively. See the deployed code for the XXHR_BIPUB_REP_PKG.pkb file in Development below:

CREATE OR REPLACE PACKAGE BODY APPS.xxhr_bipub_rep_pkg IS

  PROCEDURE generate_xml( p_errbuf  OUT VARCHAR2
                        , p_retcode OUT NUMBER) IS
  BEGIN
      FND_FILE.put_line(fnd_file.output, '<?xml version="1.0" encoding="UTF-8"?>');
      FND_FILE.put_line(fnd_file.output, '<Roster>');
      FND_FILE.put_line(fnd_file.output, ' <Week>');
      FND_FILE.put_line(fnd_file.output, '  <WeekNo>1</WeekNo>');
      FND_FILE.put_line(fnd_file.output, '  <Monday>Thomas</Monday>');
      FND_FILE.put_line(fnd_file.output, '  <Tuesday>Emily</Tuesday>');
      FND_FILE.put_line(fnd_file.output, '  <Wednesday>Annie</Wednesday>');
      FND_FILE.put_line(fnd_file.output, '  <Thursday>James</Thursday>');
      
      FND_FILE.put_line(fnd_file.output, '  <Friday>Gordon</Friday>');
      FND_FILE.put_line(fnd_file.output, '  <Saturday>Rosie</Saturday>');
      FND_FILE.put_line(fnd_file.output, '  <Sunday>Henry</Sunday>');
      FND_FILE.put_line(fnd_file.output, ' </Week>');
      FND_FILE.put_line(fnd_file.output, ' <Week>');
      FND_FILE.put_line(fnd_file.output, '  <WeekNo>2</WeekNo>');
      FND_FILE.put_line(fnd_file.output, '  <Monday>Bertie</Monday>');
      FND_FILE.put_line(fnd_file.output, '  <Tuesday>Harold</Tuesday>');
      FND_FILE.put_line(fnd_file.output, '  <Wednesday>Toby</Wednesday>');
      FND_FILE.put_line(fnd_file.output, '  <Thursday>Clarabel</Thursday>');
      FND_FILE.put_line(fnd_file.output, '  <Friday>Percy</Friday>');
      FND_FILE.put_line(fnd_file.output, '  <Saturday>Edward</Saturday>');
      FND_FILE.put_line(fnd_file.output, '  <Sunday>Trevor</Sunday>');
      FND_FILE.put_line(fnd_file.output, ' </Week>');
    FND_FILE.put_line(fnd_file.output, ' <Week>');
      FND_FILE.put_line(fnd_file.output, '  <WeekNo>3</WeekNo>');
      FND_FILE.put_line(fnd_file.output, '  <Monday>Jim</Monday>');
      FND_FILE.put_line(fnd_file.output, '  <Tuesday>Matt</Tuesday>');
      FND_FILE.put_line(fnd_file.output, '  <Wednesday>Mo</Wednesday>');
      FND_FILE.put_line(fnd_file.output, '  <Thursday>Trevor</Thursday>');
      FND_FILE.put_line(fnd_file.output, '  <Friday>John</Friday>');
      FND_FILE.put_line(fnd_file.output, '  <Saturday>Danaerys</Saturday>');
      FND_FILE.put_line(fnd_file.output, '  <Sunday>Michael</Sunday>');
      FND_FILE.put_line(fnd_file.output, ' </Week>');
      FND_FILE.put_line(fnd_file.output, '</Roster>');
  end generate_xml;
END xxhr_bipub_rep_pkg;
/

And now Production…

CREATE OR REPLACE PACKAGE BODY APPS.xxhr_bipub_rep_pkg IS

  PROCEDURE generate_xml( p_errbuf  OUT VARCHAR2
                        , p_retcode OUT NUMBER) IS
  BEGIN
      FND_FILE.put_line(fnd_file.output, '<?xml version="1.0" encoding="UTF-8"?>');
      FND_FILE.put_line(fnd_file.output, '<Roster>');
      FND_FILE.put_line(fnd_file.output, ' <Week>');
      FND_FILE.put_line(fnd_file.output, '  <WeekNo>1</WeekNo>');
      FND_FILE.put_line(fnd_file.output, '  <Monday>Thomas</Monday>');
      FND_FILE.put_line(fnd_file.output, '  <Tuesday>Emily</Tuesday>');
      FND_FILE.put_line(fnd_file.output, '  <Wednesday>Annie</Wednesday>');
      FND_FILE.put_line(fnd_file.output, '  <Thursday>James</Thursday>');
      
      FND_FILE.put_line(fnd_file.output, '  <Friday>Gordon</Friday>');
      FND_FILE.put_line(fnd_file.output, '  <Saturday>Rosie</Saturday>');
      FND_FILE.put_line(fnd_file.output, '  <Sunday>Henry</Sunday>');
      FND_FILE.put_line(fnd_file.output, ' </Week>');
      FND_FILE.put_line(fnd_file.output, ' <Week>');
      FND_FILE.put_line(fnd_file.output, '  <WeekNo>2</WeekNo>');
      FND_FILE.put_line(fnd_file.output, '  <Monday>Bertie</Monday>');
      FND_FILE.put_line(fnd_file.output, '  <Tuesday>Harold</Tuesday>');
      FND_FILE.put_line(fnd_file.output, '  <Wednesday>Toby</Wednesday>');
      FND_FILE.put_line(fnd_file.output, '  <Thursday>Clarabel</Thursday>');
      FND_FILE.put_line(fnd_file.output, '  <Friday>Percy</Friday>');
      FND_FILE.put_line(fnd_file.output, '  <Saturday>Edward</Saturday>');
      FND_FILE.put_line(fnd_file.output, '  <Sunday>Trevor</Sunday>');
      FND_FILE.put_line(fnd_file.output, ' </Week>');
      FND_FILE.put_line(fnd_file.output, '</Roster>');
  end generate_xml;
END xxhr_bipub_rep_pkg;
/

Package in development has a third week in the xml compared to Production.  Now that we have a firm handle of our current state, lets see what things look like after the clone.

After the EBS Clone

As expected, both the Development and Production environments now contain the same revision, d138f3fcf930.

CREATE OR REPLACE PACKAGE BODY APPS.xxhr_bipub_rep_pkg IS

  PROCEDURE generate_xml( p_errbuf  OUT VARCHAR2
                        , p_retcode OUT NUMBER) IS
  BEGIN
      FND_FILE.put_line(fnd_file.output, '<?xml version="1.0" encoding="UTF-8"?>');
      FND_FILE.put_line(fnd_file.output, '<Roster>');
      FND_FILE.put_line(fnd_file.output, ' <Week>');
      FND_FILE.put_line(fnd_file.output, '  <WeekNo>1</WeekNo>');
      FND_FILE.put_line(fnd_file.output, '  <Monday>Thomas</Monday>');
      FND_FILE.put_line(fnd_file.output, '  <Tuesday>Emily</Tuesday>');
      FND_FILE.put_line(fnd_file.output, '  <Wednesday>Annie</Wednesday>');
      FND_FILE.put_line(fnd_file.output, '  <Thursday>James</Thursday>');
      
      FND_FILE.put_line(fnd_file.output, '  <Friday>Gordon</Friday>');
      FND_FILE.put_line(fnd_file.output, '  <Saturday>Rosie</Saturday>');
      FND_FILE.put_line(fnd_file.output, '  <Sunday>Henry</Sunday>');
      FND_FILE.put_line(fnd_file.output, ' </Week>');
      FND_FILE.put_line(fnd_file.output, ' <Week>');
      FND_FILE.put_line(fnd_file.output, '  <WeekNo>2</WeekNo>');
      FND_FILE.put_line(fnd_file.output, '  <Monday>Bertie</Monday>');
      FND_FILE.put_line(fnd_file.output, '  <Tuesday>Harold</Tuesday>');
      FND_FILE.put_line(fnd_file.output, '  <Wednesday>Toby</Wednesday>');
      FND_FILE.put_line(fnd_file.output, '  <Thursday>Clarabel</Thursday>');
      FND_FILE.put_line(fnd_file.output, '  <Friday>Percy</Friday>');
      FND_FILE.put_line(fnd_file.output, '  <Saturday>Edward</Saturday>');
      FND_FILE.put_line(fnd_file.output, '  <Sunday>Trevor</Sunday>');
      FND_FILE.put_line(fnd_file.output, ' </Week>');
      FND_FILE.put_line(fnd_file.output, '</Roster>');
  end generate_xml;
END xxhr_bipub_rep_pkg;
/

If we were to look at our report again we would see the exact same information as before. FlexDeploy has no knowledge the clone even took place let alone what objects may have changed in the process. How do we solve this? The Post Refresh Request was introduced in order to handle this exact scenario.

What Makes FlexDeploy Different?

This paper compares FlexDeploy to other commercial and open-source DevOps and Application Release Automation solutions.

Read Paper

Post Refresh Requests

Navigate to the Topology and select Post Request.

To trigger a Post Refresh Request, we need to select the EBS Target group, Refreshed From Environment which is the source environment of the Clone. In this case it was the Production environment. Refreshed To Environment which is the target environment. In this case it is the Development environment.

Clicking Show Differences will automatically find all the differences between the selected environments and shows what are the changes that need to be deployed. At this stage, FlexDeploy is showing files and projects that are different.

Post Refresh Differences

Once the request has been submitted using Sync and Re-deploy, each project will generate a new “Sync” and “Refresh” packages for each projects. The Post Refresh in FlexDeploy executes the following steps for each projects

  1. Create a Sync package and runs a build.
  2. Create a Refresh package and runs a build.
  3. Executes the Sync package using SYNCSTATE workflow. This syncs all the files version deployed in the Development environment to be same as Production.
  4. Deploys the Refresh package.

For the SYNCSTATE it uses the Sync package, it has applied the production revision d138f3fcf930 of the XXHR_BIPUB_REP_PKG.pkb file.  

When the DEPLOY runs using the Refresh package, we see it has picked the original development revision 25a4aa649852 of the XXHR_BIPUB_REP_PKG.pkb file.  

Fantastic!  FlexDeploy correctly rebuilt and deployed the original Development revision of our file. But what happens when we have files sourced directly from EBS, like the other two files in the package? Fear not, FlexDeploy is actually pulling all of these files, SCM sourced included, from its own internal artifact repository.

Keep in mind that we followed one particular file through the EBS Clone and Post Refresh steps.  This same process is performed for every file that would have been affected by the clone.  Not shown is also that FlexDeploy will maintain the order of the files deployed.  No more worrying about deploying package bodies before package headers!

Re-syncing an environment after an EBS Clone with the push of a button…DevOps baby!

13 EBS Development Tips

Simplify maintenance and customize EBS faster with 13 pro development tips.

Download the eBook

DevOps and CI/CD Done Right

Out of the Box DevOps Platform for your Business and Open Systems

Related Resources

Enhancing DevOps Efficiency for Oracle Fusion Cloud Applications with FlexDeploy

Managing Oracle Fusion Cloud applications can be a daunting task, given the vast number of configurations and the need for ...

Streamlining Oracle E-Business Suite with FlexDeploy

Oracle E-Business Suite (EBS) remains a critical component for many organizations, yet managing it comes with its own set of ...

DevOps Assessment for Your Enterprise Software Technologies

In the fast-paced world of Enterprise IT, staying ahead means constantly evolving. For organizations utilizing Oracle, Salesforce, or SAP, the ...

Join DevOps leaders across the globe who receive analysis, tips, and trends in their inbox