SOAP WebServices – A Walkthrough

Setup

Create an integration role and integration record

  • Web Services Only Role – No NetSuite UI
  • Permissions – Role > Permissions > Setup- Log on using Access Tokens and SOAP Web Services
  • Data Access
  • Allow access to only the Transactions, Lists, and Custom Records required by the external application or process.
  • Only allow certain operations by restricting access level
  • Best Practices
  • Do not set up one role to span multiple integrations.
  • Instead, create multiple roles each with the specific access necessary.

Enable TBA – OAuth 1.0 for SOAP Services (OAuth 2.0 is only supported for the REST APIs)

Account Specific URLs


Finding your account-specific URL for SOAP Web Services

Setup > Company > Company Information > Company URLs (Tab) > Suite Talk

URL pattern: https://.suitetalk.api.netsuite.com

Get Data Center URLS

A request to https://webservices.netsuite.com/services/NetSuitePort__<version year>_<release>

Setup-Testing Applications


NetSuite SOAP WS UI (Bundle: 40834)

  • Simple to install and included with NetSuite.
  • Can be used to test NS SOAP Web Services, TBA, operations, and connectivity.

Postman and SOAP UI

  • Great tool for prototyping and testing
  • Free tools with great capabilities
  • Commercial-level options available

Inbound Supported operations

  • Regular CRUD Operations – Add, Get, Update(Upsert), Delete
  • Multi-Record Operations – addList, getList, upserList etc
  • Asynchronous operations – asyncAddList, asyncGetList, asyncUpsertList, getAsyncResult, checkAsyncStatus, etc
  • Search operations – search, searchMoreWithId
  • Utility operations – GetDataCenter URLS, changePassword/Email, getServerTime etc

Documentation

SuiteScript Schema Browser – system.netsuite.com/help/helpcenter/en_US/srbrowser/Browser2023_1/schema/record/account.html

Standard Web Services Definition Language file – webservices.netsuite.com/wsdl/v2023_1_0/netsuite.wsdl

Record Operations Limit

Individual Request Maximum size 100MB

Using SOAP WS UI

Select the WSDL list, and operation(here I used get), and click invoke.

Check Token-Based Authentication

Fill in all the details like consumer secret, token secret, account, consumer key, and token, and click generate TBA signature button

select RecordRef, type as any record and internal id of the record

Click write XML and send

Request XML

<soapenv:Envelope
    xmlns:xsd='http://www.w3.org/2001/XMLSchema'
    xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
    xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'
    xmlns:platformCore='urn:core_2021_1.platform.webservices.netsuite.com'
    xmlns:platformMsgs='urn:messages_2021_1.platform.webservices.netsuite.com'>
    <soapenv:Header>
        <tokenPassport xsi:type='platformCore:TokenPassport'>
            <account xsi:type='xsd:string'>TSTDR*******</account>
            <consumerKey xsi:type='xsd:string'>dc*****************</consumerKey>
            <token xsi:type='xsd:string'>0259*******************</token>
            <nonce xsi:type='xsd:string'>MTY4ODQ0OTQ3Nw</nonce>
            <timestamp xsi:type='xsd:long'>1688449477</timestamp>
            <signature algorithm='HMAC_SHA256' xsi:type='platformCore:TokenPassportSignature'>Gai9Uc0UBulc97gJGWljNkbdlyzjdLQdWKscrTVzNYU=</signature>
        </tokenPassport>
    </soapenv:Header>
    <soapenv:Body>
        <get xsi:type='platformMsgs:GetRequest'>
            <baseRef xsi:type='platformCore:RecordRef' internalId='3' type='customer'/>
        </get>
    </soapenv:Body>
</soapenv:Envelope>

Response

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Header>
        <platformMsgs:documentInfo
            xmlns:platformMsgs="urn:messages_2021_1.platform.webservices.netsuite.com">
            <platformMsgs:nsId>WEBSERVICES_TSTDRV2747395_070320235274234132012008080_f82157</platformMsgs:nsId>
        </platformMsgs:documentInfo>
    </soapenv:Header>
    <soapenv:Body>
        <getResponse
            xmlns="">
            <platformMsgs:readResponse
                xmlns:platformMsgs="urn:messages_2021_1.platform.webservices.netsuite.com">
                <platformCore:status isSuccess="true"
                    xmlns:platformCore="urn:core_2021_1.platform.webservices.netsuite.com"/>
                    <platformMsgs:record internalId="3" xsi:type="listRel:Customer"
                        xmlns:listRel="urn:relationships_2021_1.lists.webservices.netsuite.com">
                        <listRel:customForm internalId="-2"
                            xmlns:platformCore="urn:core_2021_1.platform.webservices.netsuite.com">
                            <platformCore:name>Standard Customer Form</platformCore:name>
                        </listRel:customForm>
                        <listRel:entityId>1</listRel:entityId>
                        <listRel:isPerson>false</listRel:isPerson>
                        <listRel:companyName>Anonymous</listRel:companyName>
                        <listRel:entityStatus internalId="13"
                            xmlns:platformCore="urn:core_2021_1.platform.webservices.netsuite.com">
                            <platformCore:name>CUSTOMER-Closed Won</platformCore:name>
                        </listRel:entityStatus>
                        <listRel:defaultAddress>Anonymous
United States</listRel:defaultAddress>
                        <listRel:isInactive>false</listRel:isInactive>
                        <listRel:dateCreated>2017-10-31T13:55:46.000-07:00</listRel:dateCreated>
                        <listRel:emailPreference>_default</listRel:emailPreference>
                        <listRel:subsidiary internalId="1"
                            xmlns:platformCore="urn:core_2021_1.platform.webservices.netsuite.com">
                            <platformCore:name>Parent Company</platformCore:name>
                        </listRel:subsidiary>
                        <listRel:taxExempt>true</listRel:taxExempt>
                        <listRel:creditHoldOverride>_auto</listRel:creditHoldOverride>
                        <listRel:balance>0.0</listRel:balance>
                        <listRel:overdueBalance>0.0</listRel:overdueBalance>
                        <listRel:unbilledOrders>125.0</listRel:unbilledOrders>
                        <listRel:currency internalId="1"
                            xmlns:platformCore="urn:core_2021_1.platform.webservices.netsuite.com">
                            <platformCore:name>USA</platformCore:name>
                        </listRel:currency>
                        <listRel:depositBalance>0.0</listRel:depositBalance>
                        <listRel:shipComplete>false</listRel:shipComplete>
                        <listRel:taxable>false</listRel:taxable>
                        <listRel:aging>0.0</listRel:aging>
                        <listRel:aging1>0.0</listRel:aging1>
                        <listRel:aging2>0.0</listRel:aging2>
                        <listRel:aging3>0.0</listRel:aging3>
                        <listRel:aging4>0.0</listRel:aging4>
                        <listRel:giveAccess>false</listRel:giveAccess>
                        <listRel:accessRole internalId="14"
                            xmlns:platformCore="urn:core_2021_1.platform.webservices.netsuite.com">
                            <platformCore:name>Customer Center</platformCore:name>
                        </listRel:accessRole>
                        <listRel:sendEmail>false</listRel:sendEmail>
                        <listRel:receivablesAccount internalId="-10"
                            xmlns:platformCore="urn:core_2021_1.platform.webservices.netsuite.com">
                            <platformCore:name>Use System Preference</platformCore:name>
                        </listRel:receivablesAccount>
                        <listRel:webLead>No</listRel:webLead>
                        <listRel:lastModifiedDate>2023-06-25T23:11:31.000-07:00</listRel:lastModifiedDate>
                        <listRel:stage>_customer</listRel:stage>
                        <listRel:emailTransactions>false</listRel:emailTransactions>
                        <listRel:printTransactions>false</listRel:printTransactions>
                        <listRel:faxTransactions>false</listRel:faxTransactions>
                        <listRel:isBudgetApproved>false</listRel:isBudgetApproved>
                        <listRel:addressbookList>
                            <listRel:addressbook>
                                <listRel:defaultShipping>true</listRel:defaultShipping>
                                <listRel:defaultBilling>true</listRel:defaultBilling>
                                <listRel:isResidential>false</listRel:isResidential>
                                <listRel:addressbookAddress
                                    xmlns:platformCommon="urn:common_2021_1.platform.webservices.netsuite.com">
                                    <platformCommon:country>_unitedStates</platformCommon:country>
                                    <platformCommon:addressee>Anonymous</platformCommon:addressee>
                                    <platformCommon:addrText>Anonymous
United States</platformCommon:addrText>
                                    <platformCommon:override>false</platformCommon:override>
                                </listRel:addressbookAddress>
                                <listRel:internalId>1</listRel:internalId>
                            </listRel:addressbook>
                        </listRel:addressbookList>
                        <listRel:contactRolesList>
                            <listRel:contactRoles>
                                <listRel:giveAccess>false</listRel:giveAccess>
                                <listRel:contact internalId="524"
                                    xmlns:platformCore="urn:core_2021_1.platform.webservices.netsuite.com">
                                    <platformCore:name>Test Contact</platformCore:name>
                                </listRel:contact>
                                <listRel:email>testabc@gmail.com</listRel:email>
                                <listRel:role internalId="14"
                                    xmlns:platformCore="urn:core_2021_1.platform.webservices.netsuite.com">
                                    <platformCore:name>Customer Center</platformCore:name>
                                </listRel:role>
                                <listRel:sendEmail>false</listRel:sendEmail>
                            </listRel:contactRoles>
                            <listRel:contactRoles>
                                <listRel:giveAccess>false</listRel:giveAccess>
                                <listRel:contact internalId="525"
                                    xmlns:platformCore="urn:core_2021_1.platform.webservices.netsuite.com">
                                    <platformCore:name>Test Contact 2</platformCore:name>
                                </listRel:contact>
                                <listRel:role internalId="14"
                                    xmlns:platformCore="urn:core_2021_1.platform.webservices.netsuite.com">
                                    <platformCore:name>Customer Center</platformCore:name>
                                </listRel:role>
                                <listRel:sendEmail>false</listRel:sendEmail>
                            </listRel:contactRoles>
                        </listRel:contactRolesList>
                        <listRel:currencyList>
                            <listRel:currency>
                                <listRel:currency internalId="1"
                                    xmlns:platformCore="urn:core_2021_1.platform.webservices.netsuite.com">
                                    <platformCore:name>USA</platformCore:name>
                                </listRel:currency>
                                <listRel:balance>0.0</listRel:balance>
                                <listRel:depositBalance>0.0</listRel:depositBalance>
                                <listRel:overdueBalance>0.0</listRel:overdueBalance>
                                <listRel:unbilledOrders>125.0</listRel:unbilledOrders>
                                <listRel:overrideCurrencyFormat>false</listRel:overrideCurrencyFormat>
                                <listRel:displaySymbol>$</listRel:displaySymbol>
                                <listRel:symbolPlacement>_beforeNumber</listRel:symbolPlacement>
                            </listRel:currency>
                        </listRel:currencyList>
                    </platformMsgs:record>
                </platformMsgs:readResponse>
            </getResponse>
        </soapenv:Body>
    </soapenv:Envelope>

Leave a comment

Your email address will not be published. Required fields are marked *