<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SoapUI Archives | ZappySys Blog</title>
	<atom:link href="https://zappysys.com/blog/tag/soapui/feed/" rel="self" type="application/rss+xml" />
	<link>https://zappysys.com/blog/tag/soapui/</link>
	<description>SSIS / ODBC Drivers / API Connectors for JSON, XML, Azure, Amazon AWS, Salesforce, MongoDB and more</description>
	<lastBuildDate>Wed, 07 Oct 2020 16:35:08 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.4.4</generator>

<image>
	<url>https://zappysys.com/blog/wp-content/uploads/2023/01/cropped-zappysys-symbol-large-32x32.png</url>
	<title>SoapUI Archives | ZappySys Blog</title>
	<link>https://zappysys.com/blog/tag/soapui/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Connect Workday in Power BI &#8211; Import SOAP Data</title>
		<link>https://zappysys.com/blog/connect-workday-power-bi-import-soap-data/</link>
		
		<dc:creator><![CDATA[ZappySys]]></dc:creator>
		<pubDate>Mon, 01 Oct 2018 16:21:43 +0000</pubDate>
				<category><![CDATA[ODBC PowerPack]]></category>
		<category><![CDATA[XML File / SOAP API Driver]]></category>
		<category><![CDATA[power bi]]></category>
		<category><![CDATA[soap]]></category>
		<category><![CDATA[SoapUI]]></category>
		<category><![CDATA[workday]]></category>
		<category><![CDATA[xml]]></category>
		<guid isPermaLink="false">https://zappysys.com/blog/?p=4996</guid>

					<description><![CDATA[<p>Introduction In our previous blog post we saw how to import SOAP API data in Power BI. Now let&#8217;s continue to explore more use cases. In this article we will check how to Connect WorkDay in Power BI. We will show you step by step approach on how to call Workday SOAP API in Power [&#8230;]</p>
<p>The post <a href="https://zappysys.com/blog/connect-workday-power-bi-import-soap-data/">Connect Workday in Power BI &#8211; Import SOAP Data</a> appeared first on <a href="https://zappysys.com/blog">ZappySys Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Introduction</h2>
<p><a href="https://zappysys.com/blog/wp-content/uploads/2016/01/workday-api-integration.png"><img decoding="async" class=" wp-image-1665 alignleft" src="https://zappysys.com/blog/wp-content/uploads/2016/01/workday-api-integration.png" alt="" width="96" height="96" srcset="https://zappysys.com/blog/wp-content/uploads/2016/01/workday-api-integration.png 195w, https://zappysys.com/blog/wp-content/uploads/2016/01/workday-api-integration-150x150.png 150w" sizes="(max-width: 96px) 100vw, 96px" /></a>In our previous blog post we saw how to <a href="https://zappysys.com/blog/call-soap-api-power-bi-read-xml-web-service-data/">import SOAP API data in Power BI</a>. Now let&#8217;s continue to explore more use cases. In this article we will check how to Connect WorkDay in Power BI. We will show you step by step approach on how to call <a href="https://community.workday.com/api" target="_blank" rel="noopener">Workday SOAP API</a> in Power BI and create Power BI reports / dashboards using imported datasets.</p>
<p>We will use <a href="https://zappysys.com/products/odbc-powerpack/odbc-xml-soap-api-driver/" target="_blank" rel="noopener">ZappySys XML / SOAP Driver</a> for this demonstration.</p>
<h2><span id="Requirements">Requirements</span></h2>
<ol>
<li>First, you will need to have <a href="https://powerbi.microsoft.com/en-us/desktop/" target="_blank" rel="noopener">Power BI Desktop</a> installed</li>
<li>Make sure you have <a href="https://zappysys.com/products/odbc-powerpack/">ZappySys ODBC Power Pack</a> installed</li>
<li>Download and have install <a href="https://www.soapui.org/downloads/latest-release.html" target="_blank" rel="noopener">SoapUI</a></li>
</ol>
<h2>Get Started</h2>
<p>Once above requirements are fulfilled, let&#8217;s learn how to use Workday SOAP API and import workday data in Power BI.</p>
<p>Here are high level steps to import Workday data in Power BI using <a href="https://zappysys.com/products/odbc-powerpack/odbc-xml-soap-api-driver/" target="_blank" rel="noopener">ZappySys XML / SOAP Driver</a>.</p>
<ol>
<li>Craft Workday SOAP request XML using tool like <a href="https://zappysys.com/blog/calling-soap-web-service-in-ssis-xml-source/" target="_blank" rel="noopener">SoapUI</a> for desired operation (e.g <strong>Get_Employee</strong> )</li>
<li>Configure ODBC DSN for Workday SOAP API Connection using <a href="https://zappysys.com/products/odbc-powerpack/odbc-xml-soap-api-driver/" target="_blank" rel="noopener">ZappySys XML / SOAP Driver</a>. (Select HTTP Connection with SOAP WSS mode using workday Userid / password).</li>
<li>Test SQL Query for desired SOAP API call</li>
<li>Finally, Import Data in Power BI using ODBC Connection, Supply Custom SQL Query during Import Process (Crafted in previous step).</li>
</ol>
<p>Now let&#8217;s look at each step in detail in the following sections</p>
<div class="su-note"  style="border-color:#e5de9d;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:#FFF8B7;border-color:#ffffff;color:#333333;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;"><strong>NOTE:</strong> If you are trying to get data from Workday <em><span style="text-decoration: underline;">report</span> </em>instead (your Workday admin created a report and gave you a link) then skip Soap UI part, use the URL with GET method and <em>Basic authentication</em> instead of SOAP WSS.</div></div>
<h3>Craft Workday SOAP request XML using SoapUI</h3>
<p>Now let&#8217;s look at how to use tool like SoapUI to craft SOAP API requests. It would be helpful if you can refer <a href="https://zappysys.com/blog/calling-soap-web-service-in-ssis-xml-source/" target="_blank" rel="noopener">this article to learn more</a> about using SoapUI tool (Check SoapUI section in that article).</p>
<h4><span id="Obtain_Workday_SOAP_WSDL_URL_API_Metadata_URL">Obtain Workday SOAP WSDL URL (API Metadata URL)</span></h4>
<p>First step to consume workday api using SSIS is download SOAP WSDL file. WSDL is an XML file which describes available API operations in Workday. It also describes the structure of XML request / response. Here is the <a href="https://community.workday.com/sites/default/files/file-hosting/productionapi/index.html" target="_blank" rel="noopener">list of available WSDL</a> for various Workday API Services. You can right click on WSDL icon and save to local disk or use Direct WSDL URL in next section for importing in <a href="https://zappysys.com/blog/calling-soap-web-service-in-ssis-xml-source/">SoapUI tool</a>.</p>
<p>You can find more information about Other <a href="https://community.workday.com/api" target="_blank" rel="noopener">Workday API here</a>.</p>
<h4><span id="Obtain_Workday_API_URL">Obtain Workday API URL</span></h4>
<p>Once you have WSDL file, next step is craft correct URL for API service you like to call. Service name can be obtained from <a href="https://community.workday.com/sites/default/files/file-hosting/productionapi/index.html" target="_blank" rel="noopener">here</a> (Check service column). Notice my-instance and my-tenantid placeholders (Its specific to your company).</p>
<p><strong>Syntax:  </strong><pre class="crayon-plain-tag">https://&lt;workday host name&gt;.workday.com/ccx/service/&lt;tenant name&gt;/&lt;service-name&gt;</pre> <strong><br />
Example: </strong><pre class="crayon-plain-tag">https://MY-INSTANCE.workday.com/ccx/service/MY-TenantID/Human_Resources</pre>
<h4><span id="Craft_SOAP_Body_XML_API_Request_using_SoapUI">Load WSDL in SoapUI</span></h4>
<p>Now it&#8217;s time to load WSDL and craft some SOAP Request and test. For detailed steps <a href="https://zappysys.com/blog/calling-soap-web-service-in-ssis-xml-source/">check this (watch Video to learn SoapUI tool)</a> .</p>
<ol>
<li>Open SoapUI tool</li>
<li>Click new File &gt; New Soap Project</li>
<li>Enter WSDL Path and Name of the project</li>
<li>You will see many different operations in the imported project. For example below screenshot shows Human_Resources service and <strong>Get Employee</strong> API call. You can fill out necessary parameters in your request / remove optional parameters from XML as needed.
<div id="attachment_2543" style="width: 745px" class="wp-caption alignnone"><a href="https://i1.wp.com/zappysys.com/blog/wp-content/uploads/2016/01/create-workday-soap-request-using-soapui-api-xml-body.png?ssl=1"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-2543" class="wp-image-2543 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/2016/01/create-workday-soap-request-using-soapui-api-xml-body.png" alt="Create SOAP Request Body from WSDL (Using SoapUI tool)" width="735" height="451" data-attachment-id="2543" data-permalink="https://zappysys.com/blog/get-data-from-workday-in-ssis-using-soap-or-rest-api/create-workday-soap-request-using-soapui-api-xml-body/#main" data-orig-file="https://i1.wp.com/zappysys.com/blog/wp-content/uploads/2016/01/create-workday-soap-request-using-soapui-api-xml-body.png?fit=735%2C451&amp;ssl=1" data-orig-size="735,451" 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="create-workday-soap-request-using-soapui-api-xml-body" data-image-description="&lt;p&gt;Create SOAP Request Body from WSDL (Using SoapUI tool)&lt;/p&gt; " data-medium-file="https://i1.wp.com/zappysys.com/blog/wp-content/uploads/2016/01/create-workday-soap-request-using-soapui-api-xml-body.png?fit=300%2C184&amp;ssl=1" data-large-file="https://i1.wp.com/zappysys.com/blog/wp-content/uploads/2016/01/create-workday-soap-request-using-soapui-api-xml-body.png?fit=720%2C442&amp;ssl=1" srcset="https://zappysys.com/blog/wp-content/uploads/2016/01/create-workday-soap-request-using-soapui-api-xml-body.png 735w, https://zappysys.com/blog/wp-content/uploads/2016/01/create-workday-soap-request-using-soapui-api-xml-body-300x184.png 300w" sizes="(max-width: 735px) 100vw, 735px" /></a><p id="caption-attachment-2543" class="wp-caption-text">Create SOAP Request Body from WSDL (Using SoapUI tool)</p></div></li>
</ol>
<h4><span id="Craft_SOAP_Body_XML_API_Request_using_SoapUI">Configure Soap Request Body, URL and Credentials in SoapUI</span></h4>
<p>Now it&#8217;s time to configure SOAP Request service URL and Credentials. To generate correct Credentials Header in SOAP Request use tool like SoapUI. <a href="https://zappysys.com/blog/calling-soap-web-service-in-ssis-xml-source/" target="_blank" rel="noopener">Check this article</a> to learn more how to generate WSS Security header.</p>
<ol>
<li>Go to the API method you like to call and double click on the default Request node. <a href="https://zappysys.com/blog/calling-soap-web-service-in-ssis-xml-source/">Check this article to learn more</a>.</li>
<li>Change default request parameters (Add /Remove as per your need). You can click on Re-generate icon in the toolbar to reset the request and create optional parameters.</li>
<li>Enter the Service URL<br />
<strong>Example:</strong>  https://myinstance0001.workday.com/ccx/service/AB11111111/Human_Resources</li>
<li>In the properties window select WSS-Password Type as <strong>PasswordDigest</strong>, Enter workday <strong>username</strong> and <strong>password</strong></li>
<li>Once you done click Play button to execute the request. If things go well then you should see response on your right panel as below.
<div id="attachment_5006" style="width: 1059px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2018/10/soapui-call-workday-soap-api-test-request-response.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-5006" class="wp-image-5006 size-full" src="https://zappysys.com/blog/wp-content/uploads/2018/10/soapui-call-workday-soap-api-test-request-response.png" alt="SoapUI - Call Workday SOAP API (Configure WSS Security, Service URL, Body, Test Request / Response)" width="1049" height="597" srcset="https://zappysys.com/blog/wp-content/uploads/2018/10/soapui-call-workday-soap-api-test-request-response.png 1049w, https://zappysys.com/blog/wp-content/uploads/2018/10/soapui-call-workday-soap-api-test-request-response-300x171.png 300w, https://zappysys.com/blog/wp-content/uploads/2018/10/soapui-call-workday-soap-api-test-request-response-768x437.png 768w, https://zappysys.com/blog/wp-content/uploads/2018/10/soapui-call-workday-soap-api-test-request-response-1024x583.png 1024w" sizes="(max-width: 1049px) 100vw, 1049px" /></a><p id="caption-attachment-5006" class="wp-caption-text">SoapUI &#8211; Call Workday SOAP API (Configure WSS Security, Service URL, Body, Test Request / Response)</p></div></li>
</ol>
<h3><span id="Creating_SSIS_Connection_for_Workday_SOAP_API_call_using_WSS_Security">Creating ODBC DSN for Workday Connection</span></h3>
<p>Once you test correct parameters in your XML Request we can create ODBC DSN for Workday.</p>
<ol>
<li>Open start menu and search for &#8220;ODBC 64&#8221;. Launch ODBC Data sources for 64 bit
<div id="attachment_3992" style="width: 996px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2018/06/odbc-data-sources-start-up-screen.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-3992" class="wp-image-3992 size-full" src="https://zappysys.com/blog/wp-content/uploads/2018/06/odbc-data-sources-start-up-screen.png" alt="Open ODBC Data Sources from Start 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><p id="caption-attachment-3992" class="wp-caption-text">Open ODBC Data Sources from Startup menu</p></div></li>
<li>Click <strong>Add</strong> and select <strong>ZappySys XML Driver</strong>
<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>
<li>Once driver UI is visible change default DSN name (e.g. change something to <strong> WorkdayDSN</strong>)</li>
<li>Enter API EndPoint URL (Get it from SoapUI) and Select connection type as HTTP.<br />
Example URL:  https://YOUR-INSTANCE.workday.com/ccx/service/YOUR-TENANT/Human_Resources</li>
<li>Configure HTTP connection as below.
<div id="attachment_5047" style="width: 692px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2018/10/configure-workday-soap-api-connection-odbc-xml-driver.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-5047" class="size-full wp-image-5047" src="https://zappysys.com/blog/wp-content/uploads/2018/10/configure-workday-soap-api-connection-odbc-xml-driver.png" alt="Configure Workday Connection in ODBC DSN - XML / SOAP Driver" width="682" height="488" srcset="https://zappysys.com/blog/wp-content/uploads/2018/10/configure-workday-soap-api-connection-odbc-xml-driver.png 682w, https://zappysys.com/blog/wp-content/uploads/2018/10/configure-workday-soap-api-connection-odbc-xml-driver-300x215.png 300w" sizes="(max-width: 682px) 100vw, 682px" /></a><p id="caption-attachment-5047" class="wp-caption-text">Configure Workday Connection in ODBC DSN &#8211; XML / SOAP Driver</p></div></li>
<li>Click OK to save connection.</li>
<li>Now Configure other settings as below.
<ol>
<li>Select Method as <strong>POST</strong></li>
<li>Select Content Type as <strong>text/xml</strong></li>
<li>Enter one required Header for SOAP API as below<br />
<pre class="crayon-plain-tag">SOAPAction :&nbsp; &quot;&quot;</pre>
</li>
<li>Enter Body (Get it from SoapUI ). Here is example body for Get_Employee request.<br />
<pre class="crayon-plain-tag">&lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bsvc="urn:com.workday/bsvc"&gt;
   &lt;soapenv:Header/&gt;
   &lt;soapenv:Body&gt;
      &lt;bsvc:Employee_Get&gt;
         &lt;bsvc:Employee_Reference&gt;
            &lt;bsvc:Integration_ID_Reference&gt;
               &lt;bsvc:ID&gt;XXXX-1234-CHANGE-THIS-XXXXXXX&lt;/bsvc:ID&gt;
            &lt;/bsvc:Integration_ID_Reference&gt;
         &lt;/bsvc:Employee_Reference&gt;
      &lt;/bsvc:Employee_Get&gt;
   &lt;/soapenv:Body&gt;
&lt;/soapenv:Envelope&gt;</pre>
NOTE: Change ID to your own record id.</li>
<li><strong>( Optional )</strong> If your API returns more than one record (e.g. if you call API like <strong>Get_Workers</strong>) then select Filter as per below screenshot (Click Yes if asked to treat selection as array). For example in below screenshot we called Get_Workers request which returns multiple records under <strong>wd:Worker node</strong>. Look for <strong>Array Icon</strong> in the Filter selection. Skip this step if no array extraction needed.</li>
</ol>
</li>
<li>After Configuration your screen may look like below.
<div id="attachment_5050" style="width: 886px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2018/10/configure-workday-soap-api-connection-request-body-url-filter.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-5050" class="size-full wp-image-5050" src="https://zappysys.com/blog/wp-content/uploads/2018/10/configure-workday-soap-api-connection-request-body-url-filter.png" alt="Configure Workday SOAP Request - URL, Body, Filter" width="876" height="749" srcset="https://zappysys.com/blog/wp-content/uploads/2018/10/configure-workday-soap-api-connection-request-body-url-filter.png 876w, https://zappysys.com/blog/wp-content/uploads/2018/10/configure-workday-soap-api-connection-request-body-url-filter-300x257.png 300w, https://zappysys.com/blog/wp-content/uploads/2018/10/configure-workday-soap-api-connection-request-body-url-filter-768x657.png 768w" sizes="(max-width: 876px) 100vw, 876px" /></a><p id="caption-attachment-5050" class="wp-caption-text">Configure Workday SOAP Request &#8211; URL, Body, Filter</p></div></li>
<li>Now go to Preview Tab and you will see default SQL query generated for you. Here is example query (Replace Body part as per your need)<br />
<pre class="crayon-plain-tag">SELECT * FROM $
/*Below WITH clause is optional, uncomment parameter(s) values you like to set 
 which are different than DSN properties.
*/
WITH(
	Src='https://xxxxxxxxxx.workday.com/ccx/service/yyyyyyyyy/Human_Resources'
	--,ElementsToTreatAsArray='wd:Worker'
	--,DataConnectionType='HTTP'
	--,SoapWssPasswordType='PasswordDigest'
	--,UserName='testuser001'
	--,CredentialType='SoapWss'
	--,Filter='$.env:Envelope.env:Body.wd:Get_Workers_Response.wd:Response_Data.wd:Worker[*]'
	--,RequestContentTypeCode='TextXmlUtf8'
	--,RequestMethod='POST'
	--,Header='SOAPAction: ""'	
	,RequestData='
&lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bsvc="urn:com.workday/bsvc"&gt;
   &lt;soapenv:Header/&gt;
   &lt;soapenv:Body&gt;
        .......... .......... .......... 
        .......... FROM SOAPUI .........  
        .......... .......... ..........        
   &lt;/soapenv:Body&gt;
&lt;/soapenv:Envelope&gt;'
)</pre>
</li>
<li>Click Preview button to see data. Copy your SQL Query for later step.
<div id="attachment_5051" style="width: 818px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2018/10/query-workday-data-using-odbc-driver-xml-soap-api.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-5051" class="wp-image-5051 size-full" src="https://zappysys.com/blog/wp-content/uploads/2018/10/query-workday-data-using-odbc-driver-xml-soap-api.png" alt="Preview Workday Data (Test SQL query for ODBC XML / SOAP Driver)" width="808" height="749" srcset="https://zappysys.com/blog/wp-content/uploads/2018/10/query-workday-data-using-odbc-driver-xml-soap-api.png 808w, https://zappysys.com/blog/wp-content/uploads/2018/10/query-workday-data-using-odbc-driver-xml-soap-api-300x278.png 300w, https://zappysys.com/blog/wp-content/uploads/2018/10/query-workday-data-using-odbc-driver-xml-soap-api-768x712.png 768w" sizes="(max-width: 808px) 100vw, 808px" /></a><p id="caption-attachment-5051" class="wp-caption-text">Preview Workday Data (Test SQL query for ODBC XML / SOAP Driver)</p></div></li>
<li>Click OK to save DSN</li>
</ol>
<h3>Import Workday data in Power BI</h3>
<p>Now let&#8217;s move to the final step. We will use SQL query and DSN created in previous step for data load in Power BI.</p>
<ol>
<li>Open Power BI Desktop</li>
<li>Click on <strong>Get Data</strong> &gt; <strong>More Data&#8230;</strong> &gt; <strong>Other</strong> &gt; <strong>ODBC</strong>
<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>
<li>Select your <strong>ODBC DSN Source</strong> from the dropdown (Assuming you have created a ODBC Data Source using ZappySys XML Driver – See the previous Section)</li>
<li>Expand <strong>Advanced Options</strong> to enter custom Query.</li>
<li>Enter your SOAP API call SQL query here. For example purpose, you can use below query to get all JOB categories.<br />
<pre class="crayon-plain-tag">SELECT * FROM $
WITH(
	 Src='https://xxxxxxxxxx.workday.com/ccx/service/yyyyyyyyyy/Human_Resources'	
	--,DataConnectionType='HTTP'
	--,SoapWssPasswordType='PasswordText'
	--,UserName='testuser001'
	--,Password='###########'
	--,CredentialType='SoapWss'
	,RequestMethod='POST'
	,RequestContentTypeCode='TextXmlUtf8'
	,Filter='$.soapenv:Envelope.soapenv:Body.bsvc:Get_Job_Categories_Response.bsvc:Response_Data.bsvc:Job_Category[*]'
	,ElementsToTreatAsArray='bsvc:Job_Category'
	,RequestData='
&lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bsvc="urn:com.workday/bsvc"&gt;
   &lt;soapenv:Body&gt;
      &lt;bsvc:Get_Job_Categories_Request/&gt;
   &lt;/soapenv:Body&gt;
&lt;/soapenv:Envelope&gt;'
)</pre>
&nbsp;</p>
<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="wp-image-3946 size-full" src="https://zappysys.com/blog/wp-content/uploads/2018/06/power-bi-import-soap-api-xml-web-service-advanced-options-sql.png" alt="Import Workday 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 Workday SOAP Web Service Data in Power BI (ZappySys XML Driver)</p></div></li>
<li>Once you see data preview click OK to import.</li>
<li>After data import is done you can edit your dataset (e.g. remove unwanted columns)</li>
<li>You can also edit Source query after data is imported (See below)
<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>
<li>That&#8217;s it. You can now create your dashboards using data we just imported. See below example.
<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="wp-image-4633 size-full" src="https://zappysys.com/blog/wp-content/uploads/2018/08/import-netsuite-data-in-power-bi-dashboard.png" alt="Import Workday 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 Workday data in Power BI dashboard</p></div></li>
</ol>
<p>&nbsp;</p>
<h2>Workday API Pagination &#8211; Retrieve more than 100 rows</h2>
<p>By default Workday API will return only 100 records unless you specify Page / Count in <a href="https://community.workday.com/sites/default/files/file-hosting/productionapi/Human_Resources/v17/Get_Workers.html#Response_FilterType" target="_blank" rel="noopener">Response_Filter</a> . Regardless it will only send you 999 maximum rows. To fetch more records after first page you have to setup pagination in XML Driver. Below screenshot</p>
<ol>
<li>Select Paging Mode= POST Data Mode</li>
<li>Enter Page Number Indicator (e.g. <strong>&lt;%page%&gt;</strong> )</li>
<li>Click browse button for <strong>Max Pages Expression </strong>  (select node which indicates how many pages in response. e.g. <strong>Total_Pages</strong>)
<div id="attachment_5054" style="width: 942px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-workday-api-pagination-settings-1.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-5054" class="size-full wp-image-5054" src="https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-workday-api-pagination-settings-1.png" alt="Workday SOAP API Pagination Settings in ZappySys XML / SOAP Driver" width="932" height="553" srcset="https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-workday-api-pagination-settings-1.png 932w, https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-workday-api-pagination-settings-1-300x178.png 300w, https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-workday-api-pagination-settings-1-768x456.png 768w" sizes="(max-width: 932px) 100vw, 932px" /></a><p id="caption-attachment-5054" class="wp-caption-text">Workday SOAP API Pagination Settings in ZappySys XML / SOAP Driver</p></div></li>
<li>Once this is done go to Settings Tab. Edit your Body and make sure you supply Response_Filter. Pass Response_Filter parameter as below. See how we used <strong>&lt;%page%&gt;</strong> placeholder. You can use tool like <a href="https://zappysys.com/blog/how-to-use-fiddler-to-analyze-http-web-requests/" target="_blank" rel="noopener">fiddler</a> to see multiple response at runtime. Run package and check fiddler. In the below example we are fetching maximum 300 rows per response. It will keep reading until all pages are done. For example if you have 1000 rows to read then it will take 4 response behind the scene.<br />
<pre class="crayon-plain-tag">&lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bsvc="urn:com.workday/bsvc"&gt;
   &lt;soapenv:Body&gt;
      &lt;bsvc:Get_Job_Categories_Request bsvc:version=""&gt;
        &lt;bsvc:Response_Filter&gt;
            &lt;bsvc:Page&gt;&lt;%page%&gt;&lt;/bsvc:Page&gt;
            &lt;bsvc:Count&gt;300&lt;/bsvc:Count&gt;
         &lt;/bsvc:Response_Filter&gt;
      &lt;/bsvc:Get_Job_Categories_Request&gt;
   &lt;/soapenv:Body&gt;
&lt;/soapenv:Envelope&gt;</pre>
<div id="attachment_5055" style="width: 804px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-workday-api-pagination-settings-2-body-response-filter.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-5055" class="size-full wp-image-5055" src="https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-workday-api-pagination-settings-2-body-response-filter.png" alt="Workday API Pagination - Supply Response_Filter (Page Size and Current Page Number)" width="794" height="377" srcset="https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-workday-api-pagination-settings-2-body-response-filter.png 794w, https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-workday-api-pagination-settings-2-body-response-filter-300x142.png 300w, https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-workday-api-pagination-settings-2-body-response-filter-768x365.png 768w" sizes="(max-width: 794px) 100vw, 794px" /></a><p id="caption-attachment-5055" class="wp-caption-text">Workday API Pagination &#8211; Supply Response_Filter (Page Size and Current Page Number)</p></div></li>
</ol>
<p>That&#8217;s it. Now if you run your query it will fetch all pages and you can now read more than 1000 rows. Make sure you configure Count at reasonable size (Rows per Page) in above screenshot we use 5 just to demo small sample. We suggest you to to set around 300.</p>
<p>&nbsp;</p>
<h2>How to pass parameters to SQL query in Power BI</h2>
<div class="content_block" id="custom_post_widget-3954"><p>In the real world, many values of your REST / SOAP API call may be coming from Parameters. If that&#8217;s the case for you can try to edit script manually as below. In below example its calling SQL Query with POST method and passing some parameters. Notice below where paraAPIKey is Power BI Parameter (string type). You can use parameters anywhere in your script just like the normal variable.</p>
<p />
<a href="https://zappysys.com/blog/wp-content/uploads/2018/03/power-bi-import-odbc-sql-query-pass-parameters-dynamically.png"><img fetchpriority="high" decoding="async" class="wp-image-3121 size-full" src="https://zappysys.com/blog/wp-content/uploads/2018/03/power-bi-import-odbc-sql-query-pass-parameters-dynamically.png" alt="Import REST API in Power BI - Using parameters in SQL Query (Edit code - Advanced Mode)" width="629" height="467" srcset="https://zappysys.com/blog/wp-content/uploads/2018/03/power-bi-import-odbc-sql-query-pass-parameters-dynamically.png 629w, https://zappysys.com/blog/wp-content/uploads/2018/03/power-bi-import-odbc-sql-query-pass-parameters-dynamically-300x223.png 300w" sizes="(max-width: 629px) 100vw, 629px" /></a></p>
<p />
&nbsp;</p>
<pre class="lang:default highlight:0 decode:true">let
    vKey=paraAPIKey,
    Source = Odbc.Query(
"dsn=ZS - OData Customers", 
"SELECT * FROM $ WITH (SRC='http://httpbin.org/post'," 
&amp; "METHOD='POST'," 
&amp; "HEADER='Content-Type:application/json'," 
&amp; "BODY=@'{""CallerId"":1111, ""ApiKey"":""" &amp; vKey &amp; """}')")
in
    Source</pre>
<p>&nbsp;</p>
</div>
<h2>How to debug Web Requests using Fiddler</h2>
<p>There will be a time you like to see RAW HTTP Requests generated by driver for NetSuite SOAP API.  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>
<h2>Conclusion</h2>
<p>Consuming data from Workday 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>
<p>The post <a href="https://zappysys.com/blog/connect-workday-power-bi-import-soap-data/">Connect Workday in Power BI &#8211; Import SOAP Data</a> appeared first on <a href="https://zappysys.com/blog">ZappySys Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to read NetSuite data in Power BI</title>
		<link>https://zappysys.com/blog/read-netsuite-data-power-bi/</link>
		
		<dc:creator><![CDATA[ZappySys]]></dc:creator>
		<pubDate>Sat, 11 Aug 2018 17:29:14 +0000</pubDate>
				<category><![CDATA[Reporting - Microsoft Power BI]]></category>
		<category><![CDATA[XML File / SOAP API Driver]]></category>
		<category><![CDATA[NetSuite]]></category>
		<category><![CDATA[power bi]]></category>
		<category><![CDATA[soap]]></category>
		<category><![CDATA[SoapUI]]></category>
		<category><![CDATA[xml]]></category>
		<guid isPermaLink="false">https://zappysys.com/blog/?p=4613</guid>

					<description><![CDATA[<p>Introduction In our previous blog we discussed how to import 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 [&#8230;]</p>
<p>The post <a href="https://zappysys.com/blog/read-netsuite-data-power-bi/">How to read NetSuite data in Power BI</a> appeared first on <a href="https://zappysys.com/blog">ZappySys Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Introduction</h2>
<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 <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>, <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>
<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>
<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>
<h2>Prerequisite</h2>
<p>Before you get started make sure following requirements are met.</p>
<ol>
<li>NetSuite CRM Login (UserID and Password)</li>
<li>Enable Web Service Feature in NetSuite</li>
<li>Obtain NetSuite Account ID</li>
<li>Obtain Application ID if you have created an App. Else Register new Netsuite Application and get Application ID</li>
<li>Download <a href="https://zappysys.com/products/odbc-powerpack/" target="_blank" rel="noopener">ZappySys ODBC PowerPack</a> (for SOAP / XML Driver)</li>
<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>
</ol>
<h2><span id="What_is_NetSuite_CRM">What is NetSuite CRM?</span></h2>
<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>
<h2><span id="Getting_Started">Preparing for NetSuite WebService Call in Power BI</span></h2>
<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>
<div class="content_block" id="custom_post_widget-5058"><h3>How to enable NetSuite Web Service Feature</h3>
Before you call any NetSuite SOAP API (i.e. <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).

<a href="https://system.netsuite.com/app/help/helpcenter.nl?fid=section_N3419926.html" target="_blank" rel="noopener">Click this link</a> to see steps to enable Web Service Feature
<div id="attachment_4616" class="wp-caption alignnone">

<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>
<p class="wp-caption-text">Enable NetSuite Web Service Feature (SuiteTalk API)</p>

</div>
<h3><span id="Obtain_NetSuite_Account_ID">Obtain NetSuite Account ID</span></h3>
NetSuite Account ID is needed by Login API call. So perform following steps if you dont know account id.
<ol>
 	<li>Login to your NetSuite Portal</li>
 	<li>Click the <strong>Setup Tab</strong></li>
 	<li>In the drop-down click <strong>Integration</strong> &gt;  <strong>Web services preferences</strong></li>
 	<li>On that page you will find your Account ID (<strong>example account ID = TSTDRV1234567</strong> )</li>
</ol>
<div id="attachment_4620" class="wp-caption alignnone">

<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>
<p class="wp-caption-text">Obtain NetSuite Account ID (Needed for Web Service Login)</p>

</div>
<h3><span id="Obtain_NetSuite_Application_ID">Obtain NetSuite Application ID</span></h3>
Once you have account ID now we need to get Application ID. For that follow these steps.
<ol>
 	<li>Login to your NetSuite Portal</li>
 	<li>Click the <strong>Setup Tab</strong></li>
 	<li>In the drop-down click <strong>Integration</strong> &gt;  <strong>Manage Integrations</strong></li>
 	<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> )</li>
 	<li>If you don’t have any application created yet then just click on New.</li>
</ol>
<div id="attachment_4619" class="wp-caption alignnone">

<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>
<p class="wp-caption-text">Create new App / Get NetSuite Application ID</p>

</div>
<h3></h3></div>
<div class="content_block" id="custom_post_widget-5098"><h2>Understanding how NetSuite SOAP API Call works</h2>
In 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.

There are two steps involved before you can call any SOAP API in NetSuite.
<ol>
 	<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 JSESSIONID from response Cookie (This token expires after some time)</li>
 	<li>Call any other API (Pass obtained JSESSIONID token in Cookie header)</li>
</ol>
<h3>NetSuite Login Call</h3>
<strong>Request</strong>
<pre class="lang:default highlight:0 decode:true">POST https://webservices.netsuite.com/services/NetSuitePort_2017_1
Content-Type: text/xml;charset=UTF-8
SOAPAction: "login"
Accept-Encoding: gzip, deflate

&lt;?xml version="1.0" encoding="utf-8"?&gt;
&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;
  &lt;soap:Header&gt;
    &lt;applicationInfo xmlns="urn:messages_2017_1.platform.webservices.netsuite.com"&gt;
      &lt;applicationId&gt;xxxxxxxxxxxxxx&lt;/applicationId&gt;
    &lt;/applicationInfo&gt;
  &lt;/soap:Header&gt;
  &lt;soap:Body&gt;
    &lt;login xmlns="urn:messages_2017_1.platform.webservices.netsuite.com"&gt;
      &lt;passport&gt;
        &lt;email xmlns="urn:core_2017_1.platform.webservices.netsuite.com"&gt;xxxxxxxxxxxxx&lt;/email&gt;
        &lt;password xmlns="urn:core_2017_1.platform.webservices.netsuite.com"&gt;xxxxxxxxxxxx&lt;/password&gt;
        &lt;account xmlns="urn:core_2017_1.platform.webservices.netsuite.com"&gt;TSTxxxxxxxxxxxxxxx&lt;/account&gt;
        &lt;role internalId="3" xmlns="urn:core_2017_1.platform.webservices.netsuite.com" /&gt;
      &lt;/passport&gt;
    &lt;/login&gt;
  &lt;/soap:Body&gt;
&lt;/soap:Envelope&gt;</pre>
<strong>Response</strong>

Notice JSESSIONID=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).
<pre class="lang:default highlight:0 decode:true">HTTP/1.1 200 OK
Date: Wed, 03 Oct 2018 16:50:41 GMT
Content-Length: 1676
Content-Type: text/xml; charset=utf-8
X-N-OperationId: 777274f6-49c6-4883-bcd1-1d70df90d78e
Strict-Transport-Security: max-age=31536000
NS_RTIMER_COMPOSITE: 13633xxxxxxxxx:70617xxxxxxxxxxxxx36F6D:80
Set-Cookie: JSESSIONID=6xI61rdFt26pxxxxxxxxxxxxxxxqvJIMlu!-17981123445; path=/; secure; HttpOnly
Set-Cookie: NS_VER=2018.1.0; domain=webservices.netsuite.com; path=/
Set-Cookie: NS_ROUTING_VERSION=LAGGING; path=/
P3P: CP="CAO PSAa OUR BUS PUR"
Vary: User-Agent
Keep-Alive: timeout=10, max=990
Connection: Keep-Alive

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&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;
  &lt;soapenv:Header&gt;
    &lt;platformMsgs:documentInfo xmlns:platformMsgs="urn:messages_2017_1.platform.webservices.netsuite.com"&gt;
      &lt;platformMsgs:nsId&gt;WEBSERVICES_xxxxxxxxxxxxxxxxx_9fc719&lt;/platformMsgs:nsId&gt;
    &lt;/platformMsgs:documentInfo&gt;
  &lt;/soapenv:Header&gt;
  &lt;soapenv:Body&gt;
    &lt;loginResponse xmlns="urn:messages_2017_1.platform.webservices.netsuite.com"&gt;
      &lt;sessionResponse xmlns="urn:messages_2017_1.platform.webservices.netsuite.com"&gt;
        &lt;ns1:status isSuccess="true" xmlns:ns1="urn:core_2017_1.platform.webservices.netsuite.com"/&gt;
        &lt;ns2:wsRoleList xmlns:ns2="urn:core_2017_1.platform.webservices.netsuite.com"&gt;
          &lt;ns2:wsRole&gt;
            &lt;ns2:role internalId="3"&gt;
              &lt;ns2:name&gt;Administrator&lt;/ns2:name&gt;
            &lt;/ns2:role&gt;
            &lt;ns2:isDefault&gt;false&lt;/ns2:isDefault&gt;
            &lt;ns2:isInactive&gt;false&lt;/ns2:isInactive&gt;
          &lt;/ns2:wsRole&gt;
          &lt;ns2:wsRole&gt;
            &lt;ns2:role internalId="15"&gt;
              &lt;ns2:name&gt;Employee Center&lt;/ns2:name&gt;
            &lt;/ns2:role&gt;
            &lt;ns2:isDefault&gt;false&lt;/ns2:isDefault&gt;
            &lt;ns2:isInactive&gt;false&lt;/ns2:isInactive&gt;
          &lt;/ns2:wsRole&gt;
      &lt;/sessionResponse&gt;
    &lt;/loginResponse&gt;
  &lt;/soapenv:Body&gt;
&lt;/soapenv:Envelope&gt;</pre>
&nbsp;
<h3>NetSuite API Call ( getAll method )</h3>
Now 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>.

You can use NetSuite WSDL file <a href="http://www.netsuite.com/portal/developers/resources/suitetalk-documentation.shtml" target="_blank" rel="noopener">from here</a> and import it in <a href="https://zappysys.com/blog/calling-soap-web-service-in-ssis-xml-source/" target="_blank" rel="noopener">SoapUI</a>.

<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>

&nbsp;

<strong>Request</strong>

See 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.
<pre class="lang:default highlight:0 decode:true">POST https://webservices.netsuite.com/services/NetSuitePort_2017_1
Content-Type: text/xml;charset=UTF-8
SOAPAction: "getAll"
Cookie: JSESSIONID=6xI61rxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxMlu!-1798141234
Accept-Encoding: gzip, deflate

&lt;soapenv:Envelope 
   xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
   xmlns:urn="urn:messages_2018_1.platform.webservices.netsuite.com" 
   xmlns:urn1="urn:core_2018_1.platform.webservices.netsuite.com"&gt;
   &lt;soapenv:Body&gt;
      &lt;urn:getAll&gt;
         &lt;record recordType="currency"/&gt; 
      &lt;/urn:getAll&gt;
   &lt;/soapenv:Body&gt;
&lt;/soapenv:Envelope&gt;</pre>
<strong>Response</strong>
<pre class="lang:default highlight:0 decode:true">HTTP/1.1 200 OK
Date: Wed, 03 Oct 2018 16:50:42 GMT
Content-Length: 9648
Content-Type: text/xml; charset=utf-8
X-N-OperationId: 1b2989e4-b930-4a72-b471-00a8e131dfd4
NS_RTIMER_COMPOSITE: 21403xxxxxx:706172746E65xxxxxxxxxxxx6F6D:80
Strict-Transport-Security: max-age=31536000
P3P: CP="CAO PSAa OUR BUS PUR"
Vary: User-Agent

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&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;
  &lt;soapenv:Header&gt;
    &lt;platformMsgs:documentInfo xmlns:platformMsgs="urn:messages_2017_1.platform.webservices.netsuite.com"&gt;
      &lt;platformMsgs:nsId&gt;WEBSERVICES_TSTDRV1439151_100320189871507121000128715_6ae8e8&lt;/platformMsgs:nsId&gt;
    &lt;/platformMsgs:documentInfo&gt;
  &lt;/soapenv:Header&gt;
  &lt;soapenv:Body&gt;
    &lt;getAllResponse xmlns="urn:messages_2018_1.platform.webservices.netsuite.com"&gt;
      &lt;platformCore:getAllResult xmlns:platformCore="urn:core_2017_1.platform.webservices.netsuite.com"&gt;
        &lt;platformCore:status isSuccess="true" /&gt;
        &lt;platformCore:totalRecords&gt;11&lt;/platformCore:totalRecords&gt;
        &lt;platformCore:recordList&gt;
          &lt;platformCore:record internalId="1" xsi:type="listAcct:Currency" xmlns:listAcct="urn:accounting_2017_1.lists.webservices.netsuite.com"&gt;
            &lt;listAcct:name&gt;USD&lt;/listAcct:name&gt;
            &lt;listAcct:symbol&gt;USD&lt;/listAcct:symbol&gt;
            &lt;listAcct:isBaseCurrency&gt;true&lt;/listAcct:isBaseCurrency&gt;
            &lt;listAcct:isInactive&gt;false&lt;/listAcct:isInactive&gt;
            &lt;listAcct:overrideCurrencyFormat&gt;false&lt;/listAcct:overrideCurrencyFormat&gt;
            &lt;listAcct:displaySymbol&gt;$&lt;/listAcct:displaySymbol&gt;
            &lt;listAcct:symbolPlacement&gt;_beforeNumber&lt;/listAcct:symbolPlacement&gt;
            &lt;listAcct:locale&gt;_unitedStatesEnglish&lt;/listAcct:locale&gt;
            &lt;listAcct:formatSample&gt;$1,234.56&lt;/listAcct:formatSample&gt;
            &lt;listAcct:exchangeRate&gt;1.0&lt;/listAcct:exchangeRate&gt;
            &lt;listAcct:fxRateUpdateTimezone&gt;_americaNewYork&lt;/listAcct:fxRateUpdateTimezone&gt;
            &lt;listAcct:currencyPrecision&gt;_two&lt;/listAcct:currencyPrecision&gt;
          &lt;/platformCore:record&gt;
          &lt;platformCore:record internalId="2" xsi:type="listAcct:Currency" xmlns:listAcct="urn:accounting_2017_1.lists.webservices.netsuite.com"&gt;
            &lt;listAcct:name&gt;GBP&lt;/listAcct:name&gt;
            &lt;listAcct:symbol&gt;GBP&lt;/listAcct:symbol&gt;
            &lt;listAcct:isBaseCurrency&gt;true&lt;/listAcct:isBaseCurrency&gt;
            &lt;listAcct:isInactive&gt;false&lt;/listAcct:isInactive&gt;
            &lt;listAcct:overrideCurrencyFormat&gt;false&lt;/listAcct:overrideCurrencyFormat&gt;
            &lt;listAcct:displaySymbol&gt;£&lt;/listAcct:displaySymbol&gt;
            &lt;listAcct:symbolPlacement&gt;_beforeNumber&lt;/listAcct:symbolPlacement&gt;
            &lt;listAcct:locale&gt;_unitedKingdomEnglish&lt;/listAcct:locale&gt;
            &lt;listAcct:formatSample&gt;£1,234.56&lt;/listAcct:formatSample&gt;
            &lt;listAcct:exchangeRate&gt;1.33165497&lt;/listAcct:exchangeRate&gt;
            &lt;listAcct:fxRateUpdateTimezone&gt;_americaNewYork&lt;/listAcct:fxRateUpdateTimezone&gt;
            &lt;listAcct:currencyPrecision&gt;_two&lt;/listAcct:currencyPrecision&gt;
          &lt;/platformCore:record&gt;
          &lt;platformCore:record internalId="3" xsi:type="listAcct:Currency" xmlns:listAcct="urn:accounting_2017_1.lists.webservices.netsuite.com"&gt;
            &lt;listAcct:name&gt;CAD&lt;/listAcct:name&gt;
            &lt;listAcct:symbol&gt;CAD&lt;/listAcct:symbol&gt;
            &lt;listAcct:isBaseCurrency&gt;true&lt;/listAcct:isBaseCurrency&gt;
            &lt;listAcct:isInactive&gt;false&lt;/listAcct:isInactive&gt;
            &lt;listAcct:overrideCurrencyFormat&gt;false&lt;/listAcct:overrideCurrencyFormat&gt;
            &lt;listAcct:displaySymbol&gt;$&lt;/listAcct:displaySymbol&gt;
            &lt;listAcct:symbolPlacement&gt;_beforeNumber&lt;/listAcct:symbolPlacement&gt;
            &lt;listAcct:locale&gt;_canadaEnglish&lt;/listAcct:locale&gt;
            &lt;listAcct:formatSample&gt;$1,234.56&lt;/listAcct:formatSample&gt;
            &lt;listAcct:exchangeRate&gt;0.76457273&lt;/listAcct:exchangeRate&gt;
            &lt;listAcct:fxRateUpdateTimezone&gt;_americaNewYork&lt;/listAcct:fxRateUpdateTimezone&gt;
            &lt;listAcct:currencyPrecision&gt;_two&lt;/listAcct:currencyPrecision&gt;
          &lt;/platformCore:record&gt;
        &lt;/platformCore:recordList&gt;
      &lt;/platformCore:getAllResult&gt;
    &lt;/getAllResponse&gt;
  &lt;/soapenv:Body&gt;
&lt;/soapenv:Envelope&gt;</pre>
<h3>NetSuite Search API (Pagination Example)</h3>
Now 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.

<strong>Request (Page-1)</strong>
<pre class="lang:default highlight:0 decode:true">POST https://webservices.netsuite.com/services/NetSuitePort_2017_1
Content-Type: text/xml; charset=utf-8
SOAPAction: "search"
Cookie: JSESSIONID=BKQ7xxxxxxxxxxxx4Ug!-995xxxxxx
Accept-Encoding: gzip, deflate

&lt;?xml version="1.0" encoding="utf-8"?&gt;
&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;
  &lt;soap:Header&gt;
    &lt;applicationInfo xmlns="urn:messages_2017_1.platform.webservices.netsuite.com"&gt;
      &lt;applicationId&gt;xxxxxxxxxxxxxxx&lt;/applicationId&gt;
    &lt;/applicationInfo&gt;
    &lt;searchPreferences xmlns="urn:messages_2017_1.platform.webservices.netsuite.com"&gt;
      &lt;pageSize&gt;50&lt;/pageSize&gt;
    &lt;/searchPreferences&gt;
  &lt;/soap:Header&gt;
  &lt;soap:Body&gt;
    &lt;search xmlns="urn:messages_2017_1.platform.webservices.netsuite.com"&gt;
      &lt;searchRecord xmlns:q1="urn:accounting_2017_1.lists.webservices.netsuite.com" xsi:type="q1:AccountSearch"&gt;
        &lt;q1:basic&gt;
          &lt;description operator="doesNotContain" xmlns="urn:common_2017_1.platform.webservices.netsuite.com"&gt;
            &lt;searchValue xmlns="urn:core_2017_1.platform.webservices.netsuite.com"&gt;x&lt;/searchValue&gt;
          &lt;/description&gt;
          &lt;name operator="contains" xmlns="urn:common_2017_1.platform.webservices.netsuite.com"&gt;
            &lt;searchValue xmlns="urn:core_2017_1.platform.webservices.netsuite.com"&gt;a&lt;/searchValue&gt;
          &lt;/name&gt;
        &lt;/q1:basic&gt;
      &lt;/searchRecord&gt;
    &lt;/search&gt;
  &lt;/soap:Body&gt;
&lt;/soap:Envelope&gt;</pre>
&nbsp;

<strong>Response (Page-1)</strong>

In 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.

<strong>platformCore:searchId</strong> = WEBSERVICES_ABCD_12345-xxxxxxxxx
<strong>platformCore:totalPages</strong> = 4
<pre class="lang:default highlight:0 decode:true">HTTP/1.1 200 OK
Date: Wed, 03 Oct 2018 18:40:33 GMT
Content-Length: 49266
Content-Type: text/xml; charset=utf-8
X-N-OperationId: c1e79336-63b7-4eb7-989e-5c3d24c56891
NS_RTIMER_COMPOSITE: 118xxxxxxxx:70617xxxxxxxxxxxxxxxxxxxxxD:80
Strict-Transport-Security: max-age=31536000
P3P: CP="CAO PSAa OUR BUS PUR"
Vary: User-Agent

&lt;?xml version="1.0" encoding="utf-8"?&gt;
&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;
  &lt;soapenv:Header&gt;
    &lt;platformMsgs:documentInfo xmlns:platformMsgs="urn:messages_2017_1.platform.webservices.netsuite.com"&gt;
      &lt;platformMsgs:nsId&gt;WEBSERVICES_ABCD_12345-xxxxxxxxx&lt;/platformMsgs:nsId&gt;
    &lt;/platformMsgs:documentInfo&gt;
  &lt;/soapenv:Header&gt;
  &lt;soapenv:Body&gt;
    &lt;searchResponse xmlns="urn:messages_2017_1.platform.webservices.netsuite.com"&gt;
      &lt;platformCore:searchResult xmlns:platformCore="urn:core_2017_1.platform.webservices.netsuite.com"&gt;
        &lt;platformCore:status isSuccess="true" /&gt;
        &lt;platformCore:totalRecords&gt;193&lt;/platformCore:totalRecords&gt;
        &lt;platformCore:pageSize&gt;50&lt;/platformCore:pageSize&gt;
        &lt;platformCore:totalPages&gt;4&lt;/platformCore:totalPages&gt;
        &lt;platformCore:pageIndex&gt;1&lt;/platformCore:pageIndex&gt;
        &lt;platformCore:searchId&gt;WEBSERVICES_ABCD_12345-xxxxxxxxx&lt;/platformCore:searchId&gt;
        &lt;platformCore:recordList&gt;
          &lt;platformCore:record internalId="1" xsi:type="listAcct:Account" xmlns:listAcct="urn:accounting_2017_1.lists.webservices.netsuite.com"&gt;
            &lt;listAcct:acctType&gt;_bank&lt;/listAcct:acctType&gt;
            &lt;listAcct:acctNumber&gt;1111&lt;/listAcct:acctNumber&gt;
            &lt;listAcct:acctName&gt;Checking&lt;/listAcct:acctName&gt;
            &lt;listAcct:includeChildren&gt;false&lt;/listAcct:includeChildren&gt;
            &lt;listAcct:currency internalId="1"&gt;
              &lt;platformCore:name&gt;USD&lt;/platformCore:name&gt;
            &lt;/listAcct:currency&gt;
            &lt;listAcct:generalRate&gt;_current&lt;/listAcct:generalRate&gt;
            &lt;listAcct:parent internalId="246"&gt;
              &lt;platformCore:name&gt;xxxxxxxxxxxxxxxxxxx&lt;/platformCore:name&gt;
            &lt;/listAcct:parent&gt;
            &lt;listAcct:cashFlowRate&gt;_average&lt;/listAcct:cashFlowRate&gt;
            &lt;listAcct:description&gt;Checking&lt;/listAcct:description&gt;
            &lt;listAcct:isInactive&gt;false&lt;/listAcct:isInactive&gt;
            &lt;listAcct:inventory&gt;false&lt;/listAcct:inventory&gt;
            &lt;listAcct:eliminate&gt;false&lt;/listAcct:eliminate&gt;
            &lt;listAcct:revalue&gt;true&lt;/listAcct:revalue&gt;
          &lt;/platformCore:record&gt;
          &lt;platformCore:record internalId="2" xsi:type="listAcct:Account" xmlns:listAcct="urn:accounting_2017_1.lists.webservices.netsuite.com"&gt;
            &lt;listAcct:acctType&gt;_bank&lt;/listAcct:acctType&gt;
            &lt;listAcct:acctNumber&gt;22222&lt;/listAcct:acctNumber&gt;
            &lt;listAcct:acctName&gt;Savings&lt;/listAcct:acctName&gt;
            &lt;listAcct:includeChildren&gt;false&lt;/listAcct:includeChildren&gt;
            &lt;listAcct:currency internalId="1"&gt;
              &lt;platformCore:name&gt;USD&lt;/platformCore:name&gt;
            &lt;/listAcct:currency&gt;
            &lt;listAcct:generalRate&gt;_current&lt;/listAcct:generalRate&gt;
            &lt;listAcct:parent internalId="246"&gt;
              &lt;platformCore:name&gt;yyyyyyyyy&lt;/platformCore:name&gt;
            &lt;/listAcct:parent&gt;
            &lt;listAcct:cashFlowRate&gt;_average&lt;/listAcct:cashFlowRate&gt;
            &lt;listAcct:description&gt;Savings&lt;/listAcct:description&gt;
            &lt;listAcct:isInactive&gt;false&lt;/listAcct:isInactive&gt;
            &lt;listAcct:inventory&gt;false&lt;/listAcct:inventory&gt;
            &lt;listAcct:eliminate&gt;false&lt;/listAcct:eliminate&gt;
            &lt;listAcct:revalue&gt;true&lt;/listAcct:revalue&gt;
          &lt;/platformCore:record&gt;
          .........
          .........
          .........
          .........		  
        &lt;/platformCore:recordList&gt;
      &lt;/platformCore:searchResult&gt;
    &lt;/searchResponse&gt;
  &lt;/soapenv:Body&gt;
&lt;/soapenv:Envelope&gt;</pre>
&nbsp;

<strong>Request (Page-2 and onwards)</strong>

Here is the second page request. Notice few things here. In heraders we are now sending <strong>SOAPAction: "searchMoreWithId"</strong> rather than <strong>"search"</strong>.  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.
<pre class="lang:default decode:true">POST https://webservices.netsuite.com/services/NetSuitePort_2017_1
Content-Type: text/xml; charset=utf-8
SOAPAction: "searchMoreWithId"
Cookie: JSESSIONID=BKQ7xxxxxxxxxxxx4Ug!-995xxxxxx
Accept-Encoding: gzip, deflate

&lt;?xml version="1.0" encoding="utf-8"?&gt;
&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;
  &lt;soap:Header&gt;
    &lt;applicationInfo xmlns="urn:messages_2017_1.platform.webservices.netsuite.com"&gt;
      &lt;applicationId&gt;xxxxxxxxxxxxxxxxxx&lt;/applicationId&gt;
    &lt;/applicationInfo&gt;
    &lt;searchPreferences xmlns="urn:messages_2017_1.platform.webservices.netsuite.com"&gt;
      &lt;pageSize&gt;50&lt;/pageSize&gt;
    &lt;/searchPreferences&gt;
  &lt;/soap:Header&gt;
  &lt;soap:Body&gt;
    &lt;searchMoreWithId xmlns="urn:messages_2017_1.platform.webservices.netsuite.com"&gt;
      &lt;searchId&gt;WEBSERVICES_ABCD_12345-xxxxxxxxx&lt;/searchId&gt;
      &lt;pageIndex&gt;2&lt;/pageIndex&gt;
    &lt;/searchMoreWithId&gt;
  &lt;/soap:Body&gt;
&lt;/soap:Envelope&gt;</pre>
<strong>Response (Page-2 and onwards)</strong>
<pre class="lang:default decode:true  ">HTTP/1.1 200 OK
Date: Wed, 03 Oct 2018 18:40:33 GMT
Content-Length: 49266
Content-Type: text/xml; charset=utf-8
X-N-OperationId: c1e79336-63b7-4eb7-989e-5c3d24c56891
NS_RTIMER_COMPOSITE: 118xxxxxxxx:70617xxxxxxxxxxxxxxxxxxxxxD:80
Strict-Transport-Security: max-age=31536000
P3P: CP="CAO PSAa OUR BUS PUR"
Vary: User-Agent

&lt;?xml version="1.0" encoding="utf-8"?&gt;
&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;
  &lt;soapenv:Header&gt;
    &lt;platformMsgs:documentInfo xmlns:platformMsgs="urn:messages_2017_1.platform.webservices.netsuite.com"&gt;
      &lt;platformMsgs:nsId&gt;WEBSERVICES_ABCD_12345-xxxxxxxxx&lt;/platformMsgs:nsId&gt;
    &lt;/platformMsgs:documentInfo&gt;
  &lt;/soapenv:Header&gt;
  &lt;soapenv:Body&gt;
    &lt;searchMoreWithIdResponse xmlns="urn:messages_2017_1.platform.webservices.netsuite.com"&gt;
      &lt;platformCore:searchResult xmlns:platformCore="urn:core_2017_1.platform.webservices.netsuite.com"&gt;
        &lt;platformCore:status isSuccess="true" /&gt;
        &lt;platformCore:totalRecords&gt;193&lt;/platformCore:totalRecords&gt;
        &lt;platformCore:pageSize&gt;50&lt;/platformCore:pageSize&gt;
        &lt;platformCore:totalPages&gt;4&lt;/platformCore:totalPages&gt;
        &lt;platformCore:pageIndex&gt;2&lt;/platformCore:pageIndex&gt;
        &lt;platformCore:searchId&gt;WEBSERVICES_ABCD_12345-xxxxxxxxx&lt;/platformCore:searchId&gt;
        &lt;platformCore:recordList&gt;
          &lt;platformCore:record internalId="1" xsi:type="listAcct:Account" xmlns:listAcct="urn:accounting_2017_1.lists.webservices.netsuite.com"&gt;
            &lt;listAcct:acctType&gt;_bank&lt;/listAcct:acctType&gt;
            &lt;listAcct:acctNumber&gt;8000&lt;/listAcct:acctNumber&gt;
            &lt;listAcct:acctName&gt;Checking&lt;/listAcct:acctName&gt;
            &lt;listAcct:includeChildren&gt;false&lt;/listAcct:includeChildren&gt;
            &lt;listAcct:currency internalId="1"&gt;
              &lt;platformCore:name&gt;USD&lt;/platformCore:name&gt;
            &lt;/listAcct:currency&gt;
            &lt;listAcct:generalRate&gt;_current&lt;/listAcct:generalRate&gt;
            &lt;listAcct:parent internalId="246"&gt;
              &lt;platformCore:name&gt;xxxxxxxxxxxxxxxxxxx&lt;/platformCore:name&gt;
            &lt;/listAcct:parent&gt;
            &lt;listAcct:cashFlowRate&gt;_average&lt;/listAcct:cashFlowRate&gt;
            &lt;listAcct:description&gt;Checking&lt;/listAcct:description&gt;
            &lt;listAcct:isInactive&gt;false&lt;/listAcct:isInactive&gt;
            &lt;listAcct:inventory&gt;false&lt;/listAcct:inventory&gt;
            &lt;listAcct:eliminate&gt;false&lt;/listAcct:eliminate&gt;
            &lt;listAcct:revalue&gt;true&lt;/listAcct:revalue&gt;
          &lt;/platformCore:record&gt;
          &lt;platformCore:record internalId="2" xsi:type="listAcct:Account" xmlns:listAcct="urn:accounting_2017_1.lists.webservices.netsuite.com"&gt;
            &lt;listAcct:acctType&gt;_bank&lt;/listAcct:acctType&gt;
            &lt;listAcct:acctNumber&gt;8001&lt;/listAcct:acctNumber&gt;
            &lt;listAcct:acctName&gt;Savings&lt;/listAcct:acctName&gt;
            &lt;listAcct:includeChildren&gt;false&lt;/listAcct:includeChildren&gt;
            &lt;listAcct:currency internalId="1"&gt;
              &lt;platformCore:name&gt;USD&lt;/platformCore:name&gt;
            &lt;/listAcct:currency&gt;
            &lt;listAcct:generalRate&gt;_current&lt;/listAcct:generalRate&gt;
            &lt;listAcct:parent internalId="246"&gt;
              &lt;platformCore:name&gt;yyyyyyyyy&lt;/platformCore:name&gt;
            &lt;/listAcct:parent&gt;
            &lt;listAcct:cashFlowRate&gt;_average&lt;/listAcct:cashFlowRate&gt;
            &lt;listAcct:description&gt;Savings&lt;/listAcct:description&gt;
            &lt;listAcct:isInactive&gt;false&lt;/listAcct:isInactive&gt;
            &lt;listAcct:inventory&gt;false&lt;/listAcct:inventory&gt;
            &lt;listAcct:eliminate&gt;false&lt;/listAcct:eliminate&gt;
            &lt;listAcct:revalue&gt;true&lt;/listAcct:revalue&gt;
          &lt;/platformCore:record&gt;
          .........
          .........
          .........
          .........		  
        &lt;/platformCore:recordList&gt;
      &lt;/platformCore:searchResult&gt;
    &lt;/searchMoreWithIdResponse&gt;
  &lt;/soapenv:Body&gt;
&lt;/soapenv:Envelope&gt;</pre>
&nbsp;

&nbsp;</div>
<h2><span id="Getting_Started">Getting Started</span></h2>
<p>Now let’s check step by step instructions on <strong>how to load NetSuite data in Power BI</strong>. In this exercise we will focus on <a href="https://system.netsuite.com/app/help/helpcenter.nl?fid=section_N3519853.html" target="_blank" rel="noopener">calling search API</a> but you can call virtually any API using the same technique.</p>
<p>For detailed help on NetSuite SOAP API and other useful information check <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 <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 <strong>AccountSearch</strong> as below example. This name can be found <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> You can change it to something else. For now dont worry too much until we get to that point.</p>
<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">
<div class="crayon-main">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-5bb3ef8dce2fc034493941-1"></div>
</div>
<div class="crayon-pre">
<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>
</div>
</div>
<div></div>
</div>
<h3>Creating NetSuite ODBC Connection (Using ZappySys XML / SOAP Driver)</h3>
<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>
<p>&nbsp;</p>
<ol>
<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>
<li>Click <strong>Add</strong> and select <strong>ZappySys XML Driver</strong>
<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>
<li>Once driver UI is visible change default DSN name (e.g. change to <strong>ZS &#8211; NetSuite</strong>)</li>
<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 />
Replace <strong>$$$YOUR-APPLICATION-ID$$$</strong>  (2 times) with your own Application ID<br />
Replace <strong>$$$YOUR-ACCOUNT-ID$$$</strong> with your own Account ID<br />
Replace <strong>$$$YOUR-USER-ID$$$</strong>  with your own Login ID (e.g myuser@mycompany.com)<br />
Replace <strong>$$$YOUR-PASSWORD$$$</strong>  with your own Password<br />
Replace <strong>&lt;pageSize&gt;50&lt;/pageSize&gt;</strong>  with your own value. We suggest not to go more than 200 rows per page for better performance.<br />
Replace <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.<br />
<pre class="crayon-plain-tag">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;
&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;
  &lt;soap:Header&gt;
    &lt;applicationInfo xmlns="urn:messages_2017_1.platform.webservices.netsuite.com"&gt;
      &lt;applicationId&gt;$$$YOUR-APPLICATION-ID$$$&lt;/applicationId&gt;
    &lt;/applicationInfo&gt;
  &lt;/soap:Header&gt;
  &lt;soap:Body&gt;
    &lt;login xmlns="urn:messages_2017_1.platform.webservices.netsuite.com"&gt;
      &lt;passport&gt;
        &lt;email xmlns="urn:core_2017_1.platform.webservices.netsuite.com"&gt;[$userid$]&lt;/email&gt;
        &lt;password xmlns="urn:core_2017_1.platform.webservices.netsuite.com"&gt;[$password$]&lt;/password&gt;
        &lt;account xmlns="urn:core_2017_1.platform.webservices.netsuite.com"&gt;$$$YOUR-ACCOUNT-ID$$$&lt;/account&gt;
        &lt;role internalId="3" xmlns="urn:core_2017_1.platform.webservices.netsuite.com" /&gt;
      &lt;/passport&gt;
    &lt;/login&gt;
  &lt;/soap:Body&gt;
&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;
&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;
  &lt;soap:Header&gt;
    &lt;applicationInfo xmlns="urn:messages_2017_1.platform.webservices.netsuite.com"&gt;
      &lt;applicationId&gt;$$$YOUR-APPLICATION-ID$$$&lt;/applicationId&gt;
    &lt;/applicationInfo&gt;
    &lt;searchPreferences xmlns="urn:messages_2017_1.platform.webservices.netsuite.com"&gt;
      &lt;pageSize&gt;50&lt;/pageSize&gt;
    &lt;/searchPreferences&gt;
  &lt;/soap:Header&gt;
  &lt;soap:Body&gt;
[$tag$]
  &lt;/soap:Body&gt;
&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;
      &lt;searchRecord xmlns:q1="urn:accounting_2017_1.lists.webservices.netsuite.com" xsi:type="q1:AccountSearch"&gt;
        &lt;q1:basic&gt;
		&lt;!--
          &lt;description operator="doesNotContain" xmlns="urn:common_2017_1.platform.webservices.netsuite.com"&gt;
            &lt;searchValue xmlns="urn:core_2017_1.platform.webservices.netsuite.com"&gt;x&lt;/searchValue&gt;
          &lt;/description&gt;
          &lt;name operator="contains" xmlns="urn:common_2017_1.platform.webservices.netsuite.com"&gt;
            &lt;searchValue xmlns="urn:core_2017_1.platform.webservices.netsuite.com"&gt;a&lt;/searchValue&gt;
          &lt;/name&gt;
		 --&gt; 
        &lt;/q1:basic&gt;
      &lt;/searchRecord&gt;
    &lt;/search&gt;';NextPageBodyPart='    &lt;searchMoreWithId xmlns="urn:messages_2017_1.platform.webservices.netsuite.com"&gt;
      &lt;searchId&gt;[$pagetoken$]&lt;/searchId&gt;
      &lt;pageIndex&gt;[$pagenumber$]&lt;/pageIndex&gt;
    &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>
&nbsp;</p>
<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>
<li>After configuration your screen may look like below. You can also click on <strong>Advanced View</strong> (Radio button) to see some Advanced properties (e.g. Caching Properties such as <strong>CachingMode</strong>, <strong>CacheFileLocation</strong> and Advanced Pagination Properties such as <strong>PagingMaxPagesExpr</strong>, <strong>HasDifferentNextPageInfo</strong>, <strong>NextPageBodyPart</strong>, <strong>FirstPageBodyPart, EnablePageTokenForBody, PagePlaceholders</strong> )<br />
<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>
<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>
<li>Here is what it looks like on Advanced Tab.
<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; Ádvanced View (Pagination, Caching, Logging and other properties not found in Simple Mode)</p></div></li>
<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>
<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>
<li>Now let&#8217;s change our default query a bit  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 <strong>q1:ExpenseCategorySearch</strong>). We also removed some unwanted columns from preview by setting <strong>IncludeParentColumns=&#8217;false&#8217;</strong><br />
<pre class="crayon-plain-tag">SELECT * FROM $
WITH(
	FirstPageBodyPart='    &lt;search xmlns="urn:messages_2017_1.platform.webservices.netsuite.com"&gt;
      &lt;searchRecord xmlns:q1="urn:accounting_2017_1.lists.webservices.netsuite.com" xsi:type="q1:ExpenseCategorySearch"&gt;
        &lt;q1:basic&gt;
          &lt;description operator="doesNotContain" xmlns="urn:common_2017_1.platform.webservices.netsuite.com"&gt;
            &lt;searchValue xmlns="urn:core_2017_1.platform.webservices.netsuite.com"&gt;Some-String-Goes-Here&lt;/searchValue&gt;
          &lt;/description&gt;
          &lt;name operator="contains" xmlns="urn:common_2017_1.platform.webservices.netsuite.com"&gt;
            &lt;searchValue xmlns="urn:core_2017_1.platform.webservices.netsuite.com"&gt;Some-String-Goes-Here&lt;/searchValue&gt;
          &lt;/name&gt;
        &lt;/q1:basic&gt;
      &lt;/searchRecord&gt;
    &lt;/search&gt;',
    IncludeParentColumns='False'
)</pre>
We have commented SearchQuery portion to make it simple but you can learn more about how to write search query from here</p>
<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>
<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>
<pre class="crayon-plain-tag">SELECT * FROM $
WITH(
	FirstPageBodyPart='
    &lt;search xmlns="urn:messages_2017_1.platform.webservices.netsuite.com"&gt;
      &lt;searchRecord xsi:type="ns4:ContactSearch" xmlns:ns4="urn:relationships_2017_1.lists.webservices.netsuite.com"&gt;
        &lt;ns4:basic xsi:type="ns5:ContactSearchBasic" xmlns:ns5="urn:common_2017_1.platform.webservices.netsuite.com"&gt;
          &lt;ns5:email operator="contains" xsi:type="ns6:SearchStringField" xmlns:ns6="urn:core_2017_1.platform.webservices.netsuite.com"&gt;
            &lt;ns6:searchValue xsi:type="xsd:string"&gt;.com&lt;/ns6:searchValue&gt;
          &lt;/ns5:email&gt;
        &lt;/ns4:basic&gt;
        &lt;ns4:customerJoin xsi:type="ns7:CustomerSearchBasic" xmlns:ns7="urn:common_2017_1.platform.webservices.netsuite.com"&gt;
          &lt;ns7:entityId operator="contains" xsi:type="ns8:SearchStringField" xmlns:ns8="urn:core_2017_1.platform.webservices.netsuite.com"&gt;
            &lt;ns8:searchValue xsi:type="xsd:string"&gt;C&lt;/ns8:searchValue&gt;
          &lt;/ns7:entityId&gt;
        &lt;/ns4:customerJoin&gt;
      &lt;/searchRecord&gt;
    &lt;/search&gt;',
    IncludeParentColumns='False'
)</pre>
&nbsp;</p>
<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>
<li>Copy your Final Query you like to use to import NetSuite data in Power BI</li>
<li>Click OK to save DSN</li>
</ol>
<p>&nbsp;</p>
<h3>Import NetSuite data in Power BI</h3>
<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>
<ol>
<li>Open Power BI Desktop</li>
<li>Click on <strong>Get Data</strong> &gt; <strong>More Data&#8230;</strong> &gt; <strong>Other</strong> &gt; <strong>ODBC</strong>
<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>
<li>Select your <strong>ODBC DSN Source</strong> from the dropdown (Assuming you have created a ODBC Data Source using ZappySys XML Driver – See the previous Section)</li>
<li>Expand <strong>Advanced Options</strong> to enter custom Query.</li>
<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.<br />
<pre class="crayon-plain-tag">SELECT * FROM $
WITH(
	FirstPageBodyPart='    &lt;search xmlns="urn:messages_2017_1.platform.webservices.netsuite.com"&gt;
      &lt;searchRecord xmlns:q1="urn:accounting_2017_1.lists.webservices.netsuite.com" xsi:type="q1:AccountSearch"&gt;
        &lt;q1:basic&gt;
        &lt;!--
          &lt;description operator="doesNotContain" xmlns="urn:common_2017_1.platform.webservices.netsuite.com"&gt;
            &lt;searchValue xmlns="urn:core_2017_1.platform.webservices.netsuite.com"&gt;x&lt;/searchValue&gt;
          &lt;/description&gt;
          &lt;name operator="contains" xmlns="urn:common_2017_1.platform.webservices.netsuite.com"&gt;
            &lt;searchValue xmlns="urn:core_2017_1.platform.webservices.netsuite.com"&gt;a&lt;/searchValue&gt;
          &lt;/name&gt;
          --&gt;
        &lt;/q1:basic&gt;
      &lt;/searchRecord&gt;
    &lt;/search&gt;',
    IncludeParentColumns='False'
)</pre>
&nbsp;</p>
<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>
<li>Once you see data preview click OK to import.</li>
<li>After data import is done you can edit your dataset (e.g. remove unwanted columns)</li>
<li>You can also edit Source query after data is imported (See below)
<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>
<li>That&#8217;s it. You can now create your dashboards using NetSuite data. See below example.
<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>
</ol>
<p>&nbsp;</p>
<h2>How to debug Web Requests using Fiddler</h2>
<p>There will be a time you like to see RAW HTTP Requests generated by driver for NetSuite SOAP API.  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>
<h2>How to call other NetSuite SOAP API</h2>
<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 <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>
<h2>Conclusion</h2>
<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>
<p>The post <a href="https://zappysys.com/blog/read-netsuite-data-power-bi/">How to read NetSuite data in Power BI</a> appeared first on <a href="https://zappysys.com/blog">ZappySys Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Load SQL Server data to Workday using SSIS / SOAP API</title>
		<link>https://zappysys.com/blog/load-sql-server-data-workday-using-ssis-soap-api/</link>
		
		<dc:creator><![CDATA[ZappySys]]></dc:creator>
		<pubDate>Mon, 29 Jan 2018 23:47:59 +0000</pubDate>
				<category><![CDATA[REST API Integration]]></category>
		<category><![CDATA[SSIS Template Transform]]></category>
		<category><![CDATA[SSIS WEB API Destination]]></category>
		<category><![CDATA[SSIS XML Generator Transform]]></category>
		<category><![CDATA[SSIS XML Parser Transform]]></category>
		<category><![CDATA[SSIS XML Source (File / SOAP)]]></category>
		<category><![CDATA[soap]]></category>
		<category><![CDATA[SoapUI]]></category>
		<category><![CDATA[ssis]]></category>
		<category><![CDATA[workday]]></category>
		<category><![CDATA[xml]]></category>
		<guid isPermaLink="false">https://zappysys.com/blog/?p=2549</guid>

					<description><![CDATA[<p>Introduction In our previous article, we saw step-by-step approach to read data from workday using SSIS. In this article, we will focus on how to load SQL Server data to Workday (e.g. POST, Create, Update). We will use SSIS Web API Destination and the combination of other Transforms such as SSIS Template Transform and SSIS XML Generator [&#8230;]</p>
<p>The post <a href="https://zappysys.com/blog/load-sql-server-data-workday-using-ssis-soap-api/">Load SQL Server data to Workday using SSIS / SOAP API</a> appeared first on <a href="https://zappysys.com/blog">ZappySys Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2><span id="Introduction">Introduction</span></h2>
<p><a href="https://i1.wp.com/zappysys.com/blog/wp-content/uploads/2016/01/workday-api-integration.png?ssl=1"><img loading="lazy" decoding="async" class="alignleft wp-image-1665" src="https://i1.wp.com/zappysys.com/blog/wp-content/uploads/2016/01/workday-api-integration.png?resize=125%2C125&amp;ssl=1" sizes="(max-width: 125px) 100vw, 125px" srcset="https://i1.wp.com/zappysys.com/blog/wp-content/uploads/2016/01/workday-api-integration.png?w=195&amp;ssl=1 195w, https://i1.wp.com/zappysys.com/blog/wp-content/uploads/2016/01/workday-api-integration.png?resize=150%2C150&amp;ssl=1 150w" alt="" width="125" height="125" data-attachment-id="1665" data-permalink="https://zappysys.com/blog/get-data-from-workday-in-ssis-using-soap-or-rest-api/workday-api-integration/#main" data-orig-file="https://i1.wp.com/zappysys.com/blog/wp-content/uploads/2016/01/workday-api-integration.png?fit=195%2C195&amp;ssl=1" data-orig-size="195,195" 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="workday-api-integration" data-image-description="" data-medium-file="https://i1.wp.com/zappysys.com/blog/wp-content/uploads/2016/01/workday-api-integration.png?fit=195%2C195&amp;ssl=1" data-large-file="https://i1.wp.com/zappysys.com/blog/wp-content/uploads/2016/01/workday-api-integration.png?fit=195%2C195&amp;ssl=1" /></a>In our previous article, we saw step-by-step approach to <a href="https://zappysys.com/blog/get-data-from-workday-in-ssis-using-soap-or-rest-api/" target="_blank" rel="noopener">read data from workday using SSIS</a>. In this article, we will focus on how to load SQL Server data to Workday (e.g. POST, Create, Update). We will use <a href="https://zappysys.com/products/ssis-powerpack/ssis-web-api-destination-connector/" target="_blank" rel="noopener">SSIS Web API Destination</a> and the combination of other Transforms such as SSIS Template Transform and <a href="https://zappysys.com/products/ssis-powerpack/ssis-xml-generator-transform/" target="_blank" rel="noopener">SSIS XML Generator Transform</a> .</p>
<p>The main thing in this article how to create SOAP Request correctly inside your request. This article explains how to use Free tools like <a href="https://zappysys.com/blog/calling-soap-web-service-in-ssis-xml-source/" target="_blank" rel="noopener">SoapUI to create Workday Request</a>. Once you do that you can call virtually any Workday API using the same technique. If you need more help contact our <a href="https://zappysys.com/support/" target="_blank" rel="noopener">Support</a> and we will be happy to help you step by step.</p>
<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;"><b>Note:</b> Template Transform mentioned in this article is only available in <strong>v2.6.4 or Higher</strong></div></div>
<div class="content_block" id="custom_post_widget-2523"><h2><span id="Prerequisites">Prerequisites</span></h2>
Before we perform the steps listed in this article, you will need to make sure the following prerequisites are met:
<ol style="margin-left: 1.5em;">
 	<li><abbr title="SQL Server Integration Services">SSIS</abbr> designer installed. Sometimes it is referred to as <abbr title="Business Intelligence Development Studio">BIDS</abbr> or <abbr title="SQL Server Data Tools">SSDT</abbr> (<a href="https://docs.microsoft.com/en-us/sql/ssdt/download-sql-server-data-tools-ssdt" target="_blank" rel="noopener">download it from the Microsoft site</a>).</li>
 	<li>Basic knowledge of SSIS package development using <em>Microsoft SQL Server Integration Services</em>.</li>
 	<li>Make sure <span style="text-decoration: underline;"><a href="https://zappysys.com/products/ssis-powerpack/" target="_blank" rel="noopener">ZappySys SSIS PowerPack</a></span> is installed (<a href="https://zappysys.com/products/ssis-powerpack/download/" target="_blank" rel="noopener">download it</a>, if you haven't already).</li>
 	<li>(<em>Optional step</em>)<em>.</em> <a href="https://zappysys.zendesk.com/hc/en-us/articles/360035974593" target="_blank" rel="noopener">Read this article</a>, if you are planning to deploy packages to a server and schedule their execution later.</li>
</ol></div>
<h2>Step-By-Step : Import SQL Server data to Workday using SSIS</h2>
<p>Lets build our SSIS Package to load data from SQL Server or any Source (e.g. Oracle, DB2) to Workday using SOAP API calls. Using below approach you can Create new records or Update existing records in Workday. You can also delete records with same concept.</p>
<p>Basic steps outlined below.</p>
<ol>
<li>Fetch records from SQL Source and build XML Request for each Row (e.g. Create Account)</li>
<li>Build XML Request (SOAP Body) using Template Transform or  <a href="https://zappysys.com/products/ssis-powerpack/ssis-xml-generator-transform/" target="_blank" rel="noopener">SSIS XML Generator Transform</a>. If you have Array nodes (e.g. One to Many) then you have to use <a href="https://zappysys.com/products/ssis-powerpack/ssis-xml-generator-transform/" target="_blank" rel="noopener">SSIS XML Generator Transform</a> else use Template Transform for ease of use.</li>
<li>Pass input record (e.g. SOAP Body) to Web API destination to call Workday API call (CREATE, UPDATE, DELETE requests)</li>
<li>Parse XML Response (i.e. output) using <a href="https://zappysys.com/products/ssis-powerpack/ssis-xml-parser-transform/" target="_blank" rel="noopener">SSIS XML Parser Transform</a> or save raw XML to SQL Server database.</li>
<li>Redirect Bad rows or failed requests to log file for review</li>
</ol>
<p>Now let&#8217;s look at each step in detail</p>
<div class="su-note"  style="border-color:#e5de9d;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:#FFF8B7;border-color:#ffffff;color:#333333;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;"><strong>NOTE:</strong> If you are trying to get data from Workday <em><span style="text-decoration: underline;">report</span> </em>instead (your Workday admin created a report and gave you a link) then skip Soap UI part, use the URL with GET method and <em>Basic authentication</em> instead of SOAP WSS.</div></div>
<h3><span id="Obtain_Workday_API_URL">Obtain Workday API URL</span></h3>
<p>Once you have WSDL file, next step is craft correct URL for API service you like to call. The service name can be obtained from <a href="https://community.workday.com/sites/default/files/file-hosting/productionapi/index.html" target="_blank" rel="noopener">here</a> (Check service column)</p>
<p><strong>Syntax:</strong> <span id="crayon-5a6f9fdb25466286543213" class="crayon-syntax crayon-syntax-inline crayon-theme-vs2012 crayon-theme-vs2012-inline crayon-font-courier-new"><span class="crayon-pre crayon-code">https://&lt;workday host name&gt;.workday.com/ccx/service/&lt;tenant name&gt;/&lt;service-name&gt;</span></span><strong><br />
Example:</strong> <span id="crayon-5a6f9fdb25476699875511" class="crayon-syntax crayon-syntax-inline crayon-theme-vs2012 crayon-theme-vs2012-inline crayon-font-courier-new"><span class="crayon-pre crayon-code">https://MY-INSTANCE.workday.com/ccx/service/MY-TenantID/Human_Resources</span></span></p>
<h3><span id="Craft_SOAP_Body_XML_API_Request_using_SoapUI">Craft SOAP Body (XML API Request) using SoapUI</span></h3>
<p>Now its time to craft some SOAP Request. Check steps <a href="https://zappysys.com/blog/calling-soap-web-service-in-ssis-xml-source/">outlined here (Use SoapUI tool)</a> . Once you have Request Body XML you can change parameters as per your need.</p>
<p>Here is sample  SOAP XML Body for Get Employee call from Human_Resopurces service.</p>
<div id="crayon-5a6f9fdb2547e729542745" class="crayon-syntax crayon-theme-vs2012 crayon-font-courier-new crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover">
<div class="crayon-plain-wrap"><a href="https://i1.wp.com/zappysys.com/blog/wp-content/uploads/2016/01/create-workday-soap-request-using-soapui-api-xml-body.png?ssl=1"><img loading="lazy" decoding="async" class="size-full wp-image-2543" style="border: 0px; max-width: 100%; height: auto; box-shadow: rgba(0, 0, 0, 0.176) 0px 1px 2px;" src="https://i1.wp.com/zappysys.com/blog/wp-content/uploads/2016/01/create-workday-soap-request-using-soapui-api-xml-body.png?resize=720%2C442&amp;ssl=1" sizes="(max-width: 720px) 100vw, 720px" srcset="https://i1.wp.com/zappysys.com/blog/wp-content/uploads/2016/01/create-workday-soap-request-using-soapui-api-xml-body.png?w=735&amp;ssl=1 735w, https://i1.wp.com/zappysys.com/blog/wp-content/uploads/2016/01/create-workday-soap-request-using-soapui-api-xml-body.png?resize=300%2C184&amp;ssl=1 300w" alt="Create SOAP Request Body from WSDL (Using SoapUI tool)" width="702" height="431" data-attachment-id="2543" data-permalink="https://zappysys.com/blog/get-data-from-workday-in-ssis-using-soap-or-rest-api/create-workday-soap-request-using-soapui-api-xml-body/#main" data-orig-file="https://i1.wp.com/zappysys.com/blog/wp-content/uploads/2016/01/create-workday-soap-request-using-soapui-api-xml-body.png?fit=735%2C451&amp;ssl=1" data-orig-size="735,451" 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="create-workday-soap-request-using-soapui-api-xml-body" data-image-description="&lt;p&gt;Create SOAP Request Body from WSDL (Using SoapUI tool)&lt;/p&gt; " data-medium-file="https://i1.wp.com/zappysys.com/blog/wp-content/uploads/2016/01/create-workday-soap-request-using-soapui-api-xml-body.png?fit=300%2C184&amp;ssl=1" data-large-file="https://i1.wp.com/zappysys.com/blog/wp-content/uploads/2016/01/create-workday-soap-request-using-soapui-api-xml-body.png?fit=720%2C442&amp;ssl=1" /></a></div>
</div>
<div id="attachment_2543" class="wp-caption alignnone">
<p class="wp-caption-text">Create SOAP Request Body from WSDL (Using SoapUI tool)</p>
</div>
<h3><span id="Creating_SSIS_Connection_for_Workday_SOAP_API_call_using_WSS_Security">Creating SSIS Connection for Workday SOAP API call using WSS Security</span></h3>
<div id="custom_post_widget-2536" class="content_block">
<p>To create a new connection for workday perform the following steps.</p>
<ol>
<li>Two ways you can create HTTP connection for the workday service<br />
<strong>First approach:</strong> Right click in the connection managers panel and click “New Connection…” and Select <strong>ZS-HTTP</strong>connection from the connection type list and click OK.<br />
<strong>— OR —</strong><br />
<strong>Second approach:</strong> If you are already on <a href="https://zappysys.com/products/ssis-powerpack/ssis-xml-source/" target="_blank" rel="noopener">SSIS XML Source</a> or <a href="https://zappysys.com/products/ssis-powerpack/ssis-rest-api-web-service-task/" target="_blank" rel="noopener">SSIS REST API TASK</a> or <a href="https://zappysys.com/products/ssis-powerpack/ssis-web-api-destination-connector/" target="_blank" rel="noopener">SSIS Web API Destination</a> UI then click [New] next to the Connection Dropdown.</li>
<li>Once HTTP Connection UI is visible configure following way.
<ol>
<li>Enter API URL for Workday (Make sure you don’t enter WSDL URL <a href="https://community.workday.com/sites/default/files/file-hosting/productionapi/index.html" target="_blank" rel="noopener">found here</a> ). Your API URL will be something like below.<br />
<strong>Syntax:</strong> <pre class="crayon-plain-tag">https://&lt;workday host name&gt;.workday.com/ccx/service/&lt;tenant name&gt;/&lt;service-name&gt;</pre><strong><br />
Example:</strong> <pre class="crayon-plain-tag">https://wd1-impl-services1.workday.com/ccx/service/MyTenantID/Human_Resources</pre></li>
<li>Select credential type as SOAP WSS (This setting is only found in <strong>v2.6.4</strong> or Higher)</li>
<li>Enter your workday userid and password</li>
<li>For WSS password type setting you leave it default (Not set) or change to PasswordHash for more secure communication.</li>
<li>Click OK to save.</li>
</ol>
</li>
</ol>
<div id="attachment_2537" class="wp-caption alignnone">
<p><a href="https://i0.wp.com/zappysys.com/blog/wp-content/uploads/2018/01/ssis-soap-webservice-connection-workday-api-wss-security.png?ssl=1"><img loading="lazy" decoding="async" class="size-full wp-image-2537" style="border: 0px; max-width: 100%; height: auto; box-shadow: rgba(0, 0, 0, 0.176) 0px 1px 2px;" src="https://i0.wp.com/zappysys.com/blog/wp-content/uploads/2018/01/ssis-soap-webservice-connection-workday-api-wss-security.png?resize=720%2C584&amp;ssl=1" sizes="(max-width: 720px) 100vw, 720px" srcset="https://i0.wp.com/zappysys.com/blog/wp-content/uploads/2018/01/ssis-soap-webservice-connection-workday-api-wss-security.png?w=783&amp;ssl=1 783w, https://i0.wp.com/zappysys.com/blog/wp-content/uploads/2018/01/ssis-soap-webservice-connection-workday-api-wss-security.png?resize=300%2C243&amp;ssl=1 300w, https://i0.wp.com/zappysys.com/blog/wp-content/uploads/2018/01/ssis-soap-webservice-connection-workday-api-wss-security.png?resize=768%2C623&amp;ssl=1 768w" alt="SSIS Workday Integration - Create New SAOP Service Connection for Workday API Service (SOAP WSS)" width="702" height="569" data-attachment-id="2537" data-permalink="https://zappysys.com/blog/content_block/workday-ssis-connection-setup/ssis-soap-webservice-connection-workday-api-wss-security/#main" data-orig-file="https://i0.wp.com/zappysys.com/blog/wp-content/uploads/2018/01/ssis-soap-webservice-connection-workday-api-wss-security.png?fit=783%2C635&amp;ssl=1" data-orig-size="783,635" 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="ssis-soap-webservice-connection-workday-api-wss-security" data-image-description="&lt;p&gt;SSIS Workday Integration – Create New SAOP Service Connection for Workday API Service (SOAP WSS)&lt;/p&gt; " data-medium-file="https://i0.wp.com/zappysys.com/blog/wp-content/uploads/2018/01/ssis-soap-webservice-connection-workday-api-wss-security.png?fit=300%2C243&amp;ssl=1" data-large-file="https://i0.wp.com/zappysys.com/blog/wp-content/uploads/2018/01/ssis-soap-webservice-connection-workday-api-wss-security.png?fit=720%2C584&amp;ssl=1" /></a></p>
<p class="wp-caption-text">SSIS Workday Integration – Create New SAOP Service Connection for Workday API Service (SOAP WSS)</p>
</div>
<p>&nbsp;</p>
</div>
<h3><span id="Creating_SSIS_Connection_for_Workday_SOAP_API_call_using_WSS_Security">Loading SQL Server data to Workday using SSIS</span></h3>
<p>Let&#8217;s look at the real-world scenario. You have Accounts table stored in SQL Server and you like to create same accounts in Workday by calling appropriate API calls.</p>
<ol>
<li>Drag Data flow task from SSIS Toolbox. Double click to edit.</li>
<li>Drag OLEDB Source configure to read SQL Table (e.g. Accounts)</li>
<li>Drag ZS Template Transform from the toolbox. Connect OLEDB Source to Template Transform. If you need flexible XML Generation then use <a href="https://zappysys.com/products/ssis-powerpack/ssis-xml-generator-transform/" target="_blank" rel="noopener">XML Generator Transform</a> but it may require some learning curve so for simplicity we are skipping that from this article.</li>
<li>Enter your SOAP request in the template text (like below) you like to call (This is obtained from the previous section &#8211; using <a href="https://zappysys.com/blog/calling-soap-web-service-in-ssis-xml-source/">tool like SoapUI</a>)<br />
<strong>For Example:</strong> To create a new account you can use enter like below. Replace xxxxxxxxxx with Columns placeholder.<br />
To insert Column name as Placeholder click &lt;&lt;Insert Placeholder&gt;&gt; and then Select [Columns] node. Template Transform outputs column name <strong>TemplateOutput</strong>. You can use this as Body to feed next step (i.e. Call Workday API using Web API Destination )When you insert placeholder to make sure you use XML Encoded Columns if you expecting a Long text or special characters part of your data.<br />
Syntax for encoded value is   <pre class="crayon-plain-tag">&lt;%CustomerName,FUN_XMLENC%&gt;</pre>  . You don&#8217;t need <strong>FUN_XMLENC</strong> for numeric fields. For normal placeholder without encoding use just name with column placeholder indicators e.g.  <pre class="crayon-plain-tag">&lt;%Amount%&gt;</pre>
<pre class="crayon-plain-tag">&lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bsvc="urn:com.workday/bsvc"&gt;
   &lt;soapenv:Header/&gt;
   &lt;soapenv:Body&gt;
      &lt;bsvc:Workday_Account_for_Worker_Add&gt;
         &lt;bsvc:Worker_Reference&gt;
            &lt;!--You have a CHOICE of the next 2 items at this level--&gt;
            &lt;bsvc:Employee_Reference&gt;
               &lt;bsvc:Integration_ID_Reference&gt;
                  &lt;bsvc:ID&gt;xxxxxxxxxx&lt;/bsvc:ID&gt;
               &lt;/bsvc:Integration_ID_Reference&gt;
            &lt;/bsvc:Employee_Reference&gt;
            &lt;bsvc:Contingent_Worker_Reference&gt;
               &lt;bsvc:Integration_ID_Reference&gt;
                  &lt;bsvc:ID&gt;xxxxxxxxxxxx&lt;/bsvc:ID&gt;
               &lt;/bsvc:Integration_ID_Reference&gt;
            &lt;/bsvc:Contingent_Worker_Reference&gt;
         &lt;/bsvc:Worker_Reference&gt;
         &lt;bsvc:Workday_Account_for_Worker_Data&gt;
            &lt;!--type: string--&gt;
            &lt;bsvc:User_Name&gt;xxxxxxxxxxxxxx&lt;/bsvc:User_Name&gt;
         &lt;/bsvc:Workday_Account_for_Worker_Data&gt;
      &lt;/bsvc:Workday_Account_for_Worker_Add&gt;
   &lt;/soapenv:Body&gt;
&lt;/soapenv:Envelope&gt;</pre>
<div id="attachment_2550" style="width: 1170px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2018/01/ssis-workday-write-data-create-soap-request-xml-template.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-2550" class="size-full wp-image-2550" src="https://zappysys.com/blog/wp-content/uploads/2018/01/ssis-workday-write-data-create-soap-request-xml-template.png" alt="Template Transform - Create Workday SOAP Request - Create new records using SSIS" width="1160" height="630" srcset="https://zappysys.com/blog/wp-content/uploads/2018/01/ssis-workday-write-data-create-soap-request-xml-template.png 1160w, https://zappysys.com/blog/wp-content/uploads/2018/01/ssis-workday-write-data-create-soap-request-xml-template-300x163.png 300w, https://zappysys.com/blog/wp-content/uploads/2018/01/ssis-workday-write-data-create-soap-request-xml-template-768x417.png 768w, https://zappysys.com/blog/wp-content/uploads/2018/01/ssis-workday-write-data-create-soap-request-xml-template-1024x556.png 1024w" sizes="(max-width: 1160px) 100vw, 1160px" /></a><p id="caption-attachment-2550" class="wp-caption-text">Template Transform &#8211;<br />Create Workday SOAP Request &#8211; Create new records using SSIS</p></div></li>
<li>Drag <a href="https://zappysys.com/products/ssis-powerpack/ssis-web-api-destination-connector/" target="_blank" rel="noopener">ZS Web API Destination</a> from SSIS Toolbox. Connect Template Transform to Web API Destination.</li>
<li>Configure Web API Destination as below (See we used same HTTP connection created in the previous section)</li>
<li>Select HTTP Connection</li>
<li>Select Input Column for Body (select <strong>TemplateOutput</strong>)</li>
<li>Select Body Content Type as <strong>XML (text/xml;charset=UTF-8)</strong></li>
<li>Click Raw Edit above Headers grid. Enter following text (We just need one header)<br />
<pre class="crayon-plain-tag">SOAPAction: ""</pre>
<div id="attachment_2551" style="width: 1116px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2018/01/ssis-workday-write-data-loading-sql-server-data-using-xml-soap-request.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-2551" class="size-full wp-image-2551" src="https://zappysys.com/blog/wp-content/uploads/2018/01/ssis-workday-write-data-loading-sql-server-data-using-xml-soap-request.png" alt="SSIS Web API Destination - Loading SQL Server data to Workday (SOAP Call - Create, Insert, Update, Delete Records)" width="1106" height="693" srcset="https://zappysys.com/blog/wp-content/uploads/2018/01/ssis-workday-write-data-loading-sql-server-data-using-xml-soap-request.png 1106w, https://zappysys.com/blog/wp-content/uploads/2018/01/ssis-workday-write-data-loading-sql-server-data-using-xml-soap-request-300x188.png 300w, https://zappysys.com/blog/wp-content/uploads/2018/01/ssis-workday-write-data-loading-sql-server-data-using-xml-soap-request-768x481.png 768w, https://zappysys.com/blog/wp-content/uploads/2018/01/ssis-workday-write-data-loading-sql-server-data-using-xml-soap-request-1024x642.png 1024w, https://zappysys.com/blog/wp-content/uploads/2018/01/ssis-workday-write-data-loading-sql-server-data-using-xml-soap-request-436x272.png 436w" sizes="(max-width: 1106px) 100vw, 1106px" /></a><p id="caption-attachment-2551" class="wp-caption-text">SSIS Web API Destination &#8211;<br />Loading SQL Server data to Workday (SOAP Call &#8211; Create, Insert, Update, Delete Records)</p></div></li>
<li>Now you can connect Web API Destination Output (Blue Arrow to Either XML Parser or some other Destination). Web API destination gives you a response in Raw XML Format. This article explains <a href="https://zappysys.com/blog/load-data-from-sql-server-to-elasticsearch-using-ssis/#What_if_I_want_more_After_upserting_data_useWeb_API_Destinationfurther" target="_blank" rel="noopener">how to use JSON or XML Parser to parse API response</a> coming from Web API destination.</li>
</ol>
<h2>Video Tutorial (See Part#4) &#8211; Create XML and POST data to SOAP Web Service or REST API</h2>
<p>Now lets look at examples of creating XML from multiple data sources and POST XML request to SOAP Web Service URL or any other XML Based REST API URL. This video has 5 parts to cover full length tutorial but if you want to fast forward to see XML Generator Transform and Web API Destination then see part#4.<br />
<a href="https://zappysys.com/blog/load-sql-server-data-workday-using-ssis-soap-api/"><img decoding="async" src="https://zappysys.com/blog/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FTjTexGzBF5g%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></p>
<h2>Sending complex SOAP Request (Nested Parent-Child Array)</h2>
<p>If you have to call more complex SOAP request which requires Parent-child structure (Nested Array) then you cant use Template Transform. In that case, check <a href="https://zappysys.zendesk.com/hc/en-us/articles/360002575234-How-to-generate-Workday-SOAP-Request-XML-in-SSIS" target="_blank" rel="noopener">this article</a> for real-world example.</p>
<div id="attachment_3167" style="width: 674px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2018/01/ssis-create-soap-request-nested-xml-multiple-inputs-post-data.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-3167" class="size-full wp-image-3167" src="https://zappysys.com/blog/wp-content/uploads/2018/01/ssis-create-soap-request-nested-xml-multiple-inputs-post-data.png" alt="Create nested XML for SOAP Request - Multiple inputs (POST data to API using SSIS Web API Destination)" width="664" height="520" srcset="https://zappysys.com/blog/wp-content/uploads/2018/01/ssis-create-soap-request-nested-xml-multiple-inputs-post-data.png 664w, https://zappysys.com/blog/wp-content/uploads/2018/01/ssis-create-soap-request-nested-xml-multiple-inputs-post-data-300x235.png 300w" sizes="(max-width: 664px) 100vw, 664px" /></a><p id="caption-attachment-3167" class="wp-caption-text">Create nested XML for SOAP Request &#8211; Multiple inputs (POST data to API using SSIS Web API Destination)</p></div>
<h2>Extract single XML node from SOAP Response</h2>
<p>There will be a time when you need to extract just one value out of your response and save into SSIS variable / use it later on. If that&#8217;s the case then <a href="https://zappysys.com/blog/ssis-extract-single-xml-node-using-xpath-soap-response/" target="_blank" rel="noopener">refer to this article</a>.</p>
<p>&nbsp;</p>
<h2>Conclusion</h2>
<p>In this article we have learned how to load data from SQL Server to Workday using SSIS ( drag and drop approach without coding). Combination of few ZappySys Components (e.g. Web API Destination, XML Generator ) makes it super simple to call any Web API to load data from one system to API endpoint. <a href="https://zappysys.com/products/ssis-powerpack/">Download SSIS PowerPack</a> to try many other automation scenarios not discussed in this article.</p>
<p>The post <a href="https://zappysys.com/blog/load-sql-server-data-workday-using-ssis-soap-api/">Load SQL Server data to Workday using SSIS / SOAP API</a> appeared first on <a href="https://zappysys.com/blog">ZappySys Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Calling SOAP Web Service in SSIS (XML Source)</title>
		<link>https://zappysys.com/blog/calling-soap-web-service-in-ssis-xml-source/</link>
					<comments>https://zappysys.com/blog/calling-soap-web-service-in-ssis-xml-source/#comments</comments>
		
		<dc:creator><![CDATA[ZappySys]]></dc:creator>
		<pubDate>Thu, 23 Jun 2016 13:51:11 +0000</pubDate>
				<category><![CDATA[SSIS XML Source (File / SOAP)]]></category>
		<category><![CDATA[soap]]></category>
		<category><![CDATA[SoapUI]]></category>
		<category><![CDATA[SSIS PowerPack]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xml source]]></category>
		<guid isPermaLink="false">http://zappysys.com/blog/?p=620</guid>

					<description><![CDATA[<p>Introduction In this article, you will learn how to call SOAP Web Service in SSIS. We will use drag and drop approach to consume SOAP Webservice using SSIS XML Source Connector. This same XML Connector can be used to consume data from local XML Files (wild card allowed e.g. *.xml) or you can consume XML stored in [&#8230;]</p>
<p>The post <a href="https://zappysys.com/blog/calling-soap-web-service-in-ssis-xml-source/">Calling SOAP Web Service in SSIS (XML Source)</a> appeared first on <a href="https://zappysys.com/blog">ZappySys Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Introduction</h2>
<p>In this article, you will learn <em>how to call SOAP Web Service in SSIS</em>. We will use drag and drop approach to consume SOAP Webservice using <a href="//zappysys.com/products/ssis-powerpack/ssis-xml-source/" target="_blank" rel="noopener">SSIS XML Source Connector</a>. This same XML Connector can be used to consume data from local XML Files (wild card allowed e.g. *.xml) or you can consume XML stored in SSIS Variable. Great way to Parse XML Stored inside the database.</p>
<p>In this article, we will consume data from SSRS <em>SOAP web service and load into SQL Server</em>. You can apply a similar technique to call any web service.</p>
<h3>Video Tutorial &#8211; Load SOAP Web Service data into SQL</h3>
<a href="https://zappysys.com/blog/calling-soap-web-service-in-ssis-xml-source/"><img decoding="async" src="https://zappysys.com/blog/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2Fd_x5bgGjg0Y%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></p>
<h3>Video Tutorial &#8211; Create XML and POST data to SOAP Web Service or REST API</h3>
<p>Now lets look at examples of creating XML from multiple data sources and POST XML request to SOAP Web Service URL or any other XML Based REST API URL.<br />
<a href="https://zappysys.com/blog/calling-soap-web-service-in-ssis-xml-source/"><img decoding="async" src="https://zappysys.com/blog/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FTjTexGzBF5g%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></p>
<h3>What is SOAP Web Service?</h3>
<p>If you are new to SOAP Web Service sometimes referred as XML Web Service then please read some concept about SOAP Web service standard <a href="https://msdn.microsoft.com/en-us/library/ms996507.aspx?f=255&amp;MSPPError=-2147217396" target="_blank" rel="noopener">from this link</a></p>
<p>There are two important aspects in SOAP Web service.</p>
<ol>
<li>Getting WSDL file or URL</li>
<li>Knowing exact Web Service URL</li>
</ol>
<h3>What is WSDL</h3>
<p>In very simple term WSDL (often pronounced as whiz-dull) is nothing but a document which describes Service metadata (e.g. Functions you can call, Request parameters, response structure etc). Some service simply give you WSDL as xml file you can download on local machine and then analyze or sometimes you may get direct URL (e.g. http://api.mycompany.com/hr-soap-service/?wsdl )</p>
<h3>What is Service URL</h3>
<p>Service URL is actual API URL you can call to get data. When you make a request to SOAP service url make sure following things.</p>
<ol>
<li>Use correct service URL (Its not same as WSDL url). If you are not sure about service URL contact API vendor or refer API documentation.</li>
<li>Each service call you have to supply function you want to call. This can be done in 3 different ways.
<ol>
<li>Pass via SOAPAction HTTP Header</li>
<li>Pass via Url parameter or Url Path ( http://myserver/service/function1  &#8212; http://myserver/service/?method=function1 )</li>
<li>Pass via Request BODY</li>
</ol>
</li>
<li>Find out how to pass credentials. It can be done via Basic Authorization or WSS Security Header in the Request body. <a href="//zappysys.com/blog/get-data-from-workday-in-ssis-using-soap-or-rest-api/" target="_blank" rel="noopener">Check this link to learn more</a></li>
</ol>
<h2>How to call SOAP API in SSIS (Summary)</h2>
<p>To call SOAP API in SSIS you have to perform the following steps at a high level. Detailed steps are described in the next section</p>
<ol>
<li>Download and Install <a href="https://www.soapui.org/downloads/latest-release.html" target="_blank" rel="noopener">SoapUI</a> (It&#8217;s a Free tool to test SOAP / REST Services)</li>
<li>Import WSDL file or URL for your Service in SoapUI for testing</li>
<li>Add credentials for SOAP Web service (Basic Auth or WSS)</li>
<li>Create SOAP Request XML (Edit default parameters) and <strong>Click Play Button </strong>to test your request
<div id="attachment_2543" style="width: 745px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2016/01/create-workday-soap-request-using-soapui-api-xml-body.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-2543" class="size-full wp-image-2543" src="https://zappysys.com/blog/wp-content/uploads/2016/01/create-workday-soap-request-using-soapui-api-xml-body.png" alt="Create SOAP Request Body from WSDL (Using SoapUI tool)" width="735" height="451" srcset="https://zappysys.com/blog/wp-content/uploads/2016/01/create-workday-soap-request-using-soapui-api-xml-body.png 735w, https://zappysys.com/blog/wp-content/uploads/2016/01/create-workday-soap-request-using-soapui-api-xml-body-300x184.png 300w" sizes="(max-width: 735px) 100vw, 735px" /></a><p id="caption-attachment-2543" class="wp-caption-text">Create SOAP Request Body from WSDL (Using SoapUI tool)</p></div></li>
<li>If your test works in SoapUI then you ready to move to SSIS part</li>
<li>Copy Service URL, Request Body and Headers to SSIS (For Header see <strong>Raw</strong> Tab on SoapUI &gt; Copy two lines <strong>SOAPAction:*****</strong> and  <strong>Content-Type:******</strong>)
<div id="attachment_7355" style="width: 638px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2016/06/soapui-get-contenttype-soapaction-raw-tab.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-7355" class="size-full wp-image-7355" src="https://zappysys.com/blog/wp-content/uploads/2016/06/soapui-get-contenttype-soapaction-raw-tab.png" alt="Get ContentType and SOAPAction Headers from SoapUI Raw tab" width="628" height="457" srcset="https://zappysys.com/blog/wp-content/uploads/2016/06/soapui-get-contenttype-soapaction-raw-tab.png 628w, https://zappysys.com/blog/wp-content/uploads/2016/06/soapui-get-contenttype-soapaction-raw-tab-300x218.png 300w" sizes="(max-width: 628px) 100vw, 628px" /></a><p id="caption-attachment-7355" class="wp-caption-text">Get ContentType and SOAPAction Headers from SoapUI Raw tab</p></div></li>
<li>Use <a href="https://zappysys.com/products/ssis-powerpack/ssis-web-api-destination-connector/" target="_blank" rel="noopener">SSIS REST API Task</a> or <a href="//zappysys.com/products/ssis-powerpack/ssis-xml-source/" target="_blank" rel="noopener">SSIS XML Source</a> or <a href="https://zappysys.com/products/ssis-powerpack/ssis-web-api-destination-connector/" target="_blank" rel="noopener">SSIS Web API Destination</a> to call SOAP API (Use correct API URL, Body and Headers)</li>
</ol>
<p>See the next section for detailed steps for calling SOAP web service in SSIS.</p>
<h2>Step-By-Step : Calling SOAP Web Service in SSIS</h2>
<p>In this section you will learn how to call SOAP Web service in SSIS without any type of coding. In few clicks you will be able to <em>load data from XML SOAP Service to SQL Server</em>. For demo purpose we will call SSRS Web service but you can pick any available SOAP Service.</p>
<ol>
<li>Download and Install <a href="//zappysys.com/products/ssis-powerpack/" target="_blank" rel="noopener">SSIS PowerPack FREE Trial</a> from <a href="//zappysys.com/products/ssis-powerpack/download/" target="_blank" rel="noopener">this link</a></li>
<li>Now <a href="https://www.soapui.org/downloads/latest-release.html" target="_blank" rel="noopener">Download SoapUI</a> (Its popular free third-party tool by <strong>other vendor</strong>). SoapUI can help you to generate XML Request BODY easily by using WSDL file. You can also test your service by supplying parameters.</li>
<li>Now find out your SOAP Service WSDL URL. It can be URL or locally stored XML file. WSDL is standard to describes SOAP Service (e.g. Available functions, request/response format). For SSRS WSDL is located usually at below location. Sometime WSDL URL is not correctly downloaded in SoapUI in that case use web browser to download WSDL and save to local disk.<br />
<pre class="crayon-plain-tag">http://YourReportServer/reportserver/ReportService2010.asmx?wsdl</pre>
</li>
<li>Now launch SoapUI. Click on File menu and Select New SOAP Project</li>
<li>Enter your WSDL file path or URL</li>
<li>Click OK to create Project. This will create some dummy requests for you. If you want to see all available parameter in your Request you can create New Request by right click on Method node and select New Request. When prompted to create optional parameters then click yes.
<div id="attachment_641" style="width: 615px" class="wp-caption alignnone"><a href="//zappysys.com/blog/wp-content/uploads/2016/06/create-new-project-soapui.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-641" class="size-full wp-image-641" src="//zappysys.com/blog/wp-content/uploads/2016/06/create-new-project-soapui.png" alt="Create new SoapUI project to generate / test Soap Requests" width="605" height="428" srcset="https://zappysys.com/blog/wp-content/uploads/2016/06/create-new-project-soapui.png 605w, https://zappysys.com/blog/wp-content/uploads/2016/06/create-new-project-soapui-300x212.png 300w" sizes="(max-width: 605px) 100vw, 605px" /></a><p id="caption-attachment-641" class="wp-caption-text">Create new SoapUI project to generate / test Soap Requests</p></div></li>
<li>Click on Request node as below and it will show you XML code for your SOAP request. You can edit parameters as needed. We will use this code in our XML Source to build SOAP Request. Some time your SOAP Service may require UserID/Password in SOAP Body or via Authorization Header <a href="https://www.soapui.org/soap-and-wsdl/authenticating-soap-requests.html" target="_blank" rel="noopener">like this one</a>. If you passing credentials Authorization header then you can use ZS-HTTP connection (on XML Source UI check Use Credentials option and create new connection)
<div id="attachment_642" style="width: 783px" class="wp-caption alignnone"><a href="//zappysys.com/blog/wp-content/uploads/2016/06/soap-generate-soap-xml-request-for-testing.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-642" class="size-full wp-image-642" src="//zappysys.com/blog/wp-content/uploads/2016/06/soap-generate-soap-xml-request-for-testing.png" alt="SOAP Request XML" width="773" height="372" srcset="https://zappysys.com/blog/wp-content/uploads/2016/06/soap-generate-soap-xml-request-for-testing.png 773w, https://zappysys.com/blog/wp-content/uploads/2016/06/soap-generate-soap-xml-request-for-testing-300x144.png 300w" sizes="(max-width: 773px) 100vw, 773px" /></a><p id="caption-attachment-642" class="wp-caption-text">SOAP Request XML</p></div></li>
<li>Create new SSIS Project and add new package.</li>
<li>Open Package. Go to control flow. Drag and drop Data Flow task from SSIS Toolbox</li>
<li>Go to Data flow designer. Drag and drop ZS XML Source Component</li>
<li>While making SOAP Request you have to configure following items in your XML Source.
<ul>
<li>URL</li>
<li>Request Method (e.g. POST)</li>
<li>Headers</li>
<li>Request Body (for request SOAP XML)</li>
</ul>
</li>
<li>Double click XML Source to configure it.
<ol>
<li>Set webservice URL</li>
<li>Set request method to POST</li>
<li>In the headers grid click Raw Edit to add 2 more headers as below.<br />
<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;">If you not sure about SOAP Action then find out from SoapUI &gt; <strong>Raw Tab</strong> of Request Panel. Headers are only generated if you click the green Play button in SoapUI. Copy following two headers from SoapUI Raw tab and paste under SSIS XML Source &gt; Headers Grid &gt; Raw Edit.  </div></div>
<pre class="crayon-plain-tag">Content-Type: text/xml;charset=UTF-8
SOAPAction: "http://some-url-of-your-api-call"</pre>
SOAPAction URL is also listed under the following place in SoapUI.</p>
<div id="attachment_643" style="width: 629px" class="wp-caption alignnone"><a href="//zappysys.com/blog/wp-content/uploads/2016/06/find-soapaction-header-soap-request-call.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-643" class="size-full wp-image-643" src="//zappysys.com/blog/wp-content/uploads/2016/06/find-soapaction-header-soap-request-call.png" alt="How to find SOAPAction Header value using SoapUI tool" width="619" height="310" srcset="https://zappysys.com/blog/wp-content/uploads/2016/06/find-soapaction-header-soap-request-call.png 619w, https://zappysys.com/blog/wp-content/uploads/2016/06/find-soapaction-header-soap-request-call-300x150.png 300w" sizes="(max-width: 619px) 100vw, 619px" /></a><p id="caption-attachment-643" class="wp-caption-text">How to find SOAPAction Header value using SoapUI tool</p></div></li>
</ol>
</li>
<li>Now click on Edit option next to Body Textbox. You can Copy sample Request XML generated in SoapUI and paste in Request Data (See below screenshot). You have to make sure to include all required fields in your XML Request (You may create new XML request in SoapUI with include Optional fields Turned ON to see all parameters).</li>
<li>XML Source supports using Placeholders in request URL, body and headers so its great way to make things dynamic. If you have need to use placeholders then you can use {Insert Variable} option like below screenshot and add variable anywhere in the text.</li>
<li>You can also edit Filter to control how data is returned. If you have Nested nodes in XML response you can select data node which you care about. Click select Filter button to navigate through hierarchy.
<div id="attachment_649" style="width: 632px" class="wp-caption alignnone"><a href="//zappysys.com/blog/wp-content/uploads/2016/06/select-xml-response-filter.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-649" class="size-full wp-image-649" src="//zappysys.com/blog/wp-content/uploads/2016/06/select-xml-response-filter.png" alt="Filter SOAP Web Service - XML response data" width="622" height="477" srcset="https://zappysys.com/blog/wp-content/uploads/2016/06/select-xml-response-filter.png 622w, https://zappysys.com/blog/wp-content/uploads/2016/06/select-xml-response-filter-300x230.png 300w" sizes="(max-width: 622px) 100vw, 622px" /></a><p id="caption-attachment-649" class="wp-caption-text">Filter SOAP Web Service &#8211; XML response data</p></div></li>
<li>Un-check include parent option if you don&#8217;t care about getting parent attributes.</li>
<li>Your final UI may look like below after setting Url, Method, Body and Headers.
<div id="attachment_644" style="width: 710px" class="wp-caption alignnone"><a href="//zappysys.com/blog/wp-content/uploads/2016/06/calling-soap-web-service-api-in-ssis.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-644" class="wp-image-644" src="//zappysys.com/blog/wp-content/uploads/2016/06/calling-soap-web-service-api-in-ssis.png" alt="Calling SOAP Web Service in SSIS using XML Source Connector" width="700" height="495" srcset="https://zappysys.com/blog/wp-content/uploads/2016/06/calling-soap-web-service-api-in-ssis.png 903w, https://zappysys.com/blog/wp-content/uploads/2016/06/calling-soap-web-service-api-in-ssis-300x212.png 300w" sizes="(max-width: 700px) 100vw, 700px" /></a><p id="caption-attachment-644" class="wp-caption-text">Calling SOAP Web Service in SSIS using XML Source Connector</p></div></li>
<li> On Array handling tab you can type all the element names you know for sure that going to have one or more records. For example if your response looks like below you can enter <strong>a:row</strong> in the possible array fields on Array Handling tab. That way if you have just one record rather than multiple records Filter expression like this wont fail ( <strong>$.a:response.a:data.a:row[*]</strong> ) .<br />
<pre class="crayon-plain-tag">&lt;a:response&gt;
	&lt;a:data&gt;
		&lt;a:row&gt;....&lt;/a:row&gt;
		&lt;a:row&gt;....&lt;/a:row&gt;
	&lt;/a:data&gt;
&lt;/a:response&gt;</pre>
&nbsp;</li>
<li>Now once all settings entered. Click Preview.
<div id="attachment_646" style="width: 742px" class="wp-caption alignnone"><a href="//zappysys.com/blog/wp-content/uploads/2016/06/filter-preview-soap-web-service-response-in-table-format.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-646" class="size-full wp-image-646" src="//zappysys.com/blog/wp-content/uploads/2016/06/filter-preview-soap-web-service-response-in-table-format.png" alt="Set Filter and Preview SOAP Web Service Response in Table Format " width="732" height="293" srcset="https://zappysys.com/blog/wp-content/uploads/2016/06/filter-preview-soap-web-service-response-in-table-format.png 732w, https://zappysys.com/blog/wp-content/uploads/2016/06/filter-preview-soap-web-service-response-in-table-format-300x120.png 300w" sizes="(max-width: 732px) 100vw, 732px" /></a><p id="caption-attachment-646" class="wp-caption-text">Set Filter and Preview SOAP Web Service Response in Table Format</p></div></li>
</ol>
<h2>Creating SOAP Request with Optional Parameters</h2>
<p>Sometimes if you create SOAP request you may not see optional parameters. Here is how you can create SOAP Request with optional parameters.</p>
<div id="attachment_2812" style="width: 817px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2016/06/create-soap-request-with-optional-parameters-soapui.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-2812" class="size-full wp-image-2812" src="https://zappysys.com/blog/wp-content/uploads/2016/06/create-soap-request-with-optional-parameters-soapui.png" alt="Create SOAP Request XML (With Optional Parameters)" width="807" height="315" srcset="https://zappysys.com/blog/wp-content/uploads/2016/06/create-soap-request-with-optional-parameters-soapui.png 807w, https://zappysys.com/blog/wp-content/uploads/2016/06/create-soap-request-with-optional-parameters-soapui-300x117.png 300w, https://zappysys.com/blog/wp-content/uploads/2016/06/create-soap-request-with-optional-parameters-soapui-768x300.png 768w" sizes="(max-width: 807px) 100vw, 807px" /></a><p id="caption-attachment-2812" class="wp-caption-text">Create SOAP Request XML (With Optional Parameters)</p></div>
<h2>Load XML Data into SQL Server</h2>
<p>Once you configure XML source now you can connect source to target such as SQL Server, MySQL, Oracle, Flat File etc. On target you can map various source columns to SQL Server Table columns.</p>
<div id="attachment_647" style="width: 367px" class="wp-caption alignnone"><a href="//zappysys.com/blog/wp-content/uploads/2016/06/ssis-soap-web-service-loading-xml-data-into-sql-server-table.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-647" class="size-full wp-image-647" src="//zappysys.com/blog/wp-content/uploads/2016/06/ssis-soap-web-service-loading-xml-data-into-sql-server-table.png" alt="SSIS SOAP Web Service Call - Loading XML data into SQL Server Table (or MySQL, Oracle, FlatFile)" width="357" height="278" srcset="https://zappysys.com/blog/wp-content/uploads/2016/06/ssis-soap-web-service-loading-xml-data-into-sql-server-table.png 357w, https://zappysys.com/blog/wp-content/uploads/2016/06/ssis-soap-web-service-loading-xml-data-into-sql-server-table-300x234.png 300w" sizes="(max-width: 357px) 100vw, 357px" /></a><p id="caption-attachment-647" class="wp-caption-text">SSIS SOAP Web Service Call &#8211; Loading XML data into SQL Server Table (or MySQL, Oracle, FlatFile)</p></div>
<h2>Sample SOAP Webservices for Testing (FREE Public API)</h2>
<p>If you like to test few more scenarios and you do not have SOAP service credentials then no worries. <a href="https://documenter.getpostman.com/view/8854915/Szf26WHn?version=latest" target="_blank" rel="noopener">Try this link</a>. It lists many FREE SOAP services which can be used for testing purpose without real credentials.</p>
<p><strong>Example Request:</strong></p>
<p>Here is sample SOAP API call to convert number into word (i.e. input=500, output=five hundred).<br />
Enter Method, URL, Headers and Body like below on ZappySys UI</p><pre class="crayon-plain-tag">POST https://www.dataaccess.com/webservicesserver/NumberConversion.wso
Content-Type: text/xml; charset=utf-8

&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"&gt;
  &lt;soap:Body&gt;
    &lt;NumberToWords xmlns="http://www.dataaccess.com/webservicesserver/"&gt;
      &lt;ubiNum&gt;500&lt;/ubiNum&gt;
    &lt;/NumberToWords&gt;
  &lt;/soap:Body&gt;
&lt;/soap:Envelope&gt;</pre><p>
<strong>Response</strong></p><pre class="crayon-plain-tag">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"&gt;
  &lt;soap:Body&gt;
    &lt;m:NumberToWordsResponse xmlns:m="http://www.dataaccess.com/webservicesserver/"&gt;
      &lt;m:NumberToWordsResult&gt;five hundred &lt;/m:NumberToWordsResult&gt;
    &lt;/m:NumberToWordsResponse&gt;
  &lt;/soap:Body&gt;
&lt;/soap:Envelope&gt;</pre><p>
&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>SOAP API Pagination (Loop through large dataset)</h2>
<p>By default your SOAP API may not return full dataset if you have too many records to loop through then you can use Pagination techniques discussed in the following articles.</p>
<p><a href="//zappysys.com/blog/get-data-from-google-adwords-using-ssis/">How to get data from Google AdWords using SSIS</a></p>
<p><a href="//zappysys.com/blog/ssis-rest-api-looping-until-no-more-pages-found/" target="_blank" rel="noopener">Various Paging methods for REST API</a></p>
<h2>Sending complex SOAP Request (Nested Parent-Child Array)</h2>
<p>If you have to call more complex SOAP request which requires Parent-child structure (Nested Array) then you cant use Template Transform. In that case, check <a href="https://zappysys.zendesk.com/hc/en-us/articles/360002575234-How-to-generate-Workday-SOAP-Request-XML-in-SSIS" target="_blank" rel="noopener">this article</a> for real-world example.</p>
<div id="attachment_3167" style="width: 674px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2018/01/ssis-create-soap-request-nested-xml-multiple-inputs-post-data.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-3167" class="size-full wp-image-3167" src="https://zappysys.com/blog/wp-content/uploads/2018/01/ssis-create-soap-request-nested-xml-multiple-inputs-post-data.png" alt="Create nested XML for SOAP Request - Multiple inputs (POST data to API using SSIS Web API Destination)" width="664" height="520" srcset="https://zappysys.com/blog/wp-content/uploads/2018/01/ssis-create-soap-request-nested-xml-multiple-inputs-post-data.png 664w, https://zappysys.com/blog/wp-content/uploads/2018/01/ssis-create-soap-request-nested-xml-multiple-inputs-post-data-300x235.png 300w" sizes="(max-width: 664px) 100vw, 664px" /></a><p id="caption-attachment-3167" class="wp-caption-text">Create nested XML for SOAP Request &#8211; Multiple inputs (POST data to API using SSIS Web API Destination)</p></div>
<h2>Extract single XML node from SOAP Response</h2>
<p>There will be a time when you need to extract just one value out of your response and save into SSIS variable / use it later on. If that&#8217;s the case then <a href="https://zappysys.com/blog/ssis-extract-single-xml-node-using-xpath-soap-response/" target="_blank" rel="noopener">refer to this article</a>.</p>
<h2>Conclusion</h2>
<p>Loading data from SOAP Api can be tricky and most of the time it requires use of SDKs or programming languages such as Java, C#, Python, Ruby etc. <a href="//zappysys.com/products/ssis-powerpack/">SSIS PowerPack</a> comes with many RESTful API connectors including SOAP/XML Source and JSON Source. Try <a href="//zappysys.com/products/ssis-powerpack/">SSIS PowerPack</a> yourself and discover many features not discussed in this article.</p>
<p>&nbsp;</p>
<p>The post <a href="https://zappysys.com/blog/calling-soap-web-service-in-ssis-xml-source/">Calling SOAP Web Service in SSIS (XML Source)</a> appeared first on <a href="https://zappysys.com/blog">ZappySys Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://zappysys.com/blog/calling-soap-web-service-in-ssis-xml-source/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>How to get data from Workday in SSIS using SOAP/REST API</title>
		<link>https://zappysys.com/blog/get-data-from-workday-in-ssis-using-soap-or-rest-api/</link>
		
		<dc:creator><![CDATA[ZappySys]]></dc:creator>
		<pubDate>Mon, 11 Jan 2016 15:31:55 +0000</pubDate>
				<category><![CDATA[REST API Integration]]></category>
		<category><![CDATA[SSIS REST API Task]]></category>
		<category><![CDATA[SSIS XML Source (File / SOAP)]]></category>
		<category><![CDATA[API Integration]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[rest api]]></category>
		<category><![CDATA[soap]]></category>
		<category><![CDATA[SoapUI]]></category>
		<category><![CDATA[ssis]]></category>
		<category><![CDATA[SSIS PowerPack]]></category>
		<category><![CDATA[workday]]></category>
		<category><![CDATA[wss]]></category>
		<category><![CDATA[xml]]></category>
		<guid isPermaLink="false">http://zappysys.com/blog/?p=315</guid>

					<description><![CDATA[<p>Introduction In this article you will learn how to get data from WorkDay SOAP web service in few clicks using SSIS SOAP XML Source. All you need to know how to create SOAP Request correctly and provide Authorization (e.g. Userid, Password) inside your request (You can generate that easily using Free tools like SoapUI). Once you do [&#8230;]</p>
<p>The post <a href="https://zappysys.com/blog/get-data-from-workday-in-ssis-using-soap-or-rest-api/">How to get data from Workday in SSIS using SOAP/REST API</a> appeared first on <a href="https://zappysys.com/blog">ZappySys Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Introduction</h2>
<p><a href="//zappysys.com/blog/wp-content/uploads/2016/01/workday-api-integration.png"><img loading="lazy" decoding="async" class="alignleft wp-image-1665" src="//zappysys.com/blog/wp-content/uploads/2016/01/workday-api-integration.png" alt="" width="125" height="125" srcset="https://zappysys.com/blog/wp-content/uploads/2016/01/workday-api-integration.png 195w, https://zappysys.com/blog/wp-content/uploads/2016/01/workday-api-integration-150x150.png 150w" sizes="(max-width: 125px) 100vw, 125px" /></a>In this article you will learn how to get data from WorkDay SOAP web service in few clicks using <a href="//zappysys.com/products/ssis-powerpack/ssis-xml-source/" target="_blank" rel="noopener">SSIS SOAP XML Source</a>. All you need to know how to create SOAP Request correctly and provide Authorization (e.g. Userid, Password) inside your request (You can generate that easily using Free tools like <strong>SoapUI</strong>). Once you do that you can call virtually any WorkDay API using our <a href="//zappysys.com/products/ssis-powerpack/ssis-xml-source/" target="_blank" rel="noopener">SSIS XML Source</a>. If you need more help contact our <a href="//zappysys.com/support/" target="_blank" rel="noopener">Support</a> and we will be happy to help you step by step.</p>
<p>&nbsp;</p>
<h2></h2>
<h2>How to call Workday API in SSIS (Read or Write Data)</h2>
<p>Here are high level steps to read or write Workday data in SSIS.</p>
<ol>
<li>Obtain Workday WSDL URL (Service Metadata) and API URL for your tenant</li>
<li>Craft POST request XML using tool like <a href="//zappysys.com/blog/calling-soap-web-service-in-ssis-xml-source/" target="_blank" rel="noopener">SoapUI</a> for desired operation (e.g <strong>Get_Employee</strong> )</li>
<li>Configure SSIS HTTP Connection (for SOAP WSS) using API url and workday Userid / password.</li>
<li>Call Workday API using any of these tasks or components <a href="https://zappysys.com/products/ssis-powerpack/ssis-xml-source/" target="_blank" rel="noopener">SSIS XML Source</a> or <a href="https://zappysys.com/products/ssis-powerpack/ssis-rest-api-web-service-task/" target="_blank" rel="noopener">SSIS REST API TASK</a> or <a href="https://zappysys.com/products/ssis-powerpack/ssis-web-api-destination-connector/" target="_blank" rel="noopener">SSIS Web API Destination</a> to read / write data.</li>
</ol>
<p>Now lets look at each step in detail in the following sections</p>
<div class="su-note"  style="border-color:#e5de9d;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:#FFF8B7;border-color:#ffffff;color:#333333;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;"><strong>NOTE:</strong> If you are trying to get data from Workday report instead (your Workday admin created a report and gave you a link) then skip Soap UI part, use the URL with GET method and <em>Basic authentication</em> instead of SOAP WSS.</div></div>
<h3>Obtain Workday SOAP WSDL URL (API Metadata URL)</h3>
<p>First step to consume workday api using SSIS is download SOAP WSDL file. WSDL is XML file which describes available API operations and structure of request and response. Here is the <a href="https://community.workday.com/sites/default/files/file-hosting/productionapi/index.html" target="_blank" rel="noopener">list of available WSDL</a> for various Workday API Services. Right click on WSDL icon and save to local disk. We will use this WSDL in next section to craft SOAP Request using <a href="https://zappysys.com/blog/calling-soap-web-service-in-ssis-xml-source/">SoapUI tool</a></p>
<p>You can find more information about Other <a href="https://community.workday.com/api" target="_blank" rel="noopener">Workday API here</a>.</p>
<h3>Obtain Workday API URL</h3>
<p>Once you have WSDL file, next step is craft correct URL for API service you like to call. Service name can be obtained from <a href="https://community.workday.com/sites/default/files/file-hosting/productionapi/index.html" target="_blank" rel="noopener">here</a> (Check service column)</p>
<p><strong>Syntax:</strong> <pre class="crayon-plain-tag">https://&lt;workday host name&gt;.workday.com/ccx/service/&lt;tenant name&gt;/&lt;service-name&gt;</pre><strong><br />
Example:</strong> <pre class="crayon-plain-tag">https://MY-INSTANCE.workday.com/ccx/service/MY-TenantID/Human_Resources</pre>
<h3>Craft SOAP Body (XML API Request) using SoapUI</h3>
<p>Now its time to craft some SOAP Request. Check steps <a href="https://zappysys.com/blog/calling-soap-web-service-in-ssis-xml-source/">outlined here (Use SoapUI tool)</a> . Once you have Request Body XML you can change parameters as per your need.</p>
<p>Here is sample  SOAP XML Body for Get Employee call from Human_Resopurces service.</p><pre class="crayon-plain-tag">&lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bsvc="urn:com.workday/bsvc"&gt;
   &lt;soapenv:Header/&gt;
   &lt;soapenv:Body&gt;
      &lt;bsvc:Employee_Get&gt;
         &lt;bsvc:Employee_Reference&gt;
            &lt;bsvc:Integration_ID_Reference&gt;
               &lt;bsvc:ID&gt;gero et&lt;/bsvc:ID&gt;
            &lt;/bsvc:Integration_ID_Reference&gt;
         &lt;/bsvc:Employee_Reference&gt;
      &lt;/bsvc:Employee_Get&gt;
   &lt;/soapenv:Body&gt;
&lt;/soapenv:Envelope&gt;</pre><p>
<div id="attachment_2543" style="width: 745px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2016/01/create-workday-soap-request-using-soapui-api-xml-body.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-2543" class="size-full wp-image-2543" src="https://zappysys.com/blog/wp-content/uploads/2016/01/create-workday-soap-request-using-soapui-api-xml-body.png" alt="Create SOAP Request Body from WSDL (Using SoapUI tool)" width="735" height="451" srcset="https://zappysys.com/blog/wp-content/uploads/2016/01/create-workday-soap-request-using-soapui-api-xml-body.png 735w, https://zappysys.com/blog/wp-content/uploads/2016/01/create-workday-soap-request-using-soapui-api-xml-body-300x184.png 300w" sizes="(max-width: 735px) 100vw, 735px" /></a><p id="caption-attachment-2543" class="wp-caption-text">Create SOAP Request Body from WSDL (Using SoapUI tool)</p></div>
<p>&nbsp;</p>
<h3>Creating SSIS Connection for Workday SOAP API call using WSS Security</h3>
<div class="content_block" id="custom_post_widget-2536"><p>To create new connection for workday perform the following steps.</p>
<ol>
<li>Two ways you can create HTTP connection for workday<br />
<strong>First approach:</strong> Right click in the connection managers panel and click &#8220;New Connection&#8230;&#8221; and Select <strong>ZS-HTTP</strong> connection from the connection type list and click OK.<br />
<strong>&#8212; OR &#8212;</strong><br />
<strong>Second approach:</strong> If you are already on <a href="https://zappysys.com/products/ssis-powerpack/ssis-xml-source/" target="_blank" rel="noopener">SSIS XML Source</a> or <a href="https://zappysys.com/products/ssis-powerpack/ssis-rest-api-web-service-task/" target="_blank" rel="noopener">SSIS REST API TASK</a> or <a href="https://zappysys.com/products/ssis-powerpack/ssis-web-api-destination-connector/" target="_blank" rel="noopener">SSIS Web API Destination</a> UI then click [New] next to the Connection Dropdown.</li>
<li>Once HTTP Connection UI is visible configure following way.
<ol>
<li>Enter API URL for Workday (Make sure you don&#8217;t enter WSDL URL <a href="https://community.workday.com/sites/default/files/file-hosting/productionapi/index.html" target="_blank" rel="noopener">found here</a> ). Your API URL will be something like below.<br />
<strong>Syntax:</strong> <span class="lang:default highlight:0 decode:true crayon-inline">https://&lt;workday host name&gt;.workday.com/ccx/service/&lt;tenant name&gt;/&lt;service-name&gt;</span><strong><br />
Example:</strong> <span class="lang:default highlight:0 decode:true crayon-inline">https://wd1-impl-services1.workday.com/ccx/service/MyTenantID/Human_Resources</span></li>
<li>Select credential type as SOAP WSS (This setting is only found in <strong>v2.6.4</strong> or Higher)</li>
<li>Enter your workday userid and password</li>
<li>For WSS password type setting you leave it default (Not set) or change to PasswordHash for more secure communication.</li>
<li>Click OK to save.</li>
</ol>
</li>
</ol>
<div id="attachment_2537" style="width: 793px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2018/01/ssis-soap-webservice-connection-workday-api-wss-security.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-2537" class="size-full wp-image-2537" src="https://zappysys.com/blog/wp-content/uploads/2018/01/ssis-soap-webservice-connection-workday-api-wss-security.png" alt="SSIS Workday Integration - Create New SAOP Service Connection for Workday API Service (SOAP WSS)" width="783" height="635" srcset="https://zappysys.com/blog/wp-content/uploads/2018/01/ssis-soap-webservice-connection-workday-api-wss-security.png 783w, https://zappysys.com/blog/wp-content/uploads/2018/01/ssis-soap-webservice-connection-workday-api-wss-security-300x243.png 300w, https://zappysys.com/blog/wp-content/uploads/2018/01/ssis-soap-webservice-connection-workday-api-wss-security-768x623.png 768w" sizes="(max-width: 783px) 100vw, 783px" /></a><p id="caption-attachment-2537" class="wp-caption-text">SSIS Workday Integration &#8211; Create New SOAP Service Connection for Workday API Service (SOAP WSS)</p></div>
<p>&nbsp;</p>
</div>
<h3>Calling Workday sample API using SSIS REST API Task</h3>
<p>Here is how you can call any Workday API action from control flow using <a href="https://zappysys.com/products/ssis-powerpack/ssis-rest-api-web-service-task/" target="_blank" rel="noopener">SSIS REST API TASK</a>. Below is simple way to execute API in SSIS but if you need to parse API response into rows and column then check next section on how to use <a href="https://zappysys.com/products/ssis-powerpack/ssis-xml-source/" target="_blank" rel="noopener">SSIS XML Source</a></p>
<p>Configure following settings</p>
<ol>
<li>Select URL Access Mode to <strong>URL from Connection</strong></li>
<li>Select HTTP Connection created in the previous section</li>
<li>Change Request Method to <strong>POST</strong></li>
<li>Change Content Type to XML (<strong>text/xml;charset=UTF-8</strong>)</li>
<li>Enter SOAP Body (Obtained in the previous section <a href="https://zappysys.com/blog/calling-soap-web-service-in-ssis-xml-source/" target="_blank" rel="noopener">using SoapUI</a> )</li>
<li>Click Raw Edit above Headers grid. Enter below string<br />
<pre class="crayon-plain-tag">SOAPAction: ""</pre>
</li>
<li>Click Test Request / Response. You should see Response data.</li>
</ol>
<div id="attachment_2544" style="width: 729px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2016/01/calling-workday-api-using-ssis.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-2544" class="size-full wp-image-2544" src="https://zappysys.com/blog/wp-content/uploads/2016/01/calling-workday-api-using-ssis.png" alt="Calling workday API using SSIS REST API Task" width="719" height="511" srcset="https://zappysys.com/blog/wp-content/uploads/2016/01/calling-workday-api-using-ssis.png 719w, https://zappysys.com/blog/wp-content/uploads/2016/01/calling-workday-api-using-ssis-300x213.png 300w" sizes="(max-width: 719px) 100vw, 719px" /></a><p id="caption-attachment-2544" class="wp-caption-text">Calling workday API using SSIS REST API Task</p></div>
<p>&nbsp;</p>
<h3>Write workday data using SSIS XML Task (Import from SQL Server to Workday)</h3>
<p>Check this article to learn <a href="https://zappysys.com/blog/load-sql-server-data-workday-using-ssis-soap-api/" target="_blank" rel="noopener">how to load sql server data data to workday</a></p>
<h3>Reading Workday data using SSIS XML Task (Export from workday to SQL Server)</h3>
<p>In this section we will not use Here are high level steps.</p>
<ol>
<li>Drag Data Flow Task from SSIS Toolbox</li>
<li>Drag <a href="//zappysys.com/products/ssis-powerpack/ssis-xml-source/" target="_blank" rel="noopener">SSIS XML Source </a> from the toolbox.</li>
<li>Enter the API URL (Do not enter WSDL URL)<br />
<strong>Example URL</strong> =&gt; https://<strong>wd5-impl-services1</strong>.workday.com/ccx/service/<strong>{{tenant}}</strong>/Human_Resources</li>
<li>Select HTTP Connection created in the previous section</li>
<li>Check Use Credentials Option and Select HTTP connection created in the previous section</li>
<li>Change Request Method to <strong>POST</strong></li>
<li>Change Content Type to XML (<strong>text/xml;charset=UTF-8</strong>)</li>
<li>Enter SOAP Body (Obtained in the previous section <a href="https://zappysys.com/blog/calling-soap-web-service-in-ssis-xml-source/" target="_blank" rel="noopener">using SoapUI</a> )</li>
<li>Click Raw Edit above Headers grid. Enter below string<br />
<pre class="crayon-plain-tag">SOAPAction: ""</pre>
</li>
<li>Click Preview to see the data</li>
<li>Click OK to save the UI</li>
<li>Now you can connect your XML Source to any target such as OLEDB Destination (SQL Server Table)</li>
</ol>
<p>Here is the example screenshot &#8230;</p>
<div id="attachment_2545" style="width: 954px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-get-data-from-workday-soap-api-call-xml-web-service.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-2545" class="size-full wp-image-2545" src="https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-get-data-from-workday-soap-api-call-xml-web-service.png" alt="" width="944" height="692" srcset="https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-get-data-from-workday-soap-api-call-xml-web-service.png 944w, https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-get-data-from-workday-soap-api-call-xml-web-service-300x220.png 300w, https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-get-data-from-workday-soap-api-call-xml-web-service-768x563.png 768w" sizes="(max-width: 944px) 100vw, 944px" /></a><p id="caption-attachment-2545" class="wp-caption-text">Get data from WorkDay Web Service (Call XML SOAP API in SSIS)</p></div>
<h3>Workday API Pagination &#8211; Retrieve more than 100 rows</h3>
<p>By default Workday API will return only 100 records unless you specify Page / Count in <a href="https://community.workday.com/sites/default/files/file-hosting/productionapi/Human_Resources/v17/Get_Workers.html#Response_FilterType" target="_blank" rel="noopener">Response_Filter</a> . Regardless it will only send you 999 maximum rows. To fetch more records after first page you have to setup pagination in XML Source as below. You will need latest version to use this feature (version 2.7.8 or higher).</p>
<div id="attachment_5054" style="width: 942px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-workday-api-pagination-settings-1.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-5054" class="size-full wp-image-5054" src="https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-workday-api-pagination-settings-1.png" alt="Workday SOAP API Pagination Settings in SSIS XML Source" width="932" height="553" srcset="https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-workday-api-pagination-settings-1.png 932w, https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-workday-api-pagination-settings-1-300x178.png 300w, https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-workday-api-pagination-settings-1-768x456.png 768w" sizes="(max-width: 932px) 100vw, 932px" /></a><p id="caption-attachment-5054" class="wp-caption-text">Workday SOAP API Pagination Settings in SSIS XML Source</p></div>
<p>And one more thing you have change in Body as below. Pass Response_Filter parameter as below. See how we used <strong>&lt;%page%&gt;</strong> placeholder. You can use tool like <a href="https://zappysys.com/blog/how-to-use-fiddler-to-analyze-http-web-requests/" target="_blank" rel="noopener">fiddler</a> to see multiple response at runtime. Run package and check fiddler.</p>
<div id="attachment_5055" style="width: 804px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-workday-api-pagination-settings-2-body-response-filter.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-5055" class="size-full wp-image-5055" src="https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-workday-api-pagination-settings-2-body-response-filter.png" alt="Workday API Pagination - Supply Response_Filter (Page Size and Current Page Number)" width="794" height="377" srcset="https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-workday-api-pagination-settings-2-body-response-filter.png 794w, https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-workday-api-pagination-settings-2-body-response-filter-300x142.png 300w, https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-workday-api-pagination-settings-2-body-response-filter-768x365.png 768w" sizes="(max-width: 794px) 100vw, 794px" /></a><p id="caption-attachment-5055" class="wp-caption-text">Workday API Pagination &#8211; Supply Response_Filter (Page Size and Current Page Number)</p></div>
<h3></h3>
<h2>Sample SOAP Request for Workday API Call</h2>
<p>Here is sample request. You have to fill out placeholders (e.g. xxxxxxxx ) when you submit it</p>
<p>There are two ways to pass userid/password inside SOAP Header. WSS PlainText Password or Password Digest. If you using second method to hash password then use Tool like SoapUI.</p><pre class="crayon-plain-tag">&lt;env:Envelope
    xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"&gt;
    &lt;env:Header&gt;
        &lt;wd:Workday_Common_Header xmlns:wd="urn:com.workday/bsvc"&gt;
            &lt;wd:Include_Reference_Descriptors_In_Response&gt;true&lt;/wd:Include_Reference_Descriptors_In_Response&gt;
        &lt;/wd:Workday_Common_Header&gt;
    &lt;/env:Header&gt;
    &lt;env:Body&gt;
        &lt;wd:Put_Job_Profile_Request xmlns:wd="urn:com.workday/bsvc" wd:Add_Only="false" wd:version="v26.0"&gt;
            &lt;wd:Job_Profile_Reference&gt;
                &lt;wd:ID wd:type="Job_Profile_ID"&gt;{2}&lt;/wd:ID&gt;
            &lt;/wd:Job_Profile_Reference&gt;
            &lt;wd:Job_Profile_Data&gt;
                &lt;wd:Job_Code&gt;xxxxxxxx&lt;/wd:Job_Code&gt;
                &lt;wd:Effective_Date&gt;xxxxxxxx&lt;/wd:Effective_Date&gt;
                &lt;wd:Job_Classification_Data wd:Delete="false"&gt;
                    &lt;wd:Job_Classification_Reference&gt;
                        &lt;wd:ID wd:type="Job_Classification_Reference_ID"&gt;xxxxxxxx&lt;/wd:ID&gt;
                    &lt;/wd:Job_Classification_Reference&gt;
                &lt;/wd:Job_Classification_Data&gt;
            &lt;/wd:Job_Profile_Data&gt;
        &lt;/wd:Put_Job_Profile_Request&gt;
    &lt;/env:Body&gt;
&lt;/env:Envelope&gt;</pre><p>
<h3>Video Tutorial (See Part#4) &#8211; Create XML and POST data to SOAP Web Service or REST API</h3>
<p>Now lets look at examples of creating XML from multiple data sources and POST XML request to SOAP Web Service URL or any other XML Based REST API URL. This video has 5 parts to cover full length tutorial but if you want to fast forward to see XML Generator Transform and Web API Destination then see part#4.<br />
<a href="https://zappysys.com/blog/get-data-from-workday-in-ssis-using-soap-or-rest-api/"><img decoding="async" src="https://zappysys.com/blog/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FTjTexGzBF5g%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></p>
<h2>Manually Passing WSS Credentials (UserID / Password)</h2>
<p>When you use HTTP connection using SOAP Setting you dont have to worry about generating WSS Security Header. But for some reason you have to do that manually not to worry. See below section to add UserID / Password Header manually. Again Skip this section if you are using SSIS HTTP Connection along with SOAP WSS Option.</p>
<p>To generate correct Credentials Header in SOAP Request use tool like SoapUI. <a href="//zappysys.com/blog/calling-soap-web-service-in-ssis-xml-source/" target="_blank" rel="noopener">Check this article</a> to learn more how to generate WSS Security header.</p>
<ol>
<li>Assuming that you already gone through<a href="//zappysys.com/blog/calling-soap-web-service-in-ssis-xml-source/"> this article to learn how to use SoapUI</a>.</li>
<li>Open SoapUI. Click on the request you want to generate SOAP Request Code.</li>
<li>Enter username and password in request properties grid
<div class="mceTemp"></div>
</li>
<li>Now right click in the XML Request Pane and click &#8220;Add WSS UserName Token&#8221;
<div id="attachment_2326" style="width: 1002px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-workday-api-soapui-generate-request-body-with-credential-userid-password.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-2326" class="size-full wp-image-2326" src="https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-workday-api-soapui-generate-request-body-with-credential-userid-password.png" alt="SoapUI Example - Adding credentials to Workday API call." width="992" height="461" srcset="https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-workday-api-soapui-generate-request-body-with-credential-userid-password.png 992w, https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-workday-api-soapui-generate-request-body-with-credential-userid-password-300x139.png 300w, https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-workday-api-soapui-generate-request-body-with-credential-userid-password-768x357.png 768w" sizes="(max-width: 992px) 100vw, 992px" /></a><p id="caption-attachment-2326" class="wp-caption-text">SoapUI Example &#8211; Adding credentials to Workday API call.</p></div></li>
<li>Select Password Method (e.g. PasswordText or PasswordDigest)
<div id="attachment_2327" style="width: 480px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-workday-soapui-call-insert-passwordtext.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-2327" class="size-full wp-image-2327" src="https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-workday-soapui-call-insert-passwordtext.png" alt="SoapUI- Using PasswordDigest Method to insert userid / password inside Workday SOAP Request Body " width="470" height="324" srcset="https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-workday-soapui-call-insert-passwordtext.png 470w, https://zappysys.com/blog/wp-content/uploads/2016/01/ssis-workday-soapui-call-insert-passwordtext-300x207.png 300w" sizes="(max-width: 470px) 100vw, 470px" /></a><p id="caption-attachment-2327" class="wp-caption-text">SoapUI- Using PasswordDigest Method to insert userid / password inside Workday SOAP Request Body</p></div></li>
<li>Once you done. You may see new tags inserted under &lt;soapenv:header&gt; tag (For example see below section). You can now use the SOAP Request as your Body in your SSIS XML Source, REST API Task or Web API Destination.</li>
</ol>
<h3>Passing WSS Credentials in SOAP Header &#8211; PasswordText Method</h3>
<p>If you select PasswordText Method then your SOAP code may look like below.</p><pre class="crayon-plain-tag">&lt;soapenv:Envelope xmlns:bsvc="urn:com.workday/bsvc" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"&gt;
   &lt;soapenv:Header&gt;
      &lt;wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"&gt;
         &lt;wsse:UsernameToken wsu:Id="UsernameToken-BF23D830F28697AA1614674076904673"&gt;
            &lt;wsse:Username&gt;myuser1&lt;/wsse:Username&gt;
            &lt;wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"&gt;mypass123&lt;/wsse:Password&gt;
         &lt;/wsse:UsernameToken&gt;
      &lt;/wsse:Security&gt;
   &lt;/soapenv:Header&gt;
   &lt;soapenv:Body&gt;
      &lt;bsvc:Get_Account_Sets_without_Dependencies_Request&gt;
         &lt;!--You have a CHOICE of the next 2 items at this level--&gt;
      &lt;/bsvc:Get_Account_Sets_without_Dependencies_Request&gt;
   &lt;/soapenv:Body&gt;
&lt;/soapenv:Envelope&gt;</pre><p>
<h3>Passing WSS Credentials in SOAP Header &#8211; PasswordDigest Method</h3>
<p>If you select PasswordDigest Method then your SOAP code may look like below. This is for example purpose to give you idea. Technically hardcoding Hash which is signed by Creation Timestamp is useless. Always use SSIS HTTP connection Manager if you like to use this method.</p><pre class="crayon-plain-tag">&lt;soapenv:Envelope xmlns:bsvc="urn:com.workday/bsvc" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"&gt;
   &lt;soapenv:Header&gt;
      &lt;wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"&gt;
         &lt;wsse:UsernameToken wsu:Id="UsernameToken-BF23D830F28697AA1614674078408854"&gt;
            &lt;wsse:Username&gt;myuser1&lt;/wsse:Username&gt;
            &lt;wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest"&gt;ycSUpSwmaNimO+QojCVwjlUDL+E=&lt;/wsse:Password&gt;
            &lt;wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary"&gt;tPkEttb09CF39xIW2X/P3Q==&lt;/wsse:Nonce&gt;
            &lt;wsu:Created&gt;2016-07-01T21:17:20.885Z&lt;/wsu:Created&gt;
         &lt;/wsse:UsernameToken&gt;
      &lt;/wsse:Security&gt;
   &lt;/soapenv:Header&gt;
   &lt;soapenv:Body&gt;
      &lt;bsvc:Get_Account_Sets_without_Dependencies_Request&gt;
         &lt;!--You have a CHOICE of the next 2 items at this level--&gt;
      &lt;/bsvc:Get_Account_Sets_without_Dependencies_Request&gt;
   &lt;/soapenv:Body&gt;
&lt;/soapenv:Envelope&gt;</pre><p>
<div class="content_block" id="custom_post_widget-1887"><h3>Truncation related error</h3>
<p style="text-align: justify;">The most common error you may face when you run an SSIS package is truncation error. During the design time only 300 rows are scanned from a source (a file or a REST API call response) to detect datatypes but at runtime, it is likely you will retrieve far more records. So it is possible that you will get longer strings than initially expected. For detailed instructions on how to fix common metadata related errors read an article &#8220;<a href="//zappysys.com/blog/handling-ssis-component-metadata-issues/" target="_blank" rel="noopener">How to handle SSIS errors (truncation, metadata issues)</a>&#8220;.</p>
<h3>Authentication related error</h3>
<p>Another frequent error you may get is an authentication error, which happens when you deploy/copy a package to another machine and run it there. Check <a href="#Deployment_to_Production">the paragraph below</a> to see why it happens and how to solve this problem.</p>
</div>
<p>&nbsp;</p>
<h2>Other Useful connectors for SOAP/XML and JSON REST API</h2>
<p><a href="//zappysys.com/products/ssis-powerpack/ssis-xml-source/" target="_blank" rel="noopener">SSIS XML Source (FILE, SOAP, REST API Connector)</a><br />
<a href="//zappysys.com/products/ssis-powerpack/ssis-json-file-source/">SSIS JSON Source (File, REST Connector)</a></p>
<p>Here are few more useful links on how to Call SOAP API in general:</p>
<p><a href="//zappysys.com/blog/calling-soap-web-service-in-ssis-xml-source/">Calling SOAP Web Service in SSIS (XML Source)</a></p>
<p><a title="Permalink to How to get data from Google AdWords using SSIS" href="//zappysys.com/blog/get-data-from-google-adwords-using-ssis/" rel="bookmark">How to get data from Google AdWords using SSIS</a></p>
<p>Also check this link to learn <a href="http://workdayconsultant.blogspot.com/2014/10/must-know-using-soap-ui.html" target="_blank" rel="noopener">how to hand craft SOAP request</a> to call Workday API.</p>
<h2>Workday XML SOAP API Reference:</h2>
<p><a href="https://community.workday.com/custom/developer/API/index.html" target="_blank" rel="noopener">Workday REST API reference link</a></p>
<h2>Conclusion</h2>
<p>In this article we have learned how to load data from SQL Server to Workday using SSIS ( drag and drop approach without coding). Combination of few ZappySys Components (e.g. Web API Destination, XML Generator ) makes it super simple to call any Web API to load data from one system to API endpoint. <a href="https://zappysys.com/products/ssis-powerpack/">Download SSIS PowerPack</a> to try many other automation scenarios not discussed in this article.</p>
<p>The post <a href="https://zappysys.com/blog/get-data-from-workday-in-ssis-using-soap-or-rest-api/">How to get data from Workday in SSIS using SOAP/REST API</a> appeared first on <a href="https://zappysys.com/blog">ZappySys Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
