Troubleshoot Integration Design Time

Learn about troubleshooting integration design time in Oracle Integration.

Missing a Primary Business Identifier in an Integration

You must configure at least one business identifier tracking field to make your integration ready for activation. This is known as the primary business identifier. Business identifiers enable you to track payload fields in messages during runtime. If you have not yet configured at least one business identifier, the following error message is displayed when you hover your cursor over the Integration Errors icon in the design canvas of your integration.

The following error message appears on the left: Missing primary business identifier for tracking. Please define a primary identifier using tracking option from the menu. On the right is the Integration Errors icon.

Configure at least one business identifier to remove this error message. See Assign Business Identifiers.

Unable to Call a replaceAll JavaScript Function

If you attempt to call a replaceAll JavaScript function in Oracle Integration, you receive the following error:

ode=<code>JavaScript execution error</code>\n,detail=<detail>Review
JavaScript error(s) and fix them:\nerror: null@3 -> TypeError: Cannot find
function replaceAll in object 

The replaceAll is not supported by the JavaScript engine in Oracle Integration.

Use one of the following alternatives to achieve replaceAll functionality:

  • Use the replace function with the global option, as follows:
    function myFunction(Input) {
      var res = Input.replace(/<\/>/g,'');
     return res;
    }
  • Use the split and join functions instead of replaceAll.

Conflict with Using Variables of String Data Type and Applying Mathematical Comparator Expressions

All variables created in Oracle Integration are currently only string data types. Using these variables directly and applying mathematical comparator expressions results in unusual behavior.

For example, in an assign action, two variables, var1 and var2, are created with values of 1 and 10, respectively. In a while action, if you then set the condition as $var1 < $var2, the loop terminates after two iterations. The correct usage is to set the condition by wrapping the variables with a number XPath function: number($var1) < number($var2). This loop iterates 10 times before terminating.

Reduce Network Calls that Slow Down Processes Caused By Writing Record By Record

Writing record by record using the Append to Existing File option on the Operations page of the Adapter Endpoint Configuration Wizard of the FTP Adapter creates too many network calls and eventually slows down the process. Instead, use a stage file action and write the records to a stage directory. Once all records are written, use the List File option in the stage file action and the FTP Adapter Write File option to transfer the file to an FTP location. This approach reduces processing time and prevents too many calls to the FTP server.

Invoke Subprocess Integrations Using a Single REST API Connection

Assume you follow a modular design approach in which you create separate integrations (think of them as subprocesses) to perform specific tasks. For example:

  • File - Staging

  • Translation

  • Stage - Core

  • Trigger Job Processes

Each of these subprocesses is created as a WSDL connector. However, having to maintain multiple connectors complicates the situation. Ideally, creating a single REST API and triggering subprocesses using API calls would be easier to maintain. Note the following details:
  • You can invoke subprocesses using a single REST API connection.

  • You can use a “schedule now” API to trigger the required integration. However, this is only possible if the orchestrated integration was created as a scheduled integration. In addition, the “schedule now” API runs the specified integration immediately and this type of integration cannot be configured to take input parameters.

As an alternative, you can create a nonscheduled integration with a REST connection used as the trigger that can be configured to take input parameters. That integration can be invoked as a REST API itself, without the need for the “schedule now” API to invoke it. The URL for the “schedule now” API in the v2 version of the REST API is:
http://host:port/icsapis/v2/integrations/SAYHELLO%7c01.00.0000/schedule/jobs

That is, the URL contains CODE|VERSION to specify which integration to run.

Note that a SOAP connector is the only option available that can call subprocesses.

Trigger Connection Cannot Receive an Empty Array in JSON if the Corresponding JSON Received Has an Empty JSON

An adapter does not receive any element from the mapper if the element is an empty array. To get the element from the mapper in case of an empty array, change the XSL file manually.

  1. Export the integration.
  2. Manually change the mappings in the XSL file to ensure that the default elements are generated in the target even when the source elements do not exist or are empty. For example:

    Before editing the XSL file:
    <xsl:for-each
    select="$Cheers_API/nsmpr0:executeResponse/nsmpr1:response-wrapper/nsmpr1:
    employeeEarnedDetails/nsmpr1:earnedBadges" xml:id="id_24">
    <nstrgdfl:earnedBadges xml:id="id_23">
    <xsl:value-of select="." xml:id="id_25" />
    </nstrgdfl:earnedBadges>
    </xsl:for-each>
    After editing the XSL file:
    <nstrgdfl:earnedBadges xml:id="id_23">
    <xsl:for-each
    select="$Cheers_API/nsmpr0:executeResponse/nsmpr1:response-wrapper/nsmpr1: 
    employeeEarnedDetails/nsmpr1:earnedBadges" xml:id="id_24">
    <xsl:value-of select="." xml:id="id_25" />
    </xsl:for-each>
    </nstrgdfl:earnedBadges>
  3. Import the integration.