Sitemap

Optimizing OIC Integrations with Fusion ERP REST API Batch Actions

4 min readMay 25, 2026

--

Press enter or click to view image in full size

Overview: There are many cases where Fusion ERP Cloud REST APIs accept/respond with only one object at a time (for example: Account creation in CX or retrieving Items from SCM). However, in OIC integrations, we may receive 10–15 accounts from the source system in a single request for create/update operations. Typically, the integration is designed using a For Each action in OIC, where the REST API is invoked individually for every account.

This approach works completely fine and is suitable for many scenarios. However, it results in multiple invocations towards Fusion applications, and generally Oracle recommends avoiding overly chatty integrations wherever possible. As an alternative approach, Oracle provides Batch Actions support, where multiple operations can be sent within a single HTTP request. This can help reduce the number of invocations, minimize traffic towards Fusion ERP Cloud, and improve overall integration performance in applicable use cases.

Batch Actions

We can combine multiple operations into a single HTTP request (batch actions) to improve performance.

The request body is a JSON object with field named parts, and it is an array of objects. Each object in the array contains below four fields:

Press enter or click to view image in full size

Sample Request:

{
"parts" : [ {
"id" : "part1",
"path" : "/itemsV2?onlyData=true&fields=ItemNumber,ItemStatusValue,LifecyclePhaseValue,StyleItemNumberValue,PrimaryUOMValue&q=ItemNumber=SK-0001_0520",
"operation" : "get"
}, {
"id" : "part2",
"path" : "/itemsV2?onlyData=true&fields=ItemNumber,ItemStatusValue,LifecyclePhaseValue,StyleItemNumberValue,PrimaryUOMValue&q=ItemNumber=SK-0002_0520",
"operation" : "get"
} ]
}

Sample Response:

{
"parts": [
{
"id": "part1",
"path": "https://<hostname>:443/fscmRestApi/resources/11.13.18.05/itemsV2",
"operation": "get",
"payload": {
"items": [
{
"ItemNumber": "SK-0001_0520",
"ItemStatusValue": "Active",
"LifecyclePhaseValue": "Production",
"StyleItemNumberValue": "SK_STYLE1_0520",
"PrimaryUOMValue": "Each"
}
],
"count": 1,
"hasMore": false,
"limit": 25,
"offset": 0,
"links": [
{
"rel": "self",
"href": "https://<hostname>:443/fscmRestApi/resources/11.13.18.05/itemsV2",
"name": "itemsV2",
"kind": "collection"
},
{
"rel": "action",
"href": "https://<hostname>:443/fscmRestApi/resources/11.13.18.05/itemsV2/action/addItemsToDeleteGroup",
"name": "addItemsToDeleteGroup",
"kind": "other"
},
{
"rel": "action",
"href": "https://<hostname>:443/fscmRestApi/resources/11.13.18.05/itemsV2/action/addSupplierAssociationsToDeleteGroup",
"name": "addSupplierAssociationsToDeleteGroup",
"kind": "other"
}
]
}
},
{
"id": "part2",
"path": "https://<hostname>:443/fscmRestApi/resources/11.13.18.05/itemsV2",
"operation": "get",
"payload": {
"items": [
{
"ItemNumber": "SK-0002_0520",
"ItemStatusValue": "Active",
"LifecyclePhaseValue": "Production",
"StyleItemNumberValue": "SK_STYLE2_0520",
"PrimaryUOMValue": "Each"
}
],
"count": 1,
"hasMore": false,
"limit": 25,
"offset": 0,
"links": [
{
"rel": "self",
"href": "https://<hostname>:443/fscmRestApi/resources/11.13.18.05/itemsV2",
"name": "itemsV2",
"kind": "collection"
},
{
"rel": "action",
"href": "https://<hostname>:443/fscmRestApi/resources/11.13.18.05/itemsV2/action/addItemsToDeleteGroup",
"name": "addItemsToDeleteGroup",
"kind": "other"
},
{
"rel": "action",
"href": "https://<hostname>:443/fscmRestApi/resources/11.13.18.05/itemsV2/action/addSupplierAssociationsToDeleteGroup",
"name": "addSupplierAssociationsToDeleteGroup",
"kind": "other"
}
]
}
}
]
}

Now lets see how to implement in OIC (by using the get Items use case)

  1. Configure REST connection with Fusion ERP Cloud hostname (Ex: https://<hostname>) and provide the credentials.
  2. Overall OIC Flow (Request — response)
Press enter or click to view image in full size

3. Configure the Invoke (GetItemDetails for BatchAction) as shown below using the connection created in step1.

3. Provide request & response payloads as shown in sample requests/response section above and select Content-Type for request headers.

Get SumanthKoditala’s stories in your inbox

Join Medium for free to get updates from this writer.

5. XSLT Mapper for GetItemDetails

a.  Provide Content-Type as 'application/vnd.oracle.adf.batch+json'
b. Generate id for each part using position() function for readbility
<nstrgmpr:execute xml:id="id_12">
<nstrgmpr:HTTPHeaders>
<ns23:StandardHTTPHeaders>
<ns23:Content-Type>
<xsl:value-of select="'application/vnd.oracle.adf.batch+json'"/>
</ns23:Content-Type>
</ns23:StandardHTTPHeaders>
</nstrgmpr:HTTPHeaders>
<ns25:request-wrapper>
<xsl:for-each select="/nssrcmpr:execute/ns21:request-wrapper/ns21:items">
<ns25:parts>
<ns25:id>
<xsl:value-of select="concat ('part',position())"/>
</ns25:id>
<ns25:path>
<xsl:value-of select="concat ('/itemsV2?onlyData=true&fields=ItemNumber,ItemStatusValue,LifecyclePhaseValue,StyleItemNumberValue,PrimaryUOMValue&q=ItemNumber=', ns21:itemNumber )"/>
</ns25:path>
<ns25:operation>
<xsl:value-of select="'get'"/>
</ns25:operation>
</ns25:parts>
</xsl:for-each>
</ns25:request-wrapper>
</nstrgmpr:execute>

6. Final OIC execution

Press enter or click to view image in full size

Caveats:

1. If a single part in the batch fails, then all other parts will fail because these batch actions are all or none actions. So, it may be wise to avoid this feature if you anticipate regular failure’s in target system as it would increase the backlog, because one part failure can stop all the other parts to process and the retries wont help untill the failure part is eliminated or fixed.

However, the good thing is that only the failed part is listed in the response, and the successful parts are not included. Still, overall processing will not happen for any part.

Ex:

Press enter or click to view image in full size

2. Based on observed behavior during testing, the operations inside a batch request appear to be processed independently/parallelly (this behavior is not explicitly documented by Oracle). Because of this, batch actions may not be suitable for dependent operations that require sequential execution.

For example, creating an Account and its corresponding Address within the same batch request may fail, since the Address creation depends on the Account being created first and available for reference.

Conclusion: Batch Actions improves the performance by combining mutiple api calls into single http request. We can leverage batch actions in OIC, which would reduce the traffic between OIC to Fusion and increase the overall performance.

--

--

SumanthKoditala
SumanthKoditala

Written by SumanthKoditala

Cloud integration specialist and AI enthusiast