{"id":4613,"date":"2018-08-11T17:29:14","date_gmt":"2018-08-11T17:29:14","guid":{"rendered":"https:\/\/zappysys.com\/blog\/?p=4613"},"modified":"2018-10-03T18:30:11","modified_gmt":"2018-10-03T18:30:11","slug":"read-netsuite-data-power-bi","status":"publish","type":"post","link":"https:\/\/zappysys.com\/blog\/read-netsuite-data-power-bi\/","title":{"rendered":"How to read NetSuite data in Power BI"},"content":{"rendered":"<h2>Introduction<\/h2>\n<p><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/power-bi-logo-310x310.png\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-3951 alignleft\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/power-bi-logo-310x310.png\" alt=\"Power BI Integration\" width=\"192\" height=\"192\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/power-bi-logo-310x310.png 310w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/power-bi-logo-310x310-150x150.png 150w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/power-bi-logo-310x310-300x300.png 300w\" sizes=\"(max-width: 192px) 100vw, 192px\" \/><\/a>In our previous blog we discussed how to\u00a0<a href=\"https:\/\/zappysys.com\/blog\/call-soap-api-power-bi-read-xml-web-service-data\/\" target=\"_blank\" rel=\"noopener\">import REST \/ SOAP API data in Power BI<\/a>. Now we will use that knowledge to <strong>read NetSuite data in Power BI (NetSuite CRM &#8211; SuiteTalk)<\/strong>. We will use ZappySys XML Driver to call Search function in NetSuite SOAP API. If you are not familiar with SOAP API concept then we highly recommend you read <a href=\"https:\/\/zappysys.com\/blog\/call-soap-api-power-bi-read-xml-web-service-data\/\" target=\"_blank\" rel=\"noopener\">previous blog post<\/a>. In this post we will use Power BI as an example App to consume NetSuite data but you can use steps listed in this article to load data in any other ODBC compliant ETL \/ reporting app (e.g. <a href=\"https:\/\/zappysys.com\/blog\/import-json-excel-load-file-rest-api\/\">Excel<\/a>,\u00a0<a href=\"https:\/\/zappysys.com\/blog\/qlik-rest-connector-examples-read-json-xml-api\/\" target=\"_blank\" rel=\"noopener\">Qlik<\/a>, <a href=\"https:\/\/zappysys.com\/blog\/read-json-informatica-import-rest-api-json-file\/\" target=\"_blank\" rel=\"noopener\">Informatica<\/a>, <a href=\"https:\/\/zappysys.com\/blog\/read-rest-api-using-ssrs-reports-call-json-xml-web-service\/\">SSRS<\/a>) or programming language (e.g. <a href=\"https:\/\/zappysys.com\/blog\/calling-rest-api-in-c\/\">C#<\/a>, <a href=\"https:\/\/zappysys.com\/blog\/connect-java-to-rest-api-json-soap-xml\/\">JAVA<\/a>, <a href=\"https:\/\/zappysys.com\/blog\/set-rest-python-client\/\">Python<\/a>) or <a href=\"https:\/\/zappysys.com\/blog\/import-rest-api-json-sql-server\/\">SQL Server (Linked Server)<\/a>.<\/p>\n<p>We will look at each step in depth, how to enable SOAP Api access in NetSuite, How to register Application, how to configure NetSuite ODBC DSN, and finally how to load NetSuite data into Power BI dashboard.<\/p>\n<p>So let&#8217;s get started. The approach listed in this article can be used to call other SOAP based API such as <a href=\"https:\/\/zappysys.com\/blog\/how-to-call-salesforce-rest-api-via-odbc-driver\/\" target=\"_blank\" rel=\"noopener\"><strong>Salesforce<\/strong><\/a>, <a href=\"https:\/\/zappysys.com\/blog\/get-data-from-workday-in-ssis-using-soap-or-rest-api\/\"><strong>Workday<\/strong><\/a>, <strong>SAP<\/strong>, Sage etc.<\/p>\n<h2>Prerequisite<\/h2>\n<p>Before you get started make sure following requirements are met.<\/p>\n<ol>\n<li>NetSuite CRM Login (UserID and Password)<\/li>\n<li>Enable Web Service Feature in NetSuite<\/li>\n<li>Obtain NetSuite Account ID<\/li>\n<li>Obtain Application ID if you have created an App. Else Register new Netsuite Application and get Application ID<\/li>\n<li>Download <a href=\"https:\/\/zappysys.com\/products\/odbc-powerpack\/\" target=\"_blank\" rel=\"noopener\">ZappySys ODBC PowerPack<\/a> (for SOAP \/ XML Driver)<\/li>\n<li>Download <a href=\"https:\/\/powerbi.microsoft.com\/en-us\/downloads\/\" target=\"_blank\" rel=\"noopener\">Power BI Desktop<\/a> (FREE) if you have not already done it.<\/li>\n<\/ol>\n<h2><span id=\"What_is_NetSuite_CRM\">What is NetSuite CRM?<\/span><\/h2>\n<p>NetSuite is a CRM \/ ERP product. It gives you scalable cloud CRM \/ ERP solution targeted at high-growing, mid-sized businesses and large enterprises. It automates front- and back-office processes including: financial management, revenue management, fixed assets, order management, billing, and inventory management.<\/p>\n<h2><span id=\"Getting_Started\">Preparing for NetSuite WebService Call in Power BI<\/span><\/h2>\n<p>For NetSuite API call we have to make sure certain settings and obtain Application ID and AccountID. So let&#8217;s get started.<\/p>\n<div class=\"content_block\" id=\"custom_post_widget-5058\"><h3>How to enable NetSuite Web Service Feature<\/h3>\r\nBefore you call any NetSuite SOAP API (i.e.\u00a0<strong>SuiteTask Web Service<\/strong>), First thing to get started with NetSuite SOAP API (i.e. ) is to enable Web Service Feature. Once you enable Web Service, you can programmatically access NetSuite data in your App (e.g. Power BI, Tableau, Informatica).\r\n\r\n<a href=\"https:\/\/system.netsuite.com\/app\/help\/helpcenter.nl?fid=section_N3419926.html\" target=\"_blank\" rel=\"noopener\">Click this link<\/a>\u00a0to see steps to enable Web Service Feature\r\n<div id=\"attachment_4616\" class=\"wp-caption alignnone\">\r\n\r\n<a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/netsuite-enable-web-service-features-setup-option.png?ssl=1\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-4616 size-full\" style=\"border: 0px; max-width: 100%; height: auto; box-shadow: rgba(0, 0, 0, 0.176) 0px 1px 2px;\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/netsuite-enable-web-service-features-setup-option.png?resize=479%2C568&amp;ssl=1\" sizes=\"(max-width: 479px) 100vw, 479px\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/netsuite-enable-web-service-features-setup-option.png?w=479&amp;ssl=1 479w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/netsuite-enable-web-service-features-setup-option.png?resize=253%2C300&amp;ssl=1 253w\" alt=\"Enable NetSuite Web Service Feature (SuiteTalk API)\" width=\"471\" height=\"559\" data-attachment-id=\"4616\" data-permalink=\"https:\/\/zappysys.com\/blog\/read-netsuite-data-power-bi\/netsuite-enable-web-service-features-setup-option\/#main\" data-orig-file=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/netsuite-enable-web-service-features-setup-option.png?fit=479%2C568&amp;ssl=1\" data-orig-size=\"479,568\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"netsuite-enable-web-service-features-setup-option\" data-image-description=\"&lt;p&gt;Enable NetSuite Web Service Feature&lt;\/p&gt; \" data-medium-file=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/netsuite-enable-web-service-features-setup-option.png?fit=253%2C300&amp;ssl=1\" data-large-file=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/netsuite-enable-web-service-features-setup-option.png?fit=479%2C568&amp;ssl=1\" \/><\/a>\r\n<p class=\"wp-caption-text\">Enable NetSuite Web Service Feature (SuiteTalk API)<\/p>\r\n\r\n<\/div>\r\n<h3><span id=\"Obtain_NetSuite_Account_ID\">Obtain NetSuite Account ID<\/span><\/h3>\r\nNetSuite Account ID is needed by Login API call. So perform following steps if you dont know account id.\r\n<ol>\r\n \t<li>Login to your NetSuite Portal<\/li>\r\n \t<li>Click the\u00a0<strong>Setup Tab<\/strong><\/li>\r\n \t<li>In the drop-down click\u00a0<strong>Integration<\/strong>\u00a0&gt;\u00a0\u00a0<strong>Web services preferences<\/strong><\/li>\r\n \t<li>On that page you will find your Account ID (<strong>example account ID = TSTDRV1234567<\/strong>\u00a0)<\/li>\r\n<\/ol>\r\n<div id=\"attachment_4620\" class=\"wp-caption alignnone\">\r\n\r\n<a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/obtain-netsuite-accountid.png?ssl=1\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-4620\" style=\"border: 0px; max-width: 100%; height: auto; box-shadow: rgba(0, 0, 0, 0.176) 0px 1px 2px;\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/obtain-netsuite-accountid.png?resize=262%2C360&amp;ssl=1\" sizes=\"(max-width: 262px) 100vw, 262px\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/obtain-netsuite-accountid.png?w=262&amp;ssl=1 262w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/obtain-netsuite-accountid.png?resize=218%2C300&amp;ssl=1 218w\" alt=\"Obtain NetSuite Account ID (Needed for Web Service Login)\" width=\"254\" height=\"349\" data-attachment-id=\"4620\" data-permalink=\"https:\/\/zappysys.com\/blog\/read-netsuite-data-power-bi\/obtain-netsuite-accountid\/#main\" data-orig-file=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/obtain-netsuite-accountid.png?fit=262%2C360&amp;ssl=1\" data-orig-size=\"262,360\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"obtain-netsuite-accountid\" data-image-description=\"&lt;p&gt;Obtain NetSuite Account ID (Needed for Web Service Login)&lt;\/p&gt; \" data-medium-file=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/obtain-netsuite-accountid.png?fit=218%2C300&amp;ssl=1\" data-large-file=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/obtain-netsuite-accountid.png?fit=262%2C360&amp;ssl=1\" \/><\/a>\r\n<p class=\"wp-caption-text\">Obtain NetSuite Account ID (Needed for Web Service Login)<\/p>\r\n\r\n<\/div>\r\n<h3><span id=\"Obtain_NetSuite_Application_ID\">Obtain NetSuite Application ID<\/span><\/h3>\r\nOnce you have account ID now we need to get Application ID. For that follow these steps.\r\n<ol>\r\n \t<li>Login to your NetSuite Portal<\/li>\r\n \t<li>Click the\u00a0<strong>Setup Tab<\/strong><\/li>\r\n \t<li>In the drop-down click\u00a0<strong>Integration<\/strong>\u00a0&gt;\u00a0\u00a0<strong>Manage Integrations<\/strong><\/li>\r\n \t<li>On that page you will find your existing Applications along with Account ID \/ Status (<strong>example Application ID = AE2EACFD-1234-1222-1111-12345544555<\/strong>\u00a0)<\/li>\r\n \t<li>If you don\u2019t have any application created yet then just click on New.<\/li>\r\n<\/ol>\r\n<div id=\"attachment_4619\" class=\"wp-caption alignnone\">\r\n\r\n<a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/netsuite-obtain-application-for-soap-api-call.png?ssl=1\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-4619\" style=\"border: 0px; max-width: 100%; height: auto; box-shadow: rgba(0, 0, 0, 0.176) 0px 1px 2px;\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/netsuite-obtain-application-for-soap-api-call.png?resize=660%2C293&amp;ssl=1\" sizes=\"(max-width: 660px) 100vw, 660px\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/netsuite-obtain-application-for-soap-api-call.png?w=660&amp;ssl=1 660w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/netsuite-obtain-application-for-soap-api-call.png?resize=300%2C133&amp;ssl=1 300w\" alt=\"Create new App \/ Get NetSuite Application ID\" width=\"652\" height=\"289\" data-attachment-id=\"4619\" data-permalink=\"https:\/\/zappysys.com\/blog\/read-netsuite-data-power-bi\/netsuite-obtain-application-for-soap-api-call\/#main\" data-orig-file=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/netsuite-obtain-application-for-soap-api-call.png?fit=660%2C293&amp;ssl=1\" data-orig-size=\"660,293\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"netsuite-obtain-application-for-soap-api-call\" data-image-description=\"&lt;p&gt;Create new App \/ Get NetSuite Application ID&lt;\/p&gt; \" data-medium-file=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/netsuite-obtain-application-for-soap-api-call.png?fit=300%2C133&amp;ssl=1\" data-large-file=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/netsuite-obtain-application-for-soap-api-call.png?fit=660%2C293&amp;ssl=1\" \/><\/a>\r\n<p class=\"wp-caption-text\">Create new App \/ Get NetSuite Application ID<\/p>\r\n\r\n<\/div>\r\n<h3><\/h3><\/div>\n<div class=\"content_block\" id=\"custom_post_widget-5098\"><h2>Understanding how NetSuite SOAP API Call works<\/h2>\r\nIn this section we will briefly understand how NetSuite SOAP API call works. When you use ZappySys Driver \/ Component it will take care many details for you but still you have to configure correct XML Body.\r\n\r\nThere are two steps involved before you can call any SOAP API in NetSuite.\r\n<ol>\r\n \t<li>Call <a href=\"https:\/\/system.netsuite.com\/app\/help\/helpcenter.nl?fid=section_N3512617.html\" target=\"_blank\" rel=\"noopener\">Login method<\/a> and extract\u00a0JSESSIONID from response Cookie (This token expires after some time)<\/li>\r\n \t<li>Call any other API (Pass obtained JSESSIONID token in Cookie header)<\/li>\r\n<\/ol>\r\n<h3>NetSuite Login Call<\/h3>\r\n<strong>Request<\/strong>\r\n<pre class=\"lang:default highlight:0 decode:true\">POST https:\/\/webservices.netsuite.com\/services\/NetSuitePort_2017_1\r\nContent-Type: text\/xml;charset=UTF-8\r\nSOAPAction: \"login\"\r\nAccept-Encoding: gzip, deflate\r\n\r\n&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;soap:Envelope xmlns:soap=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\" xmlns:xsd=\"http:\/\/www.w3.org\/2001\/XMLSchema\"&gt;\r\n  &lt;soap:Header&gt;\r\n    &lt;applicationInfo xmlns=\"urn:messages_2017_1.platform.webservices.netsuite.com\"&gt;\r\n      &lt;applicationId&gt;xxxxxxxxxxxxxx&lt;\/applicationId&gt;\r\n    &lt;\/applicationInfo&gt;\r\n  &lt;\/soap:Header&gt;\r\n  &lt;soap:Body&gt;\r\n    &lt;login xmlns=\"urn:messages_2017_1.platform.webservices.netsuite.com\"&gt;\r\n      &lt;passport&gt;\r\n        &lt;email xmlns=\"urn:core_2017_1.platform.webservices.netsuite.com\"&gt;xxxxxxxxxxxxx&lt;\/email&gt;\r\n        &lt;password xmlns=\"urn:core_2017_1.platform.webservices.netsuite.com\"&gt;xxxxxxxxxxxx&lt;\/password&gt;\r\n        &lt;account xmlns=\"urn:core_2017_1.platform.webservices.netsuite.com\"&gt;TSTxxxxxxxxxxxxxxx&lt;\/account&gt;\r\n        &lt;role internalId=\"3\" xmlns=\"urn:core_2017_1.platform.webservices.netsuite.com\" \/&gt;\r\n      &lt;\/passport&gt;\r\n    &lt;\/login&gt;\r\n  &lt;\/soap:Body&gt;\r\n&lt;\/soap:Envelope&gt;<\/pre>\r\n<strong>Response<\/strong>\r\n\r\nNotice\u00a0JSESSIONID=6xI6xxxxxxxxx in the login call response below. This Session ID can be used to call next call. ZappySys HTTP Connection Manager configured with <a href=\"https:\/\/zappysys.com\/blog\/call-soap-rest-api-using-dynamic-token-ssis\/\" target=\"_blank\" rel=\"noopener\">Dynamic Token<\/a> option can extract Cookie and reuse it until its expired (1 hour by default).\r\n<pre class=\"lang:default highlight:0 decode:true\">HTTP\/1.1 200 OK\r\nDate: Wed, 03 Oct 2018 16:50:41 GMT\r\nContent-Length: 1676\r\nContent-Type: text\/xml; charset=utf-8\r\nX-N-OperationId: 777274f6-49c6-4883-bcd1-1d70df90d78e\r\nStrict-Transport-Security: max-age=31536000\r\nNS_RTIMER_COMPOSITE: 13633xxxxxxxxx:70617xxxxxxxxxxxxx36F6D:80\r\nSet-Cookie: JSESSIONID=6xI61rdFt26pxxxxxxxxxxxxxxxqvJIMlu!-17981123445; path=\/; secure; HttpOnly\r\nSet-Cookie: NS_VER=2018.1.0; domain=webservices.netsuite.com; path=\/\r\nSet-Cookie: NS_ROUTING_VERSION=LAGGING; path=\/\r\nP3P: CP=\"CAO PSAa OUR BUS PUR\"\r\nVary: User-Agent\r\nKeep-Alive: timeout=10, max=990\r\nConnection: Keep-Alive\r\n\r\n&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;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\"&gt;\r\n  &lt;soapenv:Header&gt;\r\n    &lt;platformMsgs:documentInfo xmlns:platformMsgs=\"urn:messages_2017_1.platform.webservices.netsuite.com\"&gt;\r\n      &lt;platformMsgs:nsId&gt;WEBSERVICES_xxxxxxxxxxxxxxxxx_9fc719&lt;\/platformMsgs:nsId&gt;\r\n    &lt;\/platformMsgs:documentInfo&gt;\r\n  &lt;\/soapenv:Header&gt;\r\n  &lt;soapenv:Body&gt;\r\n    &lt;loginResponse xmlns=\"urn:messages_2017_1.platform.webservices.netsuite.com\"&gt;\r\n      &lt;sessionResponse xmlns=\"urn:messages_2017_1.platform.webservices.netsuite.com\"&gt;\r\n        &lt;ns1:status isSuccess=\"true\" xmlns:ns1=\"urn:core_2017_1.platform.webservices.netsuite.com\"\/&gt;\r\n        &lt;ns2:wsRoleList xmlns:ns2=\"urn:core_2017_1.platform.webservices.netsuite.com\"&gt;\r\n          &lt;ns2:wsRole&gt;\r\n            &lt;ns2:role internalId=\"3\"&gt;\r\n              &lt;ns2:name&gt;Administrator&lt;\/ns2:name&gt;\r\n            &lt;\/ns2:role&gt;\r\n            &lt;ns2:isDefault&gt;false&lt;\/ns2:isDefault&gt;\r\n            &lt;ns2:isInactive&gt;false&lt;\/ns2:isInactive&gt;\r\n          &lt;\/ns2:wsRole&gt;\r\n          &lt;ns2:wsRole&gt;\r\n            &lt;ns2:role internalId=\"15\"&gt;\r\n              &lt;ns2:name&gt;Employee Center&lt;\/ns2:name&gt;\r\n            &lt;\/ns2:role&gt;\r\n            &lt;ns2:isDefault&gt;false&lt;\/ns2:isDefault&gt;\r\n            &lt;ns2:isInactive&gt;false&lt;\/ns2:isInactive&gt;\r\n          &lt;\/ns2:wsRole&gt;\r\n      &lt;\/sessionResponse&gt;\r\n    &lt;\/loginResponse&gt;\r\n  &lt;\/soapenv:Body&gt;\r\n&lt;\/soapenv:Envelope&gt;<\/pre>\r\n&nbsp;\r\n<h3>NetSuite API Call ( getAll method )<\/h3>\r\nNow once you have JSESSIONID extracted you can pass it to call next API call as below. For example here is how to call <a href=\"https:\/\/system.netsuite.com\/app\/help\/helpcenter.nl?fid=section_N3489077.html\" target=\"_blank\" rel=\"noopener\"><strong>getAll<\/strong><\/a> method to obtain currency list and exchange rates. If you are not sure how to craft correct Request XML then use tool like <a href=\"https:\/\/zappysys.com\/blog\/calling-soap-web-service-in-ssis-xml-source\/\" target=\"_blank\" rel=\"noopener\">SoapUI<\/a>.\r\n\r\nYou can use NetSuite WSDL file\u00a0<a href=\"http:\/\/www.netsuite.com\/portal\/developers\/resources\/suitetalk-documentation.shtml\" target=\"_blank\" rel=\"noopener\">from here<\/a>\u00a0and import it in\u00a0<a href=\"https:\/\/zappysys.com\/blog\/calling-soap-web-service-in-ssis-xml-source\/\" target=\"_blank\" rel=\"noopener\">SoapUI<\/a>.\r\n\r\n<a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/10\/soapui-create-netsuite-soap-api-request-xml.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5103\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/10\/soapui-create-netsuite-soap-api-request-xml.png\" alt=\"\" width=\"523\" height=\"386\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/10\/soapui-create-netsuite-soap-api-request-xml.png 523w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/10\/soapui-create-netsuite-soap-api-request-xml-300x221.png 300w\" sizes=\"(max-width: 523px) 100vw, 523px\" \/><\/a>\r\n\r\n&nbsp;\r\n\r\n<strong>Request<\/strong>\r\n\r\nSee how Cookie is passed for authentication purpose. Again you can pass this manually or use HTTP connection with <a href=\"https:\/\/zappysys.com\/blog\/call-soap-rest-api-using-dynamic-token-ssis\/\" target=\"_blank\" rel=\"noopener\">Dynamic Token<\/a> to pass it automatically along with each API call.\r\n<pre class=\"lang:default highlight:0 decode:true\">POST https:\/\/webservices.netsuite.com\/services\/NetSuitePort_2017_1\r\nContent-Type: text\/xml;charset=UTF-8\r\nSOAPAction: \"getAll\"\r\nCookie: JSESSIONID=6xI61rxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxMlu!-1798141234\r\nAccept-Encoding: gzip, deflate\r\n\r\n&lt;soapenv:Envelope \r\n   xmlns:soapenv=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\" \r\n   xmlns:urn=\"urn:messages_2018_1.platform.webservices.netsuite.com\" \r\n   xmlns:urn1=\"urn:core_2018_1.platform.webservices.netsuite.com\"&gt;\r\n   &lt;soapenv:Body&gt;\r\n      &lt;urn:getAll&gt;\r\n         &lt;record recordType=\"currency\"\/&gt; \r\n      &lt;\/urn:getAll&gt;\r\n   &lt;\/soapenv:Body&gt;\r\n&lt;\/soapenv:Envelope&gt;<\/pre>\r\n<strong>Response<\/strong>\r\n<pre class=\"lang:default highlight:0 decode:true\">HTTP\/1.1 200 OK\r\nDate: Wed, 03 Oct 2018 16:50:42 GMT\r\nContent-Length: 9648\r\nContent-Type: text\/xml; charset=utf-8\r\nX-N-OperationId: 1b2989e4-b930-4a72-b471-00a8e131dfd4\r\nNS_RTIMER_COMPOSITE: 21403xxxxxx:706172746E65xxxxxxxxxxxx6F6D:80\r\nStrict-Transport-Security: max-age=31536000\r\nP3P: CP=\"CAO PSAa OUR BUS PUR\"\r\nVary: User-Agent\r\n\r\n&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;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\"&gt;\r\n  &lt;soapenv:Header&gt;\r\n    &lt;platformMsgs:documentInfo xmlns:platformMsgs=\"urn:messages_2017_1.platform.webservices.netsuite.com\"&gt;\r\n      &lt;platformMsgs:nsId&gt;WEBSERVICES_TSTDRV1439151_100320189871507121000128715_6ae8e8&lt;\/platformMsgs:nsId&gt;\r\n    &lt;\/platformMsgs:documentInfo&gt;\r\n  &lt;\/soapenv:Header&gt;\r\n  &lt;soapenv:Body&gt;\r\n    &lt;getAllResponse xmlns=\"urn:messages_2018_1.platform.webservices.netsuite.com\"&gt;\r\n      &lt;platformCore:getAllResult xmlns:platformCore=\"urn:core_2017_1.platform.webservices.netsuite.com\"&gt;\r\n        &lt;platformCore:status isSuccess=\"true\" \/&gt;\r\n        &lt;platformCore:totalRecords&gt;11&lt;\/platformCore:totalRecords&gt;\r\n        &lt;platformCore:recordList&gt;\r\n          &lt;platformCore:record internalId=\"1\" xsi:type=\"listAcct:Currency\" xmlns:listAcct=\"urn:accounting_2017_1.lists.webservices.netsuite.com\"&gt;\r\n            &lt;listAcct:name&gt;USD&lt;\/listAcct:name&gt;\r\n            &lt;listAcct:symbol&gt;USD&lt;\/listAcct:symbol&gt;\r\n            &lt;listAcct:isBaseCurrency&gt;true&lt;\/listAcct:isBaseCurrency&gt;\r\n            &lt;listAcct:isInactive&gt;false&lt;\/listAcct:isInactive&gt;\r\n            &lt;listAcct:overrideCurrencyFormat&gt;false&lt;\/listAcct:overrideCurrencyFormat&gt;\r\n            &lt;listAcct:displaySymbol&gt;$&lt;\/listAcct:displaySymbol&gt;\r\n            &lt;listAcct:symbolPlacement&gt;_beforeNumber&lt;\/listAcct:symbolPlacement&gt;\r\n            &lt;listAcct:locale&gt;_unitedStatesEnglish&lt;\/listAcct:locale&gt;\r\n            &lt;listAcct:formatSample&gt;$1,234.56&lt;\/listAcct:formatSample&gt;\r\n            &lt;listAcct:exchangeRate&gt;1.0&lt;\/listAcct:exchangeRate&gt;\r\n            &lt;listAcct:fxRateUpdateTimezone&gt;_americaNewYork&lt;\/listAcct:fxRateUpdateTimezone&gt;\r\n            &lt;listAcct:currencyPrecision&gt;_two&lt;\/listAcct:currencyPrecision&gt;\r\n          &lt;\/platformCore:record&gt;\r\n          &lt;platformCore:record internalId=\"2\" xsi:type=\"listAcct:Currency\" xmlns:listAcct=\"urn:accounting_2017_1.lists.webservices.netsuite.com\"&gt;\r\n            &lt;listAcct:name&gt;GBP&lt;\/listAcct:name&gt;\r\n            &lt;listAcct:symbol&gt;GBP&lt;\/listAcct:symbol&gt;\r\n            &lt;listAcct:isBaseCurrency&gt;true&lt;\/listAcct:isBaseCurrency&gt;\r\n            &lt;listAcct:isInactive&gt;false&lt;\/listAcct:isInactive&gt;\r\n            &lt;listAcct:overrideCurrencyFormat&gt;false&lt;\/listAcct:overrideCurrencyFormat&gt;\r\n            &lt;listAcct:displaySymbol&gt;\u00a3&lt;\/listAcct:displaySymbol&gt;\r\n            &lt;listAcct:symbolPlacement&gt;_beforeNumber&lt;\/listAcct:symbolPlacement&gt;\r\n            &lt;listAcct:locale&gt;_unitedKingdomEnglish&lt;\/listAcct:locale&gt;\r\n            &lt;listAcct:formatSample&gt;\u00a31,234.56&lt;\/listAcct:formatSample&gt;\r\n            &lt;listAcct:exchangeRate&gt;1.33165497&lt;\/listAcct:exchangeRate&gt;\r\n            &lt;listAcct:fxRateUpdateTimezone&gt;_americaNewYork&lt;\/listAcct:fxRateUpdateTimezone&gt;\r\n            &lt;listAcct:currencyPrecision&gt;_two&lt;\/listAcct:currencyPrecision&gt;\r\n          &lt;\/platformCore:record&gt;\r\n          &lt;platformCore:record internalId=\"3\" xsi:type=\"listAcct:Currency\" xmlns:listAcct=\"urn:accounting_2017_1.lists.webservices.netsuite.com\"&gt;\r\n            &lt;listAcct:name&gt;CAD&lt;\/listAcct:name&gt;\r\n            &lt;listAcct:symbol&gt;CAD&lt;\/listAcct:symbol&gt;\r\n            &lt;listAcct:isBaseCurrency&gt;true&lt;\/listAcct:isBaseCurrency&gt;\r\n            &lt;listAcct:isInactive&gt;false&lt;\/listAcct:isInactive&gt;\r\n            &lt;listAcct:overrideCurrencyFormat&gt;false&lt;\/listAcct:overrideCurrencyFormat&gt;\r\n            &lt;listAcct:displaySymbol&gt;$&lt;\/listAcct:displaySymbol&gt;\r\n            &lt;listAcct:symbolPlacement&gt;_beforeNumber&lt;\/listAcct:symbolPlacement&gt;\r\n            &lt;listAcct:locale&gt;_canadaEnglish&lt;\/listAcct:locale&gt;\r\n            &lt;listAcct:formatSample&gt;$1,234.56&lt;\/listAcct:formatSample&gt;\r\n            &lt;listAcct:exchangeRate&gt;0.76457273&lt;\/listAcct:exchangeRate&gt;\r\n            &lt;listAcct:fxRateUpdateTimezone&gt;_americaNewYork&lt;\/listAcct:fxRateUpdateTimezone&gt;\r\n            &lt;listAcct:currencyPrecision&gt;_two&lt;\/listAcct:currencyPrecision&gt;\r\n          &lt;\/platformCore:record&gt;\r\n        &lt;\/platformCore:recordList&gt;\r\n      &lt;\/platformCore:getAllResult&gt;\r\n    &lt;\/getAllResponse&gt;\r\n  &lt;\/soapenv:Body&gt;\r\n&lt;\/soapenv:Envelope&gt;<\/pre>\r\n<h3>NetSuite Search API (Pagination Example)<\/h3>\r\nNow let's look at more complex API calls where Pagination is needed. For example when you call search API to pull data from specific table (e.g. Account) you need to loop through multiple responses until all records are consumed.\r\n\r\n<strong>Request (Page-1)<\/strong>\r\n<pre class=\"lang:default highlight:0 decode:true\">POST https:\/\/webservices.netsuite.com\/services\/NetSuitePort_2017_1\r\nContent-Type: text\/xml; charset=utf-8\r\nSOAPAction: \"search\"\r\nCookie: JSESSIONID=BKQ7xxxxxxxxxxxx4Ug!-995xxxxxx\r\nAccept-Encoding: gzip, deflate\r\n\r\n&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;soap:Envelope xmlns:soap=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\" xmlns:xsd=\"http:\/\/www.w3.org\/2001\/XMLSchema\"&gt;\r\n  &lt;soap:Header&gt;\r\n    &lt;applicationInfo xmlns=\"urn:messages_2017_1.platform.webservices.netsuite.com\"&gt;\r\n      &lt;applicationId&gt;xxxxxxxxxxxxxxx&lt;\/applicationId&gt;\r\n    &lt;\/applicationInfo&gt;\r\n    &lt;searchPreferences xmlns=\"urn:messages_2017_1.platform.webservices.netsuite.com\"&gt;\r\n      &lt;pageSize&gt;50&lt;\/pageSize&gt;\r\n    &lt;\/searchPreferences&gt;\r\n  &lt;\/soap:Header&gt;\r\n  &lt;soap:Body&gt;\r\n    &lt;search xmlns=\"urn:messages_2017_1.platform.webservices.netsuite.com\"&gt;\r\n      &lt;searchRecord xmlns:q1=\"urn:accounting_2017_1.lists.webservices.netsuite.com\" xsi:type=\"q1:AccountSearch\"&gt;\r\n        &lt;q1:basic&gt;\r\n          &lt;description operator=\"doesNotContain\" xmlns=\"urn:common_2017_1.platform.webservices.netsuite.com\"&gt;\r\n            &lt;searchValue xmlns=\"urn:core_2017_1.platform.webservices.netsuite.com\"&gt;x&lt;\/searchValue&gt;\r\n          &lt;\/description&gt;\r\n          &lt;name operator=\"contains\" xmlns=\"urn:common_2017_1.platform.webservices.netsuite.com\"&gt;\r\n            &lt;searchValue xmlns=\"urn:core_2017_1.platform.webservices.netsuite.com\"&gt;a&lt;\/searchValue&gt;\r\n          &lt;\/name&gt;\r\n        &lt;\/q1:basic&gt;\r\n      &lt;\/searchRecord&gt;\r\n    &lt;\/search&gt;\r\n  &lt;\/soap:Body&gt;\r\n&lt;\/soap:Envelope&gt;<\/pre>\r\n&nbsp;\r\n\r\n<strong>Response (Page-1)<\/strong>\r\n\r\nIn below response notice 2 things. SearchId is like a cursor id which you have to pass for each page you request after first page. And you can stop looping after 4th page based on totalPages count.\r\n\r\n<strong>platformCore:searchId<\/strong> = WEBSERVICES_ABCD_12345-xxxxxxxxx\r\n<strong>platformCore:totalPages<\/strong> = 4\r\n<pre class=\"lang:default highlight:0 decode:true\">HTTP\/1.1 200 OK\r\nDate: Wed, 03 Oct 2018 18:40:33 GMT\r\nContent-Length: 49266\r\nContent-Type: text\/xml; charset=utf-8\r\nX-N-OperationId: c1e79336-63b7-4eb7-989e-5c3d24c56891\r\nNS_RTIMER_COMPOSITE: 118xxxxxxxx:70617xxxxxxxxxxxxxxxxxxxxxD:80\r\nStrict-Transport-Security: max-age=31536000\r\nP3P: CP=\"CAO PSAa OUR BUS PUR\"\r\nVary: User-Agent\r\n\r\n&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;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\"&gt;\r\n  &lt;soapenv:Header&gt;\r\n    &lt;platformMsgs:documentInfo xmlns:platformMsgs=\"urn:messages_2017_1.platform.webservices.netsuite.com\"&gt;\r\n      &lt;platformMsgs:nsId&gt;WEBSERVICES_ABCD_12345-xxxxxxxxx&lt;\/platformMsgs:nsId&gt;\r\n    &lt;\/platformMsgs:documentInfo&gt;\r\n  &lt;\/soapenv:Header&gt;\r\n  &lt;soapenv:Body&gt;\r\n    &lt;searchResponse xmlns=\"urn:messages_2017_1.platform.webservices.netsuite.com\"&gt;\r\n      &lt;platformCore:searchResult xmlns:platformCore=\"urn:core_2017_1.platform.webservices.netsuite.com\"&gt;\r\n        &lt;platformCore:status isSuccess=\"true\" \/&gt;\r\n        &lt;platformCore:totalRecords&gt;193&lt;\/platformCore:totalRecords&gt;\r\n        &lt;platformCore:pageSize&gt;50&lt;\/platformCore:pageSize&gt;\r\n        &lt;platformCore:totalPages&gt;4&lt;\/platformCore:totalPages&gt;\r\n        &lt;platformCore:pageIndex&gt;1&lt;\/platformCore:pageIndex&gt;\r\n        &lt;platformCore:searchId&gt;WEBSERVICES_ABCD_12345-xxxxxxxxx&lt;\/platformCore:searchId&gt;\r\n        &lt;platformCore:recordList&gt;\r\n          &lt;platformCore:record internalId=\"1\" xsi:type=\"listAcct:Account\" xmlns:listAcct=\"urn:accounting_2017_1.lists.webservices.netsuite.com\"&gt;\r\n            &lt;listAcct:acctType&gt;_bank&lt;\/listAcct:acctType&gt;\r\n            &lt;listAcct:acctNumber&gt;1111&lt;\/listAcct:acctNumber&gt;\r\n            &lt;listAcct:acctName&gt;Checking&lt;\/listAcct:acctName&gt;\r\n            &lt;listAcct:includeChildren&gt;false&lt;\/listAcct:includeChildren&gt;\r\n            &lt;listAcct:currency internalId=\"1\"&gt;\r\n              &lt;platformCore:name&gt;USD&lt;\/platformCore:name&gt;\r\n            &lt;\/listAcct:currency&gt;\r\n            &lt;listAcct:generalRate&gt;_current&lt;\/listAcct:generalRate&gt;\r\n            &lt;listAcct:parent internalId=\"246\"&gt;\r\n              &lt;platformCore:name&gt;xxxxxxxxxxxxxxxxxxx&lt;\/platformCore:name&gt;\r\n            &lt;\/listAcct:parent&gt;\r\n            &lt;listAcct:cashFlowRate&gt;_average&lt;\/listAcct:cashFlowRate&gt;\r\n            &lt;listAcct:description&gt;Checking&lt;\/listAcct:description&gt;\r\n            &lt;listAcct:isInactive&gt;false&lt;\/listAcct:isInactive&gt;\r\n            &lt;listAcct:inventory&gt;false&lt;\/listAcct:inventory&gt;\r\n            &lt;listAcct:eliminate&gt;false&lt;\/listAcct:eliminate&gt;\r\n            &lt;listAcct:revalue&gt;true&lt;\/listAcct:revalue&gt;\r\n          &lt;\/platformCore:record&gt;\r\n          &lt;platformCore:record internalId=\"2\" xsi:type=\"listAcct:Account\" xmlns:listAcct=\"urn:accounting_2017_1.lists.webservices.netsuite.com\"&gt;\r\n            &lt;listAcct:acctType&gt;_bank&lt;\/listAcct:acctType&gt;\r\n            &lt;listAcct:acctNumber&gt;22222&lt;\/listAcct:acctNumber&gt;\r\n            &lt;listAcct:acctName&gt;Savings&lt;\/listAcct:acctName&gt;\r\n            &lt;listAcct:includeChildren&gt;false&lt;\/listAcct:includeChildren&gt;\r\n            &lt;listAcct:currency internalId=\"1\"&gt;\r\n              &lt;platformCore:name&gt;USD&lt;\/platformCore:name&gt;\r\n            &lt;\/listAcct:currency&gt;\r\n            &lt;listAcct:generalRate&gt;_current&lt;\/listAcct:generalRate&gt;\r\n            &lt;listAcct:parent internalId=\"246\"&gt;\r\n              &lt;platformCore:name&gt;yyyyyyyyy&lt;\/platformCore:name&gt;\r\n            &lt;\/listAcct:parent&gt;\r\n            &lt;listAcct:cashFlowRate&gt;_average&lt;\/listAcct:cashFlowRate&gt;\r\n            &lt;listAcct:description&gt;Savings&lt;\/listAcct:description&gt;\r\n            &lt;listAcct:isInactive&gt;false&lt;\/listAcct:isInactive&gt;\r\n            &lt;listAcct:inventory&gt;false&lt;\/listAcct:inventory&gt;\r\n            &lt;listAcct:eliminate&gt;false&lt;\/listAcct:eliminate&gt;\r\n            &lt;listAcct:revalue&gt;true&lt;\/listAcct:revalue&gt;\r\n          &lt;\/platformCore:record&gt;\r\n          .........\r\n          .........\r\n          .........\r\n          .........\t\t  \r\n        &lt;\/platformCore:recordList&gt;\r\n      &lt;\/platformCore:searchResult&gt;\r\n    &lt;\/searchResponse&gt;\r\n  &lt;\/soapenv:Body&gt;\r\n&lt;\/soapenv:Envelope&gt;<\/pre>\r\n&nbsp;\r\n\r\n<strong>Request (Page-2 and onwards)<\/strong>\r\n\r\nHere is the second page request. Notice few things here. In heraders we are now sending <strong>SOAPAction: \"searchMoreWithId\"<\/strong> rather than <strong>\"search\"<\/strong>.\u00a0 Also our SOAP Body is also different compared to first page request. Now we only sending <strong>pageIndex<\/strong> we want to fetch and <strong>searchId<\/strong>. We have also change <strong>&lt;search&gt;<\/strong> tag with <strong>&lt;searchMoreWithId&gt;<\/strong> under Body.\r\n<pre class=\"lang:default decode:true\">POST https:\/\/webservices.netsuite.com\/services\/NetSuitePort_2017_1\r\nContent-Type: text\/xml; charset=utf-8\r\nSOAPAction: \"searchMoreWithId\"\r\nCookie: JSESSIONID=BKQ7xxxxxxxxxxxx4Ug!-995xxxxxx\r\nAccept-Encoding: gzip, deflate\r\n\r\n&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;soap:Envelope xmlns:soap=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\" xmlns:xsd=\"http:\/\/www.w3.org\/2001\/XMLSchema\"&gt;\r\n  &lt;soap:Header&gt;\r\n    &lt;applicationInfo xmlns=\"urn:messages_2017_1.platform.webservices.netsuite.com\"&gt;\r\n      &lt;applicationId&gt;xxxxxxxxxxxxxxxxxx&lt;\/applicationId&gt;\r\n    &lt;\/applicationInfo&gt;\r\n    &lt;searchPreferences xmlns=\"urn:messages_2017_1.platform.webservices.netsuite.com\"&gt;\r\n      &lt;pageSize&gt;50&lt;\/pageSize&gt;\r\n    &lt;\/searchPreferences&gt;\r\n  &lt;\/soap:Header&gt;\r\n  &lt;soap:Body&gt;\r\n    &lt;searchMoreWithId xmlns=\"urn:messages_2017_1.platform.webservices.netsuite.com\"&gt;\r\n      &lt;searchId&gt;WEBSERVICES_ABCD_12345-xxxxxxxxx&lt;\/searchId&gt;\r\n      &lt;pageIndex&gt;2&lt;\/pageIndex&gt;\r\n    &lt;\/searchMoreWithId&gt;\r\n  &lt;\/soap:Body&gt;\r\n&lt;\/soap:Envelope&gt;<\/pre>\r\n<strong>Response (Page-2 and onwards)<\/strong>\r\n<pre class=\"lang:default decode:true  \">HTTP\/1.1 200 OK\r\nDate: Wed, 03 Oct 2018 18:40:33 GMT\r\nContent-Length: 49266\r\nContent-Type: text\/xml; charset=utf-8\r\nX-N-OperationId: c1e79336-63b7-4eb7-989e-5c3d24c56891\r\nNS_RTIMER_COMPOSITE: 118xxxxxxxx:70617xxxxxxxxxxxxxxxxxxxxxD:80\r\nStrict-Transport-Security: max-age=31536000\r\nP3P: CP=\"CAO PSAa OUR BUS PUR\"\r\nVary: User-Agent\r\n\r\n&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;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\"&gt;\r\n  &lt;soapenv:Header&gt;\r\n    &lt;platformMsgs:documentInfo xmlns:platformMsgs=\"urn:messages_2017_1.platform.webservices.netsuite.com\"&gt;\r\n      &lt;platformMsgs:nsId&gt;WEBSERVICES_ABCD_12345-xxxxxxxxx&lt;\/platformMsgs:nsId&gt;\r\n    &lt;\/platformMsgs:documentInfo&gt;\r\n  &lt;\/soapenv:Header&gt;\r\n  &lt;soapenv:Body&gt;\r\n    &lt;searchMoreWithIdResponse xmlns=\"urn:messages_2017_1.platform.webservices.netsuite.com\"&gt;\r\n      &lt;platformCore:searchResult xmlns:platformCore=\"urn:core_2017_1.platform.webservices.netsuite.com\"&gt;\r\n        &lt;platformCore:status isSuccess=\"true\" \/&gt;\r\n        &lt;platformCore:totalRecords&gt;193&lt;\/platformCore:totalRecords&gt;\r\n        &lt;platformCore:pageSize&gt;50&lt;\/platformCore:pageSize&gt;\r\n        &lt;platformCore:totalPages&gt;4&lt;\/platformCore:totalPages&gt;\r\n        &lt;platformCore:pageIndex&gt;2&lt;\/platformCore:pageIndex&gt;\r\n        &lt;platformCore:searchId&gt;WEBSERVICES_ABCD_12345-xxxxxxxxx&lt;\/platformCore:searchId&gt;\r\n        &lt;platformCore:recordList&gt;\r\n          &lt;platformCore:record internalId=\"1\" xsi:type=\"listAcct:Account\" xmlns:listAcct=\"urn:accounting_2017_1.lists.webservices.netsuite.com\"&gt;\r\n            &lt;listAcct:acctType&gt;_bank&lt;\/listAcct:acctType&gt;\r\n            &lt;listAcct:acctNumber&gt;8000&lt;\/listAcct:acctNumber&gt;\r\n            &lt;listAcct:acctName&gt;Checking&lt;\/listAcct:acctName&gt;\r\n            &lt;listAcct:includeChildren&gt;false&lt;\/listAcct:includeChildren&gt;\r\n            &lt;listAcct:currency internalId=\"1\"&gt;\r\n              &lt;platformCore:name&gt;USD&lt;\/platformCore:name&gt;\r\n            &lt;\/listAcct:currency&gt;\r\n            &lt;listAcct:generalRate&gt;_current&lt;\/listAcct:generalRate&gt;\r\n            &lt;listAcct:parent internalId=\"246\"&gt;\r\n              &lt;platformCore:name&gt;xxxxxxxxxxxxxxxxxxx&lt;\/platformCore:name&gt;\r\n            &lt;\/listAcct:parent&gt;\r\n            &lt;listAcct:cashFlowRate&gt;_average&lt;\/listAcct:cashFlowRate&gt;\r\n            &lt;listAcct:description&gt;Checking&lt;\/listAcct:description&gt;\r\n            &lt;listAcct:isInactive&gt;false&lt;\/listAcct:isInactive&gt;\r\n            &lt;listAcct:inventory&gt;false&lt;\/listAcct:inventory&gt;\r\n            &lt;listAcct:eliminate&gt;false&lt;\/listAcct:eliminate&gt;\r\n            &lt;listAcct:revalue&gt;true&lt;\/listAcct:revalue&gt;\r\n          &lt;\/platformCore:record&gt;\r\n          &lt;platformCore:record internalId=\"2\" xsi:type=\"listAcct:Account\" xmlns:listAcct=\"urn:accounting_2017_1.lists.webservices.netsuite.com\"&gt;\r\n            &lt;listAcct:acctType&gt;_bank&lt;\/listAcct:acctType&gt;\r\n            &lt;listAcct:acctNumber&gt;8001&lt;\/listAcct:acctNumber&gt;\r\n            &lt;listAcct:acctName&gt;Savings&lt;\/listAcct:acctName&gt;\r\n            &lt;listAcct:includeChildren&gt;false&lt;\/listAcct:includeChildren&gt;\r\n            &lt;listAcct:currency internalId=\"1\"&gt;\r\n              &lt;platformCore:name&gt;USD&lt;\/platformCore:name&gt;\r\n            &lt;\/listAcct:currency&gt;\r\n            &lt;listAcct:generalRate&gt;_current&lt;\/listAcct:generalRate&gt;\r\n            &lt;listAcct:parent internalId=\"246\"&gt;\r\n              &lt;platformCore:name&gt;yyyyyyyyy&lt;\/platformCore:name&gt;\r\n            &lt;\/listAcct:parent&gt;\r\n            &lt;listAcct:cashFlowRate&gt;_average&lt;\/listAcct:cashFlowRate&gt;\r\n            &lt;listAcct:description&gt;Savings&lt;\/listAcct:description&gt;\r\n            &lt;listAcct:isInactive&gt;false&lt;\/listAcct:isInactive&gt;\r\n            &lt;listAcct:inventory&gt;false&lt;\/listAcct:inventory&gt;\r\n            &lt;listAcct:eliminate&gt;false&lt;\/listAcct:eliminate&gt;\r\n            &lt;listAcct:revalue&gt;true&lt;\/listAcct:revalue&gt;\r\n          &lt;\/platformCore:record&gt;\r\n          .........\r\n          .........\r\n          .........\r\n          .........\t\t  \r\n        &lt;\/platformCore:recordList&gt;\r\n      &lt;\/platformCore:searchResult&gt;\r\n    &lt;\/searchMoreWithIdResponse&gt;\r\n  &lt;\/soapenv:Body&gt;\r\n&lt;\/soapenv:Envelope&gt;<\/pre>\r\n&nbsp;\r\n\r\n&nbsp;<\/div>\n<h2><span id=\"Getting_Started\">Getting Started<\/span><\/h2>\n<p>Now let\u2019s check step by step instructions on\u00a0<strong>how to load NetSuite data in Power BI<\/strong>. In this exercise we will focus on\u00a0<a href=\"https:\/\/system.netsuite.com\/app\/help\/helpcenter.nl?fid=section_N3519853.html\" target=\"_blank\" rel=\"noopener\">calling search API<\/a>\u00a0but you can call virtually any API using the same technique.<\/p>\n<p>For detailed help on NetSuite SOAP API and other useful information check\u00a0<a href=\"https:\/\/system.netsuite.com\/app\/help\/helpcenter.nl?fid=book_N3412393.html\" target=\"_blank\" rel=\"noopener\">this documentation<\/a>. To browse schema you can use\u00a0<a href=\"http:\/\/www.netsuite.com\/help\/helpcenter\/en_US\/srbrowser\/Browser2017_2\/schema\/record\/account.html?mode=package\" target=\"_blank\" rel=\"noopener\">this link<\/a>. From schema browser we will use Search Type name later on in this article. For example later on in this article to search accounts we will use\u00a0<strong>AccountSearch<\/strong>\u00a0as below example. This name can be found\u00a0<a href=\"http:\/\/www.netsuite.com\/help\/helpcenter\/en_US\/srbrowser\/Browser2017_2\/schema\/search\/accountsearch.html?mode=package\" target=\"_blank\" rel=\"noopener\">from here(click search tab)<\/a>\u00a0You can change it to something else. For now dont worry too much until we get to that point.<\/p>\n<div id=\"crayon-5bb3ef8dce2fc034493941\" class=\"crayon-syntax crayon-theme-vs2012 crayon-font-courier-new crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-main\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-5bb3ef8dce2fc034493941-1\"><\/div>\n<\/div>\n<div class=\"crayon-pre\">\n<div id=\"crayon-5bb3ef8dce2fc034493941-1\" class=\"crayon-line\"><code><span class=\"crayon-o\">&lt;<\/span><span class=\"crayon-e\">searchRecord <\/span><span class=\"crayon-v\">xmlns<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-v\">q1<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-s\">\"urn:accounting_2017_1.lists.webservices.netsuite.com\"<\/span> <span class=\"crayon-v\">xsi<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-v\">type<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-s\">\"q1:AccountSearch\"<\/span><span class=\"crayon-o\">&gt;<\/span><\/code><\/div>\n<\/div>\n<\/div>\n<div><\/div>\n<\/div>\n<h3>Creating NetSuite ODBC Connection (Using ZappySys XML \/ SOAP Driver)<\/h3>\n<p>Once you have all necessary information handy we can <strong>create ODBC DSN for NetSuite<\/strong> which can be used by any ODBC compliant app such as <strong>Power BI<\/strong>. Perform the following steps to set NetSuite Connection which we will use to query data (e.g. Accounts, Budget, Campaign etc).<\/p>\n<p>&nbsp;<\/p>\n<ol>\n<li>Open start menu and search for &#8220;ODBC 64&#8221;. Launch ODBC Data sources for 64 bit<a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/odbc-data-sources-start-up-screen.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3992\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/odbc-data-sources-start-up-screen.png\" alt=\"Open ODBC Data Sources from Startup menu\" width=\"986\" height=\"622\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/odbc-data-sources-start-up-screen.png 986w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/odbc-data-sources-start-up-screen-300x189.png 300w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/odbc-data-sources-start-up-screen-768x484.png 768w\" sizes=\"(max-width: 986px) 100vw, 986px\" \/><\/a><\/li>\n<li>Click <strong>Add<\/strong> and select <strong>ZappySys XML Driver<\/strong>\n<div id=\"attachment_3875\" style=\"width: 603px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/zappysys-odbc-xml-soap-api-driver.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3875\" class=\"size-full wp-image-3875\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/zappysys-odbc-xml-soap-api-driver.png\" alt=\"ZappySys ODBC Driver for XML \/ SOAP API\" width=\"593\" height=\"459\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/zappysys-odbc-xml-soap-api-driver.png 593w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/zappysys-odbc-xml-soap-api-driver-300x232.png 300w\" sizes=\"(max-width: 593px) 100vw, 593px\" \/><\/a><p id=\"caption-attachment-3875\" class=\"wp-caption-text\">ZappySys ODBC Driver for XML \/ SOAP API<\/p><\/div><\/li>\n<li>Once driver UI is visible change default DSN name (e.g. change to <strong>ZS &#8211; NetSuite<\/strong>)<\/li>\n<li>Click on the <strong>Load Connection String<\/strong> button and enter the following string after replacing below placeholders to configure the NetSuite connection. If you are unsure how to get Account ID and Application ID then check previous sections. For now dont worry about various options in the connection string. We will cover them later.<br \/>\nReplace\u00a0<strong>$$$YOUR-APPLICATION-ID$$$<\/strong>\u00a0 (2 times) with your own Application ID<br \/>\nReplace\u00a0<strong>$$$YOUR-ACCOUNT-ID$$$<\/strong>\u00a0with your own Account ID<br \/>\nReplace\u00a0<strong>$$$YOUR-USER-ID$$$<\/strong>\u00a0 with your own Login ID (e.g myuser@mycompany.com)<br \/>\nReplace\u00a0<strong>$$$YOUR-PASSWORD$$$<\/strong>\u00a0 with your own Password<br \/>\nReplace\u00a0<strong>&lt;pageSize&gt;50&lt;\/pageSize&gt;<\/strong>\u00a0 with your own value. We suggest not to go more than 200 rows per page for better performance.<br \/>\nReplace\u00a0<strong>c:\\temp\\netsuite.cache.db<\/strong> with your own path for Cache File. Caching must be ON in order to Import data in Power BI correct way. We also use CacheTtl=120 seconds (Cache Expires in 120 seconds) but adjust it longer if your data import takes long time.<\/p>\n<pre class=\"wrap:true wrap-toggle:false lang:default decode:true\">DRIVER={ZappySys XML Driver};ElementsToTreatAsArray='platformCore:record';DataPath='https:\/\/webservices.netsuite.com\/services\/NetSuitePort_2017_1';DataConnectionType=HTTP;AuthScheme='JSESSIONID=';TokenUrl='https:\/\/webservices.netsuite.com\/services\/NetSuitePort_2017_1';TokenRequestData='&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;soap:Envelope xmlns:soap=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\" xmlns:xsd=\"http:\/\/www.w3.org\/2001\/XMLSchema\"&gt;\r\n  &lt;soap:Header&gt;\r\n    &lt;applicationInfo xmlns=\"urn:messages_2017_1.platform.webservices.netsuite.com\"&gt;\r\n      &lt;applicationId&gt;$$$YOUR-APPLICATION-ID$$$&lt;\/applicationId&gt;\r\n    &lt;\/applicationInfo&gt;\r\n  &lt;\/soap:Header&gt;\r\n  &lt;soap:Body&gt;\r\n    &lt;login xmlns=\"urn:messages_2017_1.platform.webservices.netsuite.com\"&gt;\r\n      &lt;passport&gt;\r\n        &lt;email xmlns=\"urn:core_2017_1.platform.webservices.netsuite.com\"&gt;[$userid$]&lt;\/email&gt;\r\n        &lt;password xmlns=\"urn:core_2017_1.platform.webservices.netsuite.com\"&gt;[$password$]&lt;\/password&gt;\r\n        &lt;account xmlns=\"urn:core_2017_1.platform.webservices.netsuite.com\"&gt;$$$YOUR-ACCOUNT-ID$$$&lt;\/account&gt;\r\n        &lt;role internalId=\"3\" xmlns=\"urn:core_2017_1.platform.webservices.netsuite.com\" \/&gt;\r\n      &lt;\/passport&gt;\r\n    &lt;\/login&gt;\r\n  &lt;\/soap:Body&gt;\r\n&lt;\/soap:Envelope&gt;';TokenRequestMethod='POST';TokenRequestContentType=TextXmlUtf8;TokenResponseValueExtractMode=Cookie;TokenRequestHeaders='SOAPAction:\"login\"';TokenResponseCookie='JSESSIONID';TokenAuthHeader='Cookie';UserName='$$$YOUR-USER-ID$$$';CredentialType=TokenDynamic;Password='$$$YOUR-PASSWORD$$$';Filter='$.soapenv:Envelope.soapenv:Body.search[$tag$]Response.platformCore:searchResult.platformCore:recordList.platformCore:record[*]';RequestData='&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;soap:Envelope xmlns:soap=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\" xmlns:xsd=\"http:\/\/www.w3.org\/2001\/XMLSchema\"&gt;\r\n  &lt;soap:Header&gt;\r\n    &lt;applicationInfo xmlns=\"urn:messages_2017_1.platform.webservices.netsuite.com\"&gt;\r\n      &lt;applicationId&gt;$$$YOUR-APPLICATION-ID$$$&lt;\/applicationId&gt;\r\n    &lt;\/applicationInfo&gt;\r\n    &lt;searchPreferences xmlns=\"urn:messages_2017_1.platform.webservices.netsuite.com\"&gt;\r\n      &lt;pageSize&gt;50&lt;\/pageSize&gt;\r\n    &lt;\/searchPreferences&gt;\r\n  &lt;\/soap:Header&gt;\r\n  &lt;soap:Body&gt;\r\n[$tag$]\r\n  &lt;\/soap:Body&gt;\r\n&lt;\/soap:Envelope&gt;';RequestMethod='POST';NextUrlAttributeOrExpr='$.soapenv:Envelope.soapenv:Body.search[$tag$]Response.platformCore:searchResult.platformCore:searchId';FirstPageBodyPart='    &lt;search xmlns=\"urn:messages_2017_1.platform.webservices.netsuite.com\"&gt;\r\n      &lt;searchRecord xmlns:q1=\"urn:accounting_2017_1.lists.webservices.netsuite.com\" xsi:type=\"q1:AccountSearch\"&gt;\r\n        &lt;q1:basic&gt;\r\n\t\t&lt;!--\r\n          &lt;description operator=\"doesNotContain\" xmlns=\"urn:common_2017_1.platform.webservices.netsuite.com\"&gt;\r\n            &lt;searchValue xmlns=\"urn:core_2017_1.platform.webservices.netsuite.com\"&gt;x&lt;\/searchValue&gt;\r\n          &lt;\/description&gt;\r\n          &lt;name operator=\"contains\" xmlns=\"urn:common_2017_1.platform.webservices.netsuite.com\"&gt;\r\n            &lt;searchValue xmlns=\"urn:core_2017_1.platform.webservices.netsuite.com\"&gt;a&lt;\/searchValue&gt;\r\n          &lt;\/name&gt;\r\n\t\t --&gt; \r\n        &lt;\/q1:basic&gt;\r\n      &lt;\/searchRecord&gt;\r\n    &lt;\/search&gt;';NextPageBodyPart='    &lt;searchMoreWithId xmlns=\"urn:messages_2017_1.platform.webservices.netsuite.com\"&gt;\r\n      &lt;searchId&gt;[$pagetoken$]&lt;\/searchId&gt;\r\n      &lt;pageIndex&gt;[$pagenumber$]&lt;\/pageIndex&gt;\r\n    &lt;\/searchMoreWithId&gt;';PagingMaxPagesExpr='$.soapenv:Envelope.soapenv:Body.searchResponse.platformCore:searchResult.platformCore:totalPages';HasDifferentNextPageInfo=True;EnablePageTokenForBody=True;PagePlaceholders='header=|MoreWithId;filter=|MoreWithId';RequestHeaders='Content-Type: text\/xml; charset=utf-8 || SOAPAction: \"search[$tag$]\"';CachingMode=All;CacheStorage=File;CacheEntryTtl=120;CacheFileLocation='c:\\temp\\netsuite.cache.db'<\/pre>\n<p>&nbsp;<\/p>\n<div id=\"attachment_4753\" style=\"width: 816px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/zappysys-odbc-driver-load-connectionstring.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-4753\" class=\"size-full wp-image-4753\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/zappysys-odbc-driver-load-connectionstring.png\" alt=\"ZappySys ODBC Driver Load Connection String - NetSuite Connection Example\" width=\"806\" height=\"696\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/zappysys-odbc-driver-load-connectionstring.png 806w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/zappysys-odbc-driver-load-connectionstring-300x259.png 300w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/zappysys-odbc-driver-load-connectionstring-768x663.png 768w\" sizes=\"(max-width: 806px) 100vw, 806px\" \/><\/a><p id=\"caption-attachment-4753\" class=\"wp-caption-text\">ZappySys ODBC Driver Load Connection String &#8211; NetSuite Connection Example<\/p><\/div><\/li>\n<li>After configuration your screen may look like below. You can also click on <strong>Advanced View<\/strong>\u00a0(Radio button) to see some Advanced properties (e.g. Caching Properties such as <strong>CachingMode<\/strong>, <strong>CacheFileLocation<\/strong>\u00a0and Advanced Pagination Properties such as <strong>PagingMaxPagesExpr<\/strong>,\u00a0<strong>HasDifferentNextPageInfo<\/strong>, <strong>NextPageBodyPart<\/strong>, <strong>FirstPageBodyPart,\u00a0EnablePageTokenForBody, PagePlaceholders<\/strong> )<br \/>\n<div class=\"su-note\"  style=\"border-color:#e5dd9d;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;\"><div class=\"su-note-inner su-u-clearfix su-u-trim\" style=\"background-color:#FFF7B7;border-color:#ffffff;color:#333333;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;\">Notice <strong>[$tag$]<\/strong> in Body, Header and Filter. This gets replaced at runtime based on some settings we did for pagination (see next 2 screenshots). NetSuite API has different Header, Body and Filter need for First page vs Next Pages so it needs special configuration. [$tag$] in Body gets replacement based on <strong>FirstPageBodyPart<\/strong> and <strong>NextPageBodyPart<\/strong> properties found on Advanced View under Pagination. <strong>[$tag$]<\/strong> used in Filter, Header or any other place gets its replacements from <strong>PagePlaceHolders<\/strong> Property found on Advanced View (see filter=firstPartString|nextPartString;header=firstPartString|nextPartString). Use pipe (vertical bar to separate first part placeholder and next part placeholder) In our case we use blank for first part.<\/div><\/div>\n<div id=\"attachment_4625\" style=\"width: 817px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/odbc-xml-driver-netsuite-connection-settings.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-4625\" class=\"size-full wp-image-4625\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/odbc-xml-driver-netsuite-connection-settings.png\" alt=\"NetSuite ODBC Connection Settings (ZappySys XML Driver)\" width=\"807\" height=\"702\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/odbc-xml-driver-netsuite-connection-settings.png 807w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/odbc-xml-driver-netsuite-connection-settings-300x261.png 300w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/odbc-xml-driver-netsuite-connection-settings-768x668.png 768w\" sizes=\"(max-width: 807px) 100vw, 807px\" \/><\/a><p id=\"caption-attachment-4625\" class=\"wp-caption-text\">NetSuite ODBC Connection Settings (ZappySys XML Driver)<\/p><\/div><\/li>\n<li>Here is what it looks like on Advanced Tab.\n<div id=\"attachment_4751\" style=\"width: 747px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/netsuite-odbc-driver-pagination-settings.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-4751\" class=\"size-full wp-image-4751\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/netsuite-odbc-driver-pagination-settings.png\" alt=\"NetSuite Connection Settings - ODBC XML Driver Advanced View (Pagination, Caching, Logging and other properties not found in Simple Mode)\" width=\"737\" height=\"911\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/netsuite-odbc-driver-pagination-settings.png 737w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/netsuite-odbc-driver-pagination-settings-243x300.png 243w\" sizes=\"(max-width: 737px) 100vw, 737px\" \/><\/a><p id=\"caption-attachment-4751\" class=\"wp-caption-text\">ODBC XML Driver &#8211; \u00c1dvanced View (Pagination, Caching, Logging and other properties not found in Simple Mode)<\/p><\/div><\/li>\n<li>Now go to preview tab and click <strong>Preview Data<\/strong> button. You will see upto 100 sample records. Using below query it will use all options from UI (No override in query).<strong>SELECT * from $<\/strong>\n<div id=\"attachment_4627\" style=\"width: 818px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/odbc-netsuite-connection-query-data-preview.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-4627\" class=\"size-full wp-image-4627\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/odbc-netsuite-connection-query-data-preview.png\" alt=\"Preview NetSuite data using ODBC Driver\" width=\"808\" height=\"702\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/odbc-netsuite-connection-query-data-preview.png 808w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/odbc-netsuite-connection-query-data-preview-300x261.png 300w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/odbc-netsuite-connection-query-data-preview-768x667.png 768w\" sizes=\"(max-width: 808px) 100vw, 808px\" \/><\/a><p id=\"caption-attachment-4627\" class=\"wp-caption-text\">Preview NetSuite data (Query Accounts) using ODBC Driver<\/p><\/div><\/li>\n<li>Now let&#8217;s change our default query a bit\u00a0 to get list of Expense Category (i.e. <a href=\"http:\/\/www.netsuite.com\/help\/helpcenter\/en_US\/srbrowser\/Browser2017_2\/schema\/search\/accountsearch.html?mode=package\" target=\"_blank\" rel=\"noopener\">ExpenseCategorySearch<\/a>). As you see we change FirstRequestBody a little bit (change\u00a0<strong>q1:ExpenseCategorySearch<\/strong>). We also removed some unwanted columns from preview by setting <strong>IncludeParentColumns=&#8217;false&#8217;<\/strong>\n<pre class=\"lang:tsql decode:true\">SELECT * FROM $\r\nWITH(\r\n\tFirstPageBodyPart='    &lt;search xmlns=\"urn:messages_2017_1.platform.webservices.netsuite.com\"&gt;\r\n      &lt;searchRecord xmlns:q1=\"urn:accounting_2017_1.lists.webservices.netsuite.com\" xsi:type=\"q1:ExpenseCategorySearch\"&gt;\r\n        &lt;q1:basic&gt;\r\n          &lt;description operator=\"doesNotContain\" xmlns=\"urn:common_2017_1.platform.webservices.netsuite.com\"&gt;\r\n            &lt;searchValue xmlns=\"urn:core_2017_1.platform.webservices.netsuite.com\"&gt;Some-String-Goes-Here&lt;\/searchValue&gt;\r\n          &lt;\/description&gt;\r\n          &lt;name operator=\"contains\" xmlns=\"urn:common_2017_1.platform.webservices.netsuite.com\"&gt;\r\n            &lt;searchValue xmlns=\"urn:core_2017_1.platform.webservices.netsuite.com\"&gt;Some-String-Goes-Here&lt;\/searchValue&gt;\r\n          &lt;\/name&gt;\r\n        &lt;\/q1:basic&gt;\r\n      &lt;\/searchRecord&gt;\r\n    &lt;\/search&gt;',\r\n    IncludeParentColumns='False'\r\n)<\/pre>\n<p>We have commented SearchQuery portion to make it simple but you can learn more about how to write search query from here<\/p>\n<p>Here is one more example of query which combines <a href=\"https:\/\/system.netsuite.com\/app\/help\/helpcenter.nl?fid=section_N3519853.html#bridgehead_N3519940\">Basic Search<\/a> and <a href=\"https:\/\/system.netsuite.com\/app\/help\/helpcenter.nl?fid=section_N3519853.html\" target=\"_blank\" rel=\"noopener\">Advanced Search<\/a><\/p>\n<div class=\"su-note\"  style=\"border-color:#e5dd9d;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;\"><div class=\"su-note-inner su-u-clearfix su-u-trim\" style=\"background-color:#FFF7B7;border-color:#ffffff;color:#333333;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;\">Pay close attention to namespace prefix in SOAP code you copy from Help center. It may be using different prefix than our original connection string (e.g. we use q1:xxxxx at some places but online sample may use ns1, ns2, ns3 &#8230;.)<\/div><\/div>\n<pre class=\"lang:tsql decode:true \">SELECT * FROM $\r\nWITH(\r\n\tFirstPageBodyPart='\r\n    &lt;search xmlns=\"urn:messages_2017_1.platform.webservices.netsuite.com\"&gt;\r\n      &lt;searchRecord xsi:type=\"ns4:ContactSearch\" xmlns:ns4=\"urn:relationships_2017_1.lists.webservices.netsuite.com\"&gt;\r\n        &lt;ns4:basic xsi:type=\"ns5:ContactSearchBasic\" xmlns:ns5=\"urn:common_2017_1.platform.webservices.netsuite.com\"&gt;\r\n          &lt;ns5:email operator=\"contains\" xsi:type=\"ns6:SearchStringField\" xmlns:ns6=\"urn:core_2017_1.platform.webservices.netsuite.com\"&gt;\r\n            &lt;ns6:searchValue xsi:type=\"xsd:string\"&gt;.com&lt;\/ns6:searchValue&gt;\r\n          &lt;\/ns5:email&gt;\r\n        &lt;\/ns4:basic&gt;\r\n        &lt;ns4:customerJoin xsi:type=\"ns7:CustomerSearchBasic\" xmlns:ns7=\"urn:common_2017_1.platform.webservices.netsuite.com\"&gt;\r\n          &lt;ns7:entityId operator=\"contains\" xsi:type=\"ns8:SearchStringField\" xmlns:ns8=\"urn:core_2017_1.platform.webservices.netsuite.com\"&gt;\r\n            &lt;ns8:searchValue xsi:type=\"xsd:string\"&gt;C&lt;\/ns8:searchValue&gt;\r\n          &lt;\/ns7:entityId&gt;\r\n        &lt;\/ns4:customerJoin&gt;\r\n      &lt;\/searchRecord&gt;\r\n    &lt;\/search&gt;',\r\n    IncludeParentColumns='False'\r\n)<\/pre>\n<p>&nbsp;<\/p>\n<div id=\"attachment_4628\" style=\"width: 784px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/netsuite-search-api-example-basicsearch-advancedsearch.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-4628\" class=\"size-full wp-image-4628\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/netsuite-search-api-example-basicsearch-advancedsearch.png\" alt=\"NetSuite Search API Example (Mixing BasicSearch \/ AdvancedSearch with JOIN)\" width=\"774\" height=\"733\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/netsuite-search-api-example-basicsearch-advancedsearch.png 774w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/netsuite-search-api-example-basicsearch-advancedsearch-300x284.png 300w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/netsuite-search-api-example-basicsearch-advancedsearch-768x727.png 768w\" sizes=\"(max-width: 774px) 100vw, 774px\" \/><\/a><p id=\"caption-attachment-4628\" class=\"wp-caption-text\">NetSuite Search API Example (Mixing BasicSearch \/ AdvancedSearch with JOIN)<\/p><\/div><\/li>\n<li>Copy your Final Query you like to use to import NetSuite data in Power BI<\/li>\n<li>Click OK to save DSN<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<h3>Import NetSuite data in Power BI<\/h3>\n<p>Now lets perform the final step to import our NetSuite Query to Power BI. Assume that we want to import Contacts in Power BI to report them by demographics or some other criteria.<\/p>\n<ol>\n<li>Open Power BI Desktop<\/li>\n<li>Click on <strong>Get Data<\/strong> &gt; <strong>More Data&#8230;<\/strong> &gt;\u00a0<strong>Other<\/strong> &gt; <strong>ODBC<\/strong>\n<div id=\"attachment_3945\" style=\"width: 545px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/power-bi-import-data-xml-soap-web-service-call-odbc-xml-api-driver.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3945\" class=\"size-full wp-image-3945\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/power-bi-import-data-xml-soap-web-service-call-odbc-xml-api-driver.png\" alt=\"Import SOAP API in Power BI (Using ZappySys XML ODBC Driver)\" width=\"535\" height=\"590\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/power-bi-import-data-xml-soap-web-service-call-odbc-xml-api-driver.png 535w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/power-bi-import-data-xml-soap-web-service-call-odbc-xml-api-driver-272x300.png 272w\" sizes=\"(max-width: 535px) 100vw, 535px\" \/><\/a><p id=\"caption-attachment-3945\" class=\"wp-caption-text\">Import SOAP API in Power BI (Using ZappySys XML ODBC Driver)<\/p><\/div><\/li>\n<li>Select your <strong>ODBC DSN Source<\/strong> from the dropdown (Assuming you have created a ODBC Data Source using ZappySys XML Driver \u2013 See the previous Section)<\/li>\n<li>Expand <strong>Advanced Options<\/strong> to enter custom Query.<\/li>\n<li>Enter your SOAP API call SQL query here. For example purpose, we will use below query to get all account using NetSuite Search Web service.\n<pre class=\"lang:tsql decode:true\">SELECT * FROM $\r\nWITH(\r\n\tFirstPageBodyPart='    &lt;search xmlns=\"urn:messages_2017_1.platform.webservices.netsuite.com\"&gt;\r\n      &lt;searchRecord xmlns:q1=\"urn:accounting_2017_1.lists.webservices.netsuite.com\" xsi:type=\"q1:AccountSearch\"&gt;\r\n        &lt;q1:basic&gt;\r\n        &lt;!--\r\n          &lt;description operator=\"doesNotContain\" xmlns=\"urn:common_2017_1.platform.webservices.netsuite.com\"&gt;\r\n            &lt;searchValue xmlns=\"urn:core_2017_1.platform.webservices.netsuite.com\"&gt;x&lt;\/searchValue&gt;\r\n          &lt;\/description&gt;\r\n          &lt;name operator=\"contains\" xmlns=\"urn:common_2017_1.platform.webservices.netsuite.com\"&gt;\r\n            &lt;searchValue xmlns=\"urn:core_2017_1.platform.webservices.netsuite.com\"&gt;a&lt;\/searchValue&gt;\r\n          &lt;\/name&gt;\r\n          --&gt;\r\n        &lt;\/q1:basic&gt;\r\n      &lt;\/searchRecord&gt;\r\n    &lt;\/search&gt;',\r\n    IncludeParentColumns='False'\r\n)<\/pre>\n<p>&nbsp;<\/p>\n<div id=\"attachment_3946\" style=\"width: 952px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/power-bi-import-soap-api-xml-web-service-advanced-options-sql.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3946\" class=\"size-full wp-image-3946\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/power-bi-import-soap-api-xml-web-service-advanced-options-sql.png\" alt=\"Enter custom SQL to load SOAP Web Service Data in Power BI (ZappySys XML Driver)\" width=\"942\" height=\"713\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/power-bi-import-soap-api-xml-web-service-advanced-options-sql.png 942w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/power-bi-import-soap-api-xml-web-service-advanced-options-sql-300x227.png 300w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/power-bi-import-soap-api-xml-web-service-advanced-options-sql-768x581.png 768w\" sizes=\"(max-width: 942px) 100vw, 942px\" \/><\/a><p id=\"caption-attachment-3946\" class=\"wp-caption-text\">Import NetSuite SOAP Web Service Data in Power BI (ZappySys XML Driver)<\/p><\/div><\/li>\n<li>Once you see data preview click OK to import.<\/li>\n<li>After data import is done you can edit your dataset (e.g. remove unwanted columns)<\/li>\n<li>You can also edit Source query after data is imported (See below)\n<div id=\"attachment_3947\" style=\"width: 829px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/power-bi-edit-data-source-query-after-import.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3947\" class=\"size-full wp-image-3947\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/power-bi-edit-data-source-query-after-import.png\" alt=\"Edit Power BI Data Source SQL after SOAP Web Service Import\" width=\"819\" height=\"502\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/power-bi-edit-data-source-query-after-import.png 819w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/power-bi-edit-data-source-query-after-import-300x184.png 300w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/power-bi-edit-data-source-query-after-import-768x471.png 768w\" sizes=\"(max-width: 819px) 100vw, 819px\" \/><\/a><p id=\"caption-attachment-3947\" class=\"wp-caption-text\">Edit Power BI Data Source SQL after REST \/ SOAP Web Service Import<\/p><\/div><\/li>\n<li>That&#8217;s it. You can now create your dashboards using NetSuite data. See below example.\n<div id=\"attachment_4633\" style=\"width: 823px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/import-netsuite-data-in-power-bi-dashboard.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-4633\" class=\"size-full wp-image-4633\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/import-netsuite-data-in-power-bi-dashboard.png\" alt=\"Import NetSuite data in Power BI dashboard\" width=\"813\" height=\"481\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/import-netsuite-data-in-power-bi-dashboard.png 813w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/import-netsuite-data-in-power-bi-dashboard-300x177.png 300w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/08\/import-netsuite-data-in-power-bi-dashboard-768x454.png 768w\" sizes=\"(max-width: 813px) 100vw, 813px\" \/><\/a><p id=\"caption-attachment-4633\" class=\"wp-caption-text\">Import NetSuite data in Power BI dashboard<\/p><\/div><\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<h2>How to debug Web Requests using Fiddler<\/h2>\n<p>There will be a time you like to see RAW HTTP Requests generated by driver for NetSuite SOAP API.\u00a0 If you like to do that <a href=\"https:\/\/zappysys.com\/blog\/how-to-use-fiddler-to-analyze-http-web-requests\/\" target=\"_blank\" rel=\"noopener\">check this article<\/a>.<\/p>\n<h2>How to call other NetSuite SOAP API<\/h2>\n<p>So far we have seen only search API to query data. But there are many other SOAP APIs which can be consumed using approach listed in this article. <a href=\"https:\/\/zappysys.com\/blog\/call-soap-api-power-bi-read-xml-web-service-data\/\" target=\"_blank\" rel=\"noopener\">Check this article<\/a> to learn more how to call any SOAP API using ZappySys XML Driver. It shows techniques to use tool called SoapUI. You can use NetSuite WSDL file\u00a0<a href=\"http:\/\/www.netsuite.com\/portal\/developers\/resources\/suitetalk-documentation.shtml\" target=\"_blank\" rel=\"noopener\">from here<\/a> copy link listed on that page and use it to import in SoapUI.<\/p>\n<h2>Conclusion<\/h2>\n<p>Consuming data from NetSuite API or any XML \/ SOAP based API in your Reporting \/ ETL apps can be tricky. But we have seen how to solve this challenging task using ZappySys XML Driver in few clicks. <a href=\"https:\/\/zappysys.com\/onlinehelp\/odbc-powerpack\/\">Download ODBC PowerPack<\/a> and explore many other API integration scenarios not discussed in this article.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction In our previous blog we discussed how to\u00a0import REST \/ SOAP API data in Power BI. Now we will use that knowledge to read NetSuite data in Power BI (NetSuite CRM &#8211; SuiteTalk). We will use ZappySys XML Driver to call Search function in NetSuite SOAP API. If you are not familiar with SOAP [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3951,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[335,278],"tags":[366,298,67,113,7],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\r\n<title>How to read NetSuite data in Power BI | ZappySys Blog<\/title>\r\n<meta name=\"description\" content=\"Learn how to read NetSuite data in Power BI. Import SuiteTalk Web Service data using ZappySys XML Driver (Call SOAP Web Service). Call Search API and Load.\" \/>\r\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\r\n<link rel=\"canonical\" href=\"https:\/\/zappysys.com\/blog\/read-netsuite-data-power-bi\/\" \/>\r\n<meta property=\"og:locale\" content=\"en_US\" \/>\r\n<meta property=\"og:type\" content=\"article\" \/>\r\n<meta property=\"og:title\" content=\"How to read NetSuite data in Power BI | ZappySys Blog\" \/>\r\n<meta property=\"og:description\" content=\"Learn how to read NetSuite data in Power BI. Import SuiteTalk Web Service data using ZappySys XML Driver (Call SOAP Web Service). Call Search API and Load.\" \/>\r\n<meta property=\"og:url\" content=\"https:\/\/zappysys.com\/blog\/read-netsuite-data-power-bi\/\" \/>\r\n<meta property=\"og:site_name\" content=\"ZappySys Blog\" \/>\r\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/ZappySys\/\" \/>\r\n<meta property=\"article:published_time\" content=\"2018-08-11T17:29:14+00:00\" \/>\r\n<meta property=\"article:modified_time\" content=\"2018-10-03T18:30:11+00:00\" \/>\r\n<meta property=\"og:image\" content=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/power-bi-logo-310x310.png\" \/>\r\n\t<meta property=\"og:image:width\" content=\"310\" \/>\r\n\t<meta property=\"og:image:height\" content=\"310\" \/>\r\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\r\n<meta name=\"author\" content=\"ZappySys\" \/>\r\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\r\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/zappysys\/\" \/>\r\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"ZappySys\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\r\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/zappysys.com\/blog\/read-netsuite-data-power-bi\/\",\"url\":\"https:\/\/zappysys.com\/blog\/read-netsuite-data-power-bi\/\",\"name\":\"How to read NetSuite data in Power BI | ZappySys Blog\",\"isPartOf\":{\"@id\":\"https:\/\/zappysys.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/zappysys.com\/blog\/read-netsuite-data-power-bi\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/zappysys.com\/blog\/read-netsuite-data-power-bi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/power-bi-logo-310x310.png\",\"datePublished\":\"2018-08-11T17:29:14+00:00\",\"dateModified\":\"2018-10-03T18:30:11+00:00\",\"author\":{\"@id\":\"https:\/\/zappysys.com\/blog\/#\/schema\/person\/2756c237457fbc95d82cb38962f81f82\"},\"description\":\"Learn how to read NetSuite data in Power BI. Import SuiteTalk Web Service data using ZappySys XML Driver (Call SOAP Web Service). Call Search API and Load.\",\"breadcrumb\":{\"@id\":\"https:\/\/zappysys.com\/blog\/read-netsuite-data-power-bi\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/zappysys.com\/blog\/read-netsuite-data-power-bi\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/zappysys.com\/blog\/read-netsuite-data-power-bi\/#primaryimage\",\"url\":\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/power-bi-logo-310x310.png\",\"contentUrl\":\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/power-bi-logo-310x310.png\",\"width\":310,\"height\":310,\"caption\":\"Power BI Integration\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/zappysys.com\/blog\/read-netsuite-data-power-bi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/zappysys.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to read NetSuite data in Power BI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/zappysys.com\/blog\/#website\",\"url\":\"https:\/\/zappysys.com\/blog\/\",\"name\":\"ZappySys Blog\",\"description\":\"SSIS \/ ODBC Drivers \/ API Connectors for JSON, XML, Azure, Amazon AWS, Salesforce, MongoDB and more\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/zappysys.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/zappysys.com\/blog\/#\/schema\/person\/2756c237457fbc95d82cb38962f81f82\",\"name\":\"ZappySys\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/zappysys.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5c9be148088ba9b8af8e955c5f7c22b5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5c9be148088ba9b8af8e955c5f7c22b5?s=96&d=mm&r=g\",\"caption\":\"ZappySys\"},\"sameAs\":[\"http:\/\/www.zappysys.com\/\",\"https:\/\/www.facebook.com\/ZappySys\/\",\"https:\/\/twitter.com\/https:\/\/twitter.com\/zappysys\/\"],\"url\":\"https:\/\/zappysys.com\/blog\/author\/admin\/\"}]}<\/script>\r\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to read NetSuite data in Power BI | ZappySys Blog","description":"Learn how to read NetSuite data in Power BI. Import SuiteTalk Web Service data using ZappySys XML Driver (Call SOAP Web Service). Call Search API and Load.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/zappysys.com\/blog\/read-netsuite-data-power-bi\/","og_locale":"en_US","og_type":"article","og_title":"How to read NetSuite data in Power BI | ZappySys Blog","og_description":"Learn how to read NetSuite data in Power BI. Import SuiteTalk Web Service data using ZappySys XML Driver (Call SOAP Web Service). Call Search API and Load.","og_url":"https:\/\/zappysys.com\/blog\/read-netsuite-data-power-bi\/","og_site_name":"ZappySys Blog","article_author":"https:\/\/www.facebook.com\/ZappySys\/","article_published_time":"2018-08-11T17:29:14+00:00","article_modified_time":"2018-10-03T18:30:11+00:00","og_image":[{"width":310,"height":310,"url":"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/power-bi-logo-310x310.png","type":"image\/png"}],"author":"ZappySys","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/zappysys\/","twitter_misc":{"Written by":"ZappySys","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/zappysys.com\/blog\/read-netsuite-data-power-bi\/","url":"https:\/\/zappysys.com\/blog\/read-netsuite-data-power-bi\/","name":"How to read NetSuite data in Power BI | ZappySys Blog","isPartOf":{"@id":"https:\/\/zappysys.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/zappysys.com\/blog\/read-netsuite-data-power-bi\/#primaryimage"},"image":{"@id":"https:\/\/zappysys.com\/blog\/read-netsuite-data-power-bi\/#primaryimage"},"thumbnailUrl":"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/power-bi-logo-310x310.png","datePublished":"2018-08-11T17:29:14+00:00","dateModified":"2018-10-03T18:30:11+00:00","author":{"@id":"https:\/\/zappysys.com\/blog\/#\/schema\/person\/2756c237457fbc95d82cb38962f81f82"},"description":"Learn how to read NetSuite data in Power BI. Import SuiteTalk Web Service data using ZappySys XML Driver (Call SOAP Web Service). Call Search API and Load.","breadcrumb":{"@id":"https:\/\/zappysys.com\/blog\/read-netsuite-data-power-bi\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zappysys.com\/blog\/read-netsuite-data-power-bi\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zappysys.com\/blog\/read-netsuite-data-power-bi\/#primaryimage","url":"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/power-bi-logo-310x310.png","contentUrl":"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2018\/06\/power-bi-logo-310x310.png","width":310,"height":310,"caption":"Power BI Integration"},{"@type":"BreadcrumbList","@id":"https:\/\/zappysys.com\/blog\/read-netsuite-data-power-bi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zappysys.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to read NetSuite data in Power BI"}]},{"@type":"WebSite","@id":"https:\/\/zappysys.com\/blog\/#website","url":"https:\/\/zappysys.com\/blog\/","name":"ZappySys Blog","description":"SSIS \/ ODBC Drivers \/ API Connectors for JSON, XML, Azure, Amazon AWS, Salesforce, MongoDB and more","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/zappysys.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/zappysys.com\/blog\/#\/schema\/person\/2756c237457fbc95d82cb38962f81f82","name":"ZappySys","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zappysys.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/5c9be148088ba9b8af8e955c5f7c22b5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5c9be148088ba9b8af8e955c5f7c22b5?s=96&d=mm&r=g","caption":"ZappySys"},"sameAs":["http:\/\/www.zappysys.com\/","https:\/\/www.facebook.com\/ZappySys\/","https:\/\/twitter.com\/https:\/\/twitter.com\/zappysys\/"],"url":"https:\/\/zappysys.com\/blog\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/posts\/4613"}],"collection":[{"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/comments?post=4613"}],"version-history":[{"count":16,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/posts\/4613\/revisions"}],"predecessor-version":[{"id":5105,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/posts\/4613\/revisions\/5105"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/media\/3951"}],"wp:attachment":[{"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/media?parent=4613"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/categories?post=4613"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/tags?post=4613"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}