<?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>workday Archives | ZappySys Blog</title>
	<atom:link href="https://zappysys.com/blog/tag/workday/feed/" rel="self" type="application/rss+xml" />
	<link>https://zappysys.com/blog/tag/workday/</link>
	<description>SSIS / ODBC Drivers / API Connectors for JSON, XML, Azure, Amazon AWS, Salesforce, MongoDB and more</description>
	<lastBuildDate>Thu, 20 Feb 2020 16:00:22 +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>workday Archives | ZappySys Blog</title>
	<link>https://zappysys.com/blog/tag/workday/</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>Calling SOAP API in Power BI (Read XML Web Service data)</title>
		<link>https://zappysys.com/blog/call-soap-api-power-bi-read-xml-web-service-data/</link>
		
		<dc:creator><![CDATA[ZappySys]]></dc:creator>
		<pubDate>Thu, 14 Jun 2018 13:36:33 +0000</pubDate>
				<category><![CDATA[ODBC PowerPack]]></category>
		<category><![CDATA[Reporting - Microsoft Power BI]]></category>
		<category><![CDATA[XML File / SOAP API Driver]]></category>
		<category><![CDATA[workday]]></category>
		<category><![CDATA[wsdl]]></category>
		<category><![CDATA[xml]]></category>
		<guid isPermaLink="false">https://zappysys.com/blog/?p=3933</guid>

					<description><![CDATA[<p>Introduction In our previous post, we saw in general how to call REST API in Power BI. Now let&#8217;s look at how to call SOAP API in Power BI (e.g. WorkDay, Google AdWords services). SOAP API is in XML format so we will be using ZappySys XML Driver for a demonstration in this article. To [&#8230;]</p>
<p>The post <a href="https://zappysys.com/blog/call-soap-api-power-bi-read-xml-web-service-data/">Calling SOAP API in Power BI (Read XML Web Service 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/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="109" height="109" 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: 109px) 100vw, 109px" /></a>In our <a href="https://zappysys.com/blog/howto-import-json-rest-api-power-bi/" target="_blank" rel="noopener">previous post</a>, we saw in general how to <strong>call REST API in Power BI</strong>. Now let&#8217;s look at how to <strong>call SOAP API in Power BI</strong> (e.g. <a href="https://zappysys.com/blog/get-data-from-workday-in-ssis-using-soap-or-rest-api/" target="_blank" rel="noopener">WorkDay</a>, Google AdWords services). SOAP API is in XML format so we will be using ZappySys XML Driver for a demonstration in this article.</p>
<p>To learn how to automate dataset refresh on a scheduled basis you can again refer to the <a href="https://zappysys.com/blog/howto-import-json-rest-api-power-bi/" target="_blank" rel="noopener">previous post</a> because that won&#8217;t be covered in this article.</p>
<p>So let&#8217;s get started !!!</p>
<h2 style="text-align: left;">Requirements</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 (FREE)</a> installed</li>
<li>Make sure you have <a href="https://zappysys.com/products/odbc-powerpack/">ZappySys ODBC Power Pack</a> installed</li>
</ol>
<h2>Creating SQL Queries to call SOAP API in Power BI (Using XML Driver)</h2>
<p>Very first step to call SOAP API in Power BI is to understand how to craft SOAP Requests using ZappySys XML Driver. Once you play with sample SOAP queries you can copy/paste that into Power BI.</p>
<div class="content_block" id="custom_post_widget-3870">To call SOAP API you need to know Request XML Body Structure. If you are not sure how to create SOAP Request body then no worries. <a href="https://zappysys.com/blog/calling-soap-web-service-in-ssis-xml-source/" target="_blank" rel="noopener">Check this article</a> to learn how to generate SOAP Request body using the Free tool <a href="https://www.soapui.org/downloads/latest-release.html" target="_blank" rel="noopener">SoapUI</a>. Basically, you have to use SoapUI to generate Request XML and after that, you can replace parameters as needed in the generated body.
<h3>What is SOAP Web Service?</h3>
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>

There are two important aspects in SOAP Web service.
<ol>
 	<li>Getting WSDL file or URL</li>
 	<li>Knowing exact Web Service URL</li>
</ol>
<h3>What is WSDL</h3>
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 )
<h3>Example SQL Query for SOAP API call using ZappySys XML Driver</h3>
Here is an example SQL query you can write to call SOAP API. If you not sure about many details then check next few sections on how to use XML Driver User Interface to build desired SQL query to POST data to XML SOAP Web Service without any coding.
<pre class="lang:tsql decode:true">SELECT * FROM $
WITH(
	 Src='http://www.holidaywebservice.com/HolidayService_v2/HolidayService2.asmx'
	,DataConnectionType='HTTP'
	,CredentialType='Basic' --OR SoapWss
	,SoapWssPasswordType='PasswordText'
	,UserName='myuser'
	,Password='pass$$w123'
	,Filter='$.soap:Envelope.soap:Body.GetHolidaysAvailableResponse.GetHolidaysAvailableResult.HolidayCode[*]'
	,ElementsToTreatAsArray='HolidayCode'	
	,RequestMethod='POST'	
	,Header='Content-Type: text/xml;charset=UTF-8 || SOAPAction: "http://www.holidaywebservice.com/HolidayService_v2/GetHolidaysAvailable"'
	,RequestData='
&lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:hol="http://www.holidaywebservice.com/HolidayService_v2/"&gt;
   &lt;soapenv:Header/&gt;
   &lt;soapenv:Body&gt;
      &lt;hol:GetHolidaysAvailable&gt;
         &lt;!--type: Country - enumeration: [Canada,GreatBritain,IrelandNorthern,IrelandRepublicOf,Scotland,UnitedStates]--&gt;
         &lt;hol:countryCode&gt;UnitedStates&lt;/hol:countryCode&gt;
      &lt;/hol:GetHolidaysAvailable&gt;
   &lt;/soapenv:Body&gt;
&lt;/soapenv:Envelope&gt;'
)</pre>
Now let's look at steps to create SQL query to call SOAP API. Later we will see how to generate code for your desired programming language (e.g. C# or SQL Server)
<h3>Video Tutorial - Introduction to SOAP Web Service and SoapUI tool</h3>
Before we dive into details about calling SOAP API using ZappySys XML Driver, lets first understand what is SOAP API and how to create SOAP requests using SoapUI tool. You will learn more about this process in the later section. The video contains some fragment about using SOAP API in SSIS but just ignore that part because we will be calling Soap API using ZappySys ODBC Driver rather than SSIS Components.

&nbsp;

<iframe loading="lazy" width="560" height="315" src="https://www.youtube.com/embed/d_x5bgGjg0Y?rel=0&amp;showinfo=0" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen="allowfullscreen" data-mce-fragment="1"></iframe>
<h3>Using SoapUI to test SOAP API call / Create Request Body XML</h3>
Assuming you have downloaded and installed <a href="https://www.soapui.org/downloads/latest-release.html" target="_blank" rel="noopener">SoapUI from here</a>, now we are ready to use WSDL for your SOAP Web Service Calls. If you do not have WSDL file or URL handy then contact your API provider (sometimes you just have to add <strong>?wsdl </strong>at the end of your Service URL to get WSDL so try that. Example: http://mycompany/myservice?wsdl ).

If you don't know what is WSDL then in short, WSDL is <strong>Web service Description Language</strong> (i.e. XML file which describes your SOAP Service). WSDL helps to craft SOAP API request Body for ZappySys XML Driver. So Let's get started.
<ol>
 	<li>Open SoapUI and click SOAP button to create new SOAP Project</li>
 	<li>Enter WSDL URL or File Path of WSDLFor example WSDL for our sample service can be accessed via this URL
<pre class="lang:default highlight:0 decode:true">http://www.dneonline.com/calculator.asmx?wsdl</pre>
<a href="https://zappysys.com/blog/wp-content/uploads/2018/06/calling-soap-api-import-wsdl-new-soapui-project.png"><img loading="lazy" decoding="async" class="size-full wp-image-3871" src="https://zappysys.com/blog/wp-content/uploads/2018/06/odbc-call-soap-api-14.png" alt="Create new SOAP API Project in SoapUI tool for SOAP API Testing" width="486" height="349" /></a>
<div style="margin-bottom: 1em;">Create new SOAP API Project in SoapUI tool for SOAP API Testing</div></li>
 	<li>Once WSDL is loaded you will see possible operations you can call for your SOAP Web Service.</li>
 	<li>If your web service requires credentials then you have to configure it. There are two common credential types for public services (<strong>SOAP WSS</strong> or <strong>BASIC</strong> )
<ol>
 	<li>
<div style="margin-bottom: 1em;">To use <strong>SOAP WSS Credentials</strong> select request node and enter UserId, Password, and <strong>WSS-PasswordType</strong> (PasswordText or PasswordHash)</div>
<a href="https://zappysys.com/blog/wp-content/uploads/2018/06/calling-soap-api-pass-soap-wss-credentials-userid-password.png"><img loading="lazy" decoding="async" class="size-full wp-image-3872 alignnone" src="https://zappysys.com/blog/wp-content/uploads/2018/06/odbc-call-soap-api-2.png" alt="Configure SOAP WSS Credentials for SoapUI (SOAP API Testing Tool)" width="294" height="544" /></a>
<div style="display: block;">Configure SOAP WSS Credentials for SoapUI (SOAP API Testing Tool)</div></li>
 	<li>To use <strong>BASIC Auth</strong> Credentials select request node and double-click it. At the bottom click on Auth (Basic) and From Authorization dropdown click Add New and Select Basic.<a href="https://zappysys.com/blog/wp-content/uploads/2018/06/calling-soap-api-pass-basic-authentication-userid-password.png"><img loading="lazy" decoding="async" class="size-full wp-image-3873" src="https://zappysys.com/blog/wp-content/uploads/2018/06/odbc-call-soap-api-2.png" alt="Configure Basic Authorization for SoapUI (SOAP API Testing Tool)" width="616" height="653" /></a>
<div style="margin-bottom: 1em;">Configure Basic Authorization for SoapUI (SOAP API Testing Tool)</div></li>
</ol>
</li>
 	<li>Now you can test your request first Double-click on the request node to open request editor.</li>
 	<li>Change necessary parameters, remove optional or unwanted parameters. If you want to regenerate request you can click on <strong>Recreate default request toolbar icon</strong>.
<a href="https://zappysys.com/blog/wp-content/uploads/2016/06/create-soap-request-with-optional-parameters-soapui.png"><img loading="lazy" decoding="async" class="size-full wp-image-2812" src="https://zappysys.com/blog/wp-content/uploads/2018/06/odbc-call-soap-api-4.png" alt="Create SOAP Request XML (With Optional Parameters)" width="807" height="315" /></a>
<div style="margin-bottom: 1em;">Create SOAP Request XML (With Optional Parameters)</div></li>
 	<li>Once your SOAP Request XML is ready, <strong>Click the Play button</strong> in the toolbar to execute SOAP API Request and Response will appear in Right side panel.
<a href="https://zappysys.com/blog/wp-content/uploads/2018/06/soapui-test-soap-api-request-response-edit-xml-body.png"><img loading="lazy" decoding="async" class="size-full wp-image-3874" src="https://zappysys.com/blog/wp-content/uploads/2018/06/odbc-call-soap-api-5.png" alt="Test SOAP API using SoapUI Tool (Change Default XML Body / Parameters, Execute and See Response)" width="1216" height="511" /></a>
Test SOAP API using SoapUI Tool (Change Default XML Body / Parameters, Execute and See Response)</li>
</ol>
<h3>Create DSN using ZappySys XML Driver to call SOAP API</h3>
Once you have tested your SOAP API in SoapUI tool, we are ready to use ZappySys XML driver to call SOAP API in your preferred BI tool or Programming language.
<ol>
 	<li>First open <strong>ODBC Data Sources</strong> (search ODBC in your start menu or go under ZappySys &gt; ODBC PowerPack &gt; <strong>ODBC 64 bit</strong>)</li>
 	<li>Goto <strong>System DSN</strong> Tab (or User DSN which is not used by Service account)</li>
 	<li>Click <strong>Add</strong> and Select ZappySys XML Driver
<a href="https://zappysys.com/blog/wp-content/uploads/2018/06/zappysys-odbc-xml-soap-api-driver.png"><img loading="lazy" decoding="async" class="size-full wp-image-3875" src="https://zappysys.com/blog/wp-content/uploads/2018/06/odbc-call-soap-api-6.png" alt="ZappySys ODBC Driver for XML / SOAP API" width="593" height="459" /></a>
ZappySys ODBC Driver for XML / SOAP API</li>
 	<li>Configure API URL, Request Method and Request Body as below
<a href="https://zappysys.com/blog/wp-content/uploads/2018/06/calling-soap-web-service-zappysys-xml-driver.png"><img loading="lazy" decoding="async" class="size-full wp-image-3876" src="https://zappysys.com/blog/wp-content/uploads/2018/06/odbc-call-soap-api-7.png" alt="ZappySys XML Driver - Calling SOAP API - Configure URL, Method, Body" width="916" height="874" /></a>
ZappySys XML Driver - Calling SOAP API - Configure URL, Method, Body</li>
 	<li><strong>(This step is Optional)</strong> If your SOAP API requires credentials then Select Connection Type to HTTP and configure as below.
<a href="https://zappysys.com/blog/wp-content/uploads/2018/06/soap-api-call-credential-basic-soap-wss-zappysys-xml-driver.png"><img loading="lazy" decoding="async" class="size-full wp-image-3877" src="https://zappysys.com/blog/wp-content/uploads/2018/06/odbc-call-soap-api-8.png" alt="ZappySys XML Driver - Configure SOAP WSS Credentials or Basic Authorization (Userid, Password)" width="564" height="483" /></a>
<div style="display: block;">ZappySys XML Driver - Configure SOAP WSS Credentials or Basic Authorization (Userid, Password)</div></li>
 	<li>Configure-Request Headers as below (You can get it from Request &gt; Raw tab from SoapUI after you test the request by clicking the Play button)
<a href="https://zappysys.com/blog/wp-content/uploads/2018/06/set-soap-api-request-headers-zappysys-xml-driver.png"><img loading="lazy" decoding="async" class="size-full wp-image-3881" src="https://zappysys.com/blog/wp-content/uploads/2018/06/odbc-call-soap-api-9.png" alt="Configure SOAP API Request Headers - ZappySys XML Driver" width="1009" height="747" /></a>
Configure SOAP API Request Headers - ZappySys XML Driver</li>
 	<li>Once credentials entered you can select Filter to extract data from the desired node. Make sure to select array node (see special icon) or select the node which contains all necessary columns if you don't have array node.
<a href="https://zappysys.com/blog/wp-content/uploads/2018/06/soap-api-query-select-filter-zappysys-xml-driver.png"><img loading="lazy" decoding="async" class="size-full wp-image-3882" src="https://zappysys.com/blog/wp-content/uploads/2018/06/odbc-call-soap-api-10.png" alt="Select Filter - Extract data from nested XML / SOAP API Response (Denormalize Hierarchy)" width="809" height="594" /></a>
Select Filter - Extract data from nested XML / SOAP API Response (Denormalize Hierarchy)</li>
 	<li>If prompted select yes to treat selected node as Array (This is helpful when you expect one or more record for selected node)
<a href="https://zappysys.com/blog/wp-content/uploads/2018/06/xml-api-array-handling-zappysys-xml-driver.png"><img loading="lazy" decoding="async" class="size-full wp-image-3883" src="https://zappysys.com/blog/wp-content/uploads/2018/06/odbc-call-soap-api-11.png" alt="Treat selected node as XML Array Option for SOAP API Response XML" width="655" height="572" /></a>
Treat selected node as XML Array Option for SOAP API Response XML</li>
</ol>
<h3>Preview SOAP API Response / Generate SQL Code for SOAP API Call</h3>
Once you configure settings for XML Driver now you can preview data or generate example code for desired language (e.g. C#, Python, Java, SQL Server).

Go to Preview tab and you will see default query generated based on settings you entered in previous sections. Attributes listed in WITH clause are optional. If you omit attribute in WITH clause it will use it from Properties tab.
<h3>Preview Data</h3>
<a href="https://zappysys.com/blog/wp-content/uploads/2018/06/calling-soap-web-service-zappysys-xml-api-driver.png"><img loading="lazy" decoding="async" class="size-full wp-image-3884" src="https://zappysys.com/blog/wp-content/uploads/2018/06/odbc-call-soap-api-12.png" alt="Preview SOAP API Response in ZappySys XML Driver" width="808" height="780" /></a>
Preview SOAP API Response in ZappySys XML Driver
<h3>Generate Code Option</h3>
<a href="https://zappysys.com/blog/wp-content/uploads/2018/06/zappysys-driver-code-generator.png"><img loading="lazy" decoding="async" class="size-full wp-image-3885" src="https://zappysys.com/blog/wp-content/uploads/2018/06/odbc-call-soap-api-13.png" alt="Generate Example Code for ZappySys Driver" width="572" height="618" /></a>
<div style="display: block;">Generate Example Code for ZappySys Driver</div></div>
<h2>Import XML SOAP Web Service in Power BI (Using XML Driver)</h2>
<p>Once you know how to craft SQL Queries for SOAP API calls, and you save created DSN as per the previous section we are ready to load data into Power BI from XML Web Service.</p>
<p>So let&#8217;s get started.</p>
<ol>
<li>First launch Power BI and Click on Get Data &gt;&gt; More Data &gt;&gt; Other &gt;&gt; ODBC
<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 ODBC DSN Source from the dropdown (Assuming you have created a ODBC Data Source using ZappySys XML Driver &#8211; See the previous Section)</li>
<li>Expand Advanced Options to enter custom Query.</li>
<li>Enter your SOAP API call SQL query here. For example purpose, we will use below query to try demo SOAP web service.<br />
<pre class="crayon-plain-tag">SELECT * FROM $
WITH(
	 Src='http://www.holidaywebservice.com/HolidayService_v2/HolidayService2.asmx'
	,DataConnectionType='HTTP'
	,CredentialType='Basic' --OR SoapWss
	,SoapWssPasswordType='PasswordText'
	,UserName='myuser'
	,Password='pass$$w123'
	,Filter='$.soap:Envelope.soap:Body.GetHolidaysAvailableResponse.GetHolidaysAvailableResult.HolidayCode[*]'
	,ElementsToTreatAsArray='HolidayCode'	
	,RequestMethod='POST'	
	,Header='Content-Type: text/xml;charset=UTF-8 || SOAPAction: "http://www.holidaywebservice.com/HolidayService_v2/GetHolidaysAvailable"'
	,RequestData='
&lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:hol="http://www.holidaywebservice.com/HolidayService_v2/"&gt;
   &lt;soapenv:Header/&gt;
   &lt;soapenv:Body&gt;
      &lt;hol:GetHolidaysAvailable&gt;
         &lt;!--type: Country - enumeration: [Canada,GreatBritain,IrelandNorthern,IrelandRepublicOf,Scotland,UnitedStates]--&gt;
         &lt;hol:countryCode&gt;UnitedStates&lt;/hol:countryCode&gt;
      &lt;/hol:GetHolidaysAvailable&gt;
   &lt;/soapenv:Body&gt;
&lt;/soapenv:Envelope&gt;'
)</pre>
<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">Enter custom SQL to load 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 SOAP Web Service Import</p></div></li>
<li>That&#8217;s it. Use your dataset to build Power BI dashboard and when you ready to publish just hit Publish Button.</li>
</ol>
<h2></h2>
<h2>Using Parameters in Power BI (Dynamic Query)</h2>
<div class="content_block" id="custom_post_widget-3954">In the real world, many values of your REST / SOAP API call may be coming from Parameters. If that'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 />
<a href="https://zappysys.com/blog/wp-content/uploads/2018/03/power-bi-import-odbc-sql-query-pass-parameters-dynamically.png"><img loading="lazy" 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 />
&nbsp;
<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>
&nbsp;
</div>
<h2>SOAP XML / REST API pagination in Power BI</h2>
<div class="content_block" id="custom_post_widget-3892"><div style="margin-bottom: 1em;">Even we set up ODBC Data Source to get the data, it may not be enough. Usually, if you are getting a huge data set from API provider, it won't give it to you in one HTTP response. Instead, it gives back only a subset of data and provides a mechanism for data pagination. The good news is that <em>ZappySys ODBC Driver</em> includes many options to cover virtually any pagination method.</div>
<div><span style="font-size: 16px;">Below you will find a few examples of API pagination. If you need something more sophisticated check the below link (the article was written for SSIS PowerPack but UI options and concepts apply to ODBC Driver too):</span></div>
<div style="margin-bottom: 1em;"><a href="https://zappysys.com/blog/ssis-rest-api-looping-until-no-more-pages-found/" target="_blank" rel="noopener">https://zappysys.com/blog/ssis-rest-api-looping-until-no-more-pages-found/</a></div>
<h3>Paginate by Response Attribute</h3>
This example shows how to paginate API calls where you need to paginate until the last page detected. In this example, next page is indicated by some attribute called nextlink (found in response). If this attribute is missing or null then it stops fetching the next page.
<pre class="lang:tsql decode:true codeblock">SELECT * FROM $
WITH(
SRC=@'https://zappysys.com/downloads/files/test/pagination_nextlink_inarray_1.json'
,NextUrlAttributeOrExpr = '$.nextlink'  --keep reading until this attribute is missing. If attribute name contains dot then use brackets like this $.['my.attr.name']
)</pre>
<h3>Paginate by URL Parameter (Loop until certain StatusCode)</h3>
This example shows how to paginate API calls where you need to pass page number via URL. The driver keeps incrementing page number and calls next URL until the last page detected (401 error). There are few ways to indicate the last page (e.g. By status code, By row count, By response size). If you don't specify end detection then it will use the default (i.e. No records found).
<pre class="lang:tsql decode:true codeblock">SELECT * FROM $
WITH (
SRC=@'https://zappysys.com/downloads/files/test/page-xml.aspx?page=1&amp;mode=DetectBasedOnResponseStatusCode'
,PagingMode='ByUrlParameter'
,PagingByUrlAttributeName='page'
,PagingByUrlEndStrategy='DetectBasedOnResponseStatusCode'
,PagingByUrlCheckResponseStatusCode=401
,IncrementBy=1
)</pre>
<h3>Paginate by URL Path (Loop until no record)</h3>
This example shows how to paginate API calls where you need to pass page number via URL Path. The driver keeps incrementing page number and calls next URL until the last page is detected. There are few ways to indicate the last page (e.g. By status code, By row count, By response size). If you don't specify end detection then it will use the default (i.e. No records found).
<pre class="lang:tsql decode:true codeblock">SELECT * FROM $
WITH (
SRC=@'https://zappysys.com/downloads/files/test/cust-&lt;%page%&gt;.xml'
,PagingMode='ByUrlPath'
,PagingByUrlAttributeName='&lt;%page%&gt;'
,PagingByUrlEndStrategy='DetectBasedOnRecordCount'
,IncrementBy=1
)</pre>
<h3>Paginate by Header Link (RFC 5988)</h3>
API like GitHub / Wordpress use Next link in Headers (<a href="https://tools.ietf.org/html/rfc5988" target="_blank" rel="noopener">RFC 5988</a>)
<pre class="lang:default decode:true ">SELECT * FROM $
LIMIT 25
WITH(
	 Src='https://wordpress.org/news/wp-json/wp/v2/categories?per_page=10'
	,PagingMode='ByResponseHeaderRfc5988'
	,WaitTimeMs='200' --//wait 200 ms after each request
)</pre>
&nbsp;</div>
<h2>SOAP XML / REST API Error Handling in Power BI</h2>
<div class="content_block" id="custom_post_widget-3894">Sometimes errors occur... they just do and there is nothing you can do! Or can you? Actually, in ODBC PowerPack you can handle them in two ways.
<h3>METHOD 1 - Using Error Handling Options</h3>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-3949" src="https://zappysys.com/blog/wp-content/uploads/2018/06/odbc-api-error-handling-1.png" alt="" width="668" height="702" />
<h4>When to use?</h4>
You may want to use them when your source is a resource located on the Internet; e.g. a file on a website, a file on an FTP server or just a plain API HTTP response. By default, when a remote server returns an error, data retrieval is stopped, an error is raised and no data is given back to you. This might not be always desirable.
<h4>Scenario 1</h4>
Imagine a scenario, that there is a web server which each day at 12 AM releases a new JSON file with that day's date as filename, e.g. <span style="text-decoration: underline;"><em>http://www.some-server.com/data/2018-06-20.json</em></span>. And, of course, you want to download it and use it daily in your Power BI report. But you have a problem: Power BI report data sources are refreshed each hour and you may get <a href="https://en.wikipedia.org/wiki/HTTP_404" target="_blank" rel="noopener">HTTP 404 status code</a> (no file was found) when a file is not released yet. Which consequentially means other data sources won't be updated as well and you will see old and cached data on the report. That's where you could use <strong><span class="lang:default highlight:0 decode:true crayon-inline">Continue on any error</span></strong> or <strong><span class="lang:default highlight:0 decode:true crayon-inline">Continue when Url is invalid or missing (404 Errors)</span></strong> to avoid an error being raised and let other data sources to be updated.
<h4>Scenario 2</h4>
Another scenario is when you expect a web server to raise some kind of HTTP error when accessing a URL. You don't want ODBC Data Source to raise an error but instead, you want to get response data. That's where you can use <strong><span class="lang:default highlight:0 decode:true crayon-inline">Continue on any error</span></strong> or alike together with  <strong><span class="lang:default highlight:0 decode:true crayon-inline">Get response data on error</span></strong> to continue on an error and get the data:

<img loading="lazy" decoding="async" class="alignnone wp-image-3961 size-full" src="https://zappysys.com/blog/wp-content/uploads/2018/06/odbc-powerpack-get-response-data-on-error.png" alt="" width="547" height="235" srcset="https://zappysys.com/blog/wp-content/uploads/2018/06/odbc-powerpack-get-response-data-on-error.png 547w, https://zappysys.com/blog/wp-content/uploads/2018/06/odbc-powerpack-get-response-data-on-error-300x129.png 300w" sizes="(max-width: 547px) 100vw, 547px" />
<h3>METHOD 2 - Using Connection [Retry Settings]</h3>
Another scenario you may run into is a buggy web server. You ask it to give you some file or data and it, like a snotty kid, just doesn't give it to you! You have to ask twice or thrice before it does its job. If that's the case, you have to retry HTTP requests using <em>Connection</em>:

<img loading="lazy" decoding="async" class="alignnone wp-image-3963 size-full" src="https://zappysys.com/blog/wp-content/uploads/2018/06/odbc-api-error-handling-3.png" alt="" width="671" height="572" /></div>
<h2>Security / Connection Types (Options for HTTP, OAuth, SOAP) in Power BI</h2>
<div class="content_block" id="custom_post_widget-3896"><div style="margin-bottom: 1em;">If you need to authenticate or authorize your user to access a web resource, you will need to use one of the <em>Connections:</em></div>
<ul>
 	<li>HTTP</li>
 	<li>OAuth</li>
</ul>
<img loading="lazy" decoding="async" class="wp-image-4078 size-full" src="https://zappysys.com/blog/wp-content/uploads/2018/06/odbc-powerpack-authentication-authorization-e1529337108252.png" alt="ZappySys XML Driver - HTTP and OAuth Connection Types" width="577" height="302" srcset="https://zappysys.com/blog/wp-content/uploads/2018/06/odbc-powerpack-authentication-authorization-e1529337108252.png 577w, https://zappysys.com/blog/wp-content/uploads/2018/06/odbc-powerpack-authentication-authorization-e1529337108252-300x157.png 300w" sizes="(max-width: 577px) 100vw, 577px" />
<h3>HTTP Connection</h3>
<div style="margin-bottom: 1em;">Use <em>HTTP Connection</em> for simple Windows, Basic, NTLM or Kerberos authentication. Just fill in a username and a password and you are good to go!</div>
<div style="margin-bottom: 1em;">You can also use <em>HTTP Connection</em> for more sophisticated authentication like:</div>
<ul>
 	<li><strong>SOAP WSS</strong> (when accessing a SOAP WebService)</li>
 	<li><strong>Static Token / API Key</strong> (when need to pass an API key in HTTP header)</li>
 	<li><strong>Dynamic Token</strong> (same as Static Token method except that each time you need to log in and retrieve a fresh API key)</li>
 	<li><strong>JWT Token</strong> (As per RFC 7519)</li>
</ul>
<img loading="lazy" decoding="async" class="alignnone wp-image-4091 size-full" src="https://zappysys.com/blog/wp-content/uploads/2018/06/odbc-api-connection-type-1.png" alt="" width="622" height="570" />
<h3>OAuth</h3>
If you are trying to access REST API resource, it is a huge chance, you will need to use <em>OAuth Connection</em>. <a href="https://zappysys.com/blog/rest-api-authentication-with-oauth-2-0-using-ssis/" target="_blank" rel="noopener">Read this article</a> to understand how OAuth authentication and authorization works and how to use it (article originally was written for <a href="https://zappysys.com/products/ssis-powerpack/" target="_blank" rel="noopener">SSIS PowerPack</a>, but the concepts and UI stay the same): <br/>
<a href="https://zappysys.com/blog/rest-api-authentication-with-oauth-2-0-using-ssis/" target="_blank" rel="noopener">https://zappysys.com/blog/rest-api-authentication-with-oauth-2-0-using-ssis/</a>
<img loading="lazy" decoding="async" class="alignnone size-full" src="https://zappysys.com/blog/wp-content/uploads/2018/06/odbc-api-connection-type-2.png" width="721" height="708" /></div>
<h2>Other Considerations for Calling Web API in Power BI</h2>
<div class="content_block" id="custom_post_widget-3901">There are few settings you can coder while calling Web API
<h3><strong>API Limit / Throttling</strong></h3>
While calling public API or other external web services one important aspect you have to check,  how many requests are allowed by your API. Especially when you use API pagination options to pull many records you have to slow down based on API limits. For example, your API may allow you only 5 requests per second. Use Throttling Tab on Driver UI to set delay after each request.
<h3><strong>2D Array Transformation</strong></h3>
If you are using JSON or XML API Driver then possible you may have to transform your data using 2D array transformation feature. <a href="https://zappysys.com/blog/parse-multi-dimensional-json-array-ssis/" target="_blank" rel="noopener">Check this link</a> for more information.

&nbsp;</div>
<h2>Conclusion</h2>
<p>In this article, we explored possibilities to load SOAP API data in Power BI without any coding or ETL approach. You can build powerful dashboards and reports by consuming data from any REST / XML SOAP API services using ZappySys Drivers. You can <a href="https://zappysys.com/products/odbc-powerpack/" target="_blank" rel="noopener">download ZappySys ODBC Drivers</a> and try yourself to learn many other features not covered in this article.</p>
<p>The post <a href="https://zappysys.com/blog/call-soap-api-power-bi-read-xml-web-service-data/">Calling SOAP API in Power BI (Read XML Web Service data)</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>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>
