Skip navigation
Toggle Sidebar

Coupa Integration

This article discusses important concepts and best practices to use when integrating with Coupa.  It is outside the scope of this article to fully document every aspect of the application's interfaces including record types and field definitions. Please consult the application's official documentation for full reference information. As always, familiarity with the data of the systems to be integrated is strongly advised.


Action Definitions

The Connector supports the following actions:
*Query - Returns one or more records that match zero or more filters.
*Create - Creates a new record.
*Update - Modifies an existing record.
*Delete - Not available but some objects can be marked as inactive.

*Note:* Not all actions are available for every record type.


Querying Records

When querying records from Coupa, each record found will be returned as a separate Document and be processed independently.

Updating Records

Updating a specific record in Coupa requires that you pass in the internal Coupa ID for that record in the update request. If this value doesn't exist in the source data you will need to look it up from Coupa.

As a best practice, if the other application has a field that can be used to capture an external ID, populate it with the Coupa ID so you don't have to do a lookup to get the ID in your Process.

To do this, in the Map that maps from the source Profile to the Coupa Update Profile, use a [Map Function|Map Functions] that performs a Connector Call to Coupa. The Connector Call's Operation should do a Query action against the particular object type. Add a Filter to the Operation that you can pass in the key value(s) from the source data as an Input Parameter to limit the results to a single record. The Map Function should return the object's Id field as an Output Parameter. Map this Output Parameter to the Id Element in the destination Profile.
If a particular record does not already exist in Coupa, the Id Element in the Update Profile will be empty after the Map. If a request without an Id is then sent to the Coupa Connector, it may throw an error. If this is a possibility in your integration scenario, you should use a Decision Step after the Map to check that the Id is populated in each record before sending the data to the Coupa Connector.

Adaptavist Theme Builder Powered by Atlassian Confluence