NetSuite, a provider of cloud-based Financials/ERP and Omnichannel commerce solution, is designed to help global enterprises meet their complex functional, industry, regulatory and tax requirements.
Talend provides three basic methods for working with NetSuite in Talend Studio. They include the use of:
- NetSuite components
- NetSuite OpenAir SOAP API calls
- JDBC connection adapters
In this article, we are going to see how to use NetSuite components for connecting, reading and performing various read/write operations in NetSuite.
NetSuite components list:
|tNetStuiteConnection||Creates a connection to the NetSuite SOAP server so that other NetSuite components in the Job can reuse the connection.|
|tNetStuiteInput||Used to read content from NetSuite. It Invokes the NetSuite SOAP service and retrieves data according to the search conditions you specify.|
|tNetStuiteOutput||Invokes the NetSuite SOAP service to perform Read/Write actions on Netsuite like Insert, Delete, Upsert, Update Operations.|
In order to follow this article, you must fulfill the following prerequisites:
- You have installed the 6.4.1 version of Talend Studio with the Patch_20171018_TPS-2200_v1-6.4.1.zip patch, available in the Downloads tab on the left panel of this page.
- You have access to a NetSuite account.
- You have basic knowledge data integration Job design in Talend Studio 6.4.1
- You have basic knowledge on how to write in the JSON format and how to parse it to extract values.
- You have knowledge on how to call SOAP/REST Web services with token and Oauth based authentication.
Job designs to explore few possibilities using Talend NetSuite components
Reading customer entity from NetSuite Portal
This example will show how to connect to NetSuite and read data from the customer entity type from NetSuite.
The following Job uses the tNetSuiteConnection and tNetSuiteInput components to read the data out of the NetSuite system. For more information on how to configure the tNetSuiteConnection component, see tNetsuiteConnection.
In this example , the Record Type is set to Customers, and the Search Conditions are set to look for a customer record with the name UVW Customer.
The tNetsuiteInput component will populate its schema from the Record Type parameter by connecting to NetSuite and retrieving the schema details.
Below is a snapshot of the input data with a pipe (
|) as column separator.
Some of the column values which are sublist items are appearing as JSON
payloads mapped to
string datatype columns. Since the component does not provide
implementation for these columns appearing as JSON, they are mapped as
Examples of sublists are illustrated in the below picture, like addressBookList, or . A sublist is a list that makes up part of a larger list.
Reading and parsing addresses from customers
The job below demonstrates reading data from the Customer Entity and parsing the Addresses JSON payload and writing the data to a flat file.
The tJavaRow component is used to Set the globalMap with InternalId so that it can later be used to set the column in the tMap before persisting it to the file.
As a result, the JSON payload has been converted to a flat structure and stored into a file. You can also see InternalIds for individual Address records, as well as Customer Entity. These internal ids are required during the update operations if there is a need to update any records.
Inserting a customer entity
In the below example, a process is created to insert a new customer in NetSuite.
The idea is to read the input data from flat files and convert them to
JSON payloads before sending the data to the
tNetSuiteOutput component. The tNetSuiteOutput components
will structure the data to fit the payload that the NetSuite services is expecting. This is the
reason why a good understanding of the JSON structure for various sublists
is important. Here, both the Address and Subsidiary
strings need to be built in JSON payloads before being merged to a
pipedelimited format needed to call the webservice. The Address also has a
Country picklist that can be updated, and for which the format is
“_india” for example. The
Subsidiary is a pre-existing reference value within NetSuite, hence we
need to send the InternalId to associate it with the