Salesforce & Netsuite are monster tech names for large corporations and integrating the two systems can be a real beast. While they both have powerful APIs, there are other ways to connect the systems.
Recently, we worked with a client that had been using Netsuite for several years as their ERP. As their business expanded, they wanted to implement Salesforce and leverage its CRM & Sales Cloud capabilities to increase sales and client management. Therefore, they needed a Netsuite x Salesforce integration to sync records from one system to another. The client had opted to use Workato, an enterprise middleware for integrations and automations.
When using Workato, you create a Recipe which is the automation or integration. Similar to an Apex Trigger, you can create and save variables, loop over records, create a list of records, parse data, compute data, update records, create records – across multiple systems! Each Recipe can have one or more Connections which are the applications used in the automation. It’s the full power of code, in a GUI environment.
The project has many facets to it, and the Netsuite integration added more dimensions to it! One of the project goals was for Salesforce to be the source of truth for all client data. This meant that any new records or updates would be carried out in Salesforce and then synced to Netsuite.
Focusing on the Accounts/Contacts sync, there were several crucial steps we executed to successfully implement it.
As a first step, we imported the Netsuite records to Salesforce, ensuring that we brought over the Netsuite Unique Id. Every record in Netsuite has its own Id which is crucial when creating integrations and matching records. This field was marked as read-only and could only be updated via the API User.
Once the Contact Records were in Salesforce, the Id made it possible for us to easily match Salesforce Records to their counterpart in Netsuite. As part of the sync, new and updated Salesforce Contacts needed to be sent to Netsuite. New Records were easy to identify since they did not contain the Netsuite Id. Once the corresponding record was created in Netsuite, we populated the new Netsuite Id in Salesforce for future syncing.
In Salesforce, every Contact has two sets of address fields directly on the Contact Record. Netsuite however has each address listed as a separate record linked to the contact record. Think of it as a related list of addresses. Therefore, to map the Salesforce data to NetSuite, we needed to convert the addresses into a list which would then create individual address records in Netsuite. Workato has some documentation on how to handle this which guided us through the process.
In our testing, we noticed that every time a Contact was updated in Salesforce (thus triggering an update in Netsuite), the address records in Netsuite were deleted and recreated per the data coming from Salesforce. Netsuite has a configuration option within the integration to replace the current address records with new data. On the Workato side, the configuration is listed among the hidden fields in the address list mapping section and thus missed our attention. We undid the selection and set our sync to create new address records.
We suggested a further phase to this work in which the Address Ids from Netsuite would be mapped to address records in Salesforce and thus provide a more direct sync.
With this final configuration in place, testing was carried out and the project completed!
To learn more about Workato, check out this blog post.