<?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>SSIS Tasks Archives | ZappySys Blog</title>
	<atom:link href="https://zappysys.com/blog/category/ssis/tasks/feed/" rel="self" type="application/rss+xml" />
	<link>https://zappysys.com/blog/category/ssis/tasks/</link>
	<description>SSIS / ODBC Drivers / API Connectors for JSON, XML, Azure, Amazon AWS, Salesforce, MongoDB and more</description>
	<lastBuildDate>Thu, 02 Apr 2026 19:28:01 +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>SSIS Tasks Archives | ZappySys Blog</title>
	<link>https://zappysys.com/blog/category/ssis/tasks/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>SSIS tutorial: How to connect Blogger with SSIS</title>
		<link>https://zappysys.com/blog/ssis-tutorial-how-to-connect-blogger-with-ssis/</link>
		
		<dc:creator><![CDATA[ZappySys Team]]></dc:creator>
		<pubDate>Fri, 27 Mar 2026 11:41:30 +0000</pubDate>
				<category><![CDATA[SSIS JSON Source (File/REST)]]></category>
		<category><![CDATA[SSIS PowerPack]]></category>
		<category><![CDATA[SSIS REST API Task]]></category>
		<category><![CDATA[SSIS Upsert Destination]]></category>
		<guid isPermaLink="false">https://zappysys.com/blog/?p=11893</guid>

					<description><![CDATA[<p>Introduction This tutorial walks you through the process of extracting blog posts and comments data from Blogger using the REST API and Zappysys SSIS connectors. In this guide, you will learn how to authenticate with the Blogger REST API, configure a Zappysys REST data source, and load extracted data into SQL Server. This approach eliminates [&#8230;]</p>
<p>The post <a href="https://zappysys.com/blog/ssis-tutorial-how-to-connect-blogger-with-ssis/">SSIS tutorial: How to connect Blogger with SSIS</a> appeared first on <a href="https://zappysys.com/blog">ZappySys Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Introduction</h2>
<p class="intro-text"><a href="https://zappysys.com/blog/wp-content/uploads/2026/03/logo.png"><img decoding="async" class=" wp-image-11901 alignleft" src="https://zappysys.com/blog/wp-content/uploads/2026/03/logo-150x150.png" alt="Blogger Logo" width="134" height="134" srcset="https://zappysys.com/blog/wp-content/uploads/2026/03/logo-150x150.png 150w, https://zappysys.com/blog/wp-content/uploads/2026/03/logo-300x300.png 300w, https://zappysys.com/blog/wp-content/uploads/2026/03/logo.png 512w" sizes="(max-width: 134px) 100vw, 134px" /></a>This tutorial walks you through the process of extracting blog posts and comments data from Blogger using the REST API and Zappysys SSIS connectors. In this guide, you will learn how to authenticate with the Blogger REST API, configure a Zappysys REST data source, and load extracted data into SQL Server. This approach eliminates the need for custom code and provides a graphical interface for managing complex API integrations.</p>
<p class="intro-text">Zappysys provides a powerful REST connector that simplifies integrating cloud-based APIs into your SQL Server Integration Services packages. We will demonstrate a practical ETL pattern using ZappySys REST connectivity to extract data from Blogger and load it into SQL Server within SSIS.</p>
<p><!-- Prerequisites --></p>
<h2>Prerequisites</h2>
<p>Before you begin, make sure you have the following:</p>
<ul>
<li>First, you will need to have SSIS installed</li>
<li>Secondly, make sure to have SSDT</li>
<li>Thirdly, access to a Blogger blog with appropriate permissions to read public posts and comments.</li>
<li>Finally, do not forget to install ZappySys <a href="https://zappysys.com/products/ssis-powerpack/" target="_blank" rel="noopener">SSIS PowerPack.</a></li>
</ul>
<p><!-- Step-by-Step Guide --></p>
<h2>Steps</h2>
<h3>Create/Select a Project in the Google API Console</h3>
<ol>
<li>Navigate to the <a href="https://console.developers.google.com/">Google API Console</a>.</li>
<li>Click on the Project Dropdown at the top bar and either select an existing project or create a new one by clicking <strong>CREATE PROJECT</strong>.
<div id="attachment_11905" style="width: 807px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/03/Google-Console-Create-or-select-project.png"><img fetchpriority="high" decoding="async" aria-describedby="caption-attachment-11905" class="wp-image-11905 size-full" src="https://zappysys.com/blog/wp-content/uploads/2026/03/Google-Console-Create-or-select-project.png" alt="" width="797" height="255" srcset="https://zappysys.com/blog/wp-content/uploads/2026/03/Google-Console-Create-or-select-project.png 797w, https://zappysys.com/blog/wp-content/uploads/2026/03/Google-Console-Create-or-select-project-300x96.png 300w, https://zappysys.com/blog/wp-content/uploads/2026/03/Google-Console-Create-or-select-project-768x246.png 768w" sizes="(max-width: 797px) 100vw, 797px" /></a><p id="caption-attachment-11905" class="wp-caption-text">Google Console &#8211; Create or select a project</p></div></li>
<li>Once the project is set, click <strong>ENABLE APIS AND SERVICES</strong>.</li>
<li>Search for the <strong>Blogger API v3</strong> and click <strong>ENABLE</strong>.
<div id="attachment_11903" style="width: 690px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/03/Google-Console-Enable-Blogger-API.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11903" class="wp-image-11903 size-full" src="https://zappysys.com/blog/wp-content/uploads/2026/03/Google-Console-Enable-Blogger-API.png" alt="" width="680" height="265" srcset="https://zappysys.com/blog/wp-content/uploads/2026/03/Google-Console-Enable-Blogger-API.png 680w, https://zappysys.com/blog/wp-content/uploads/2026/03/Google-Console-Enable-Blogger-API-300x117.png 300w" sizes="(max-width: 680px) 100vw, 680px" /></a><p id="caption-attachment-11903" class="wp-caption-text">Google Console &#8211; Enable Blogger API</p></div></li>
<li>Return to the main screen and click on the <strong>OAuth Consent Screen</strong> tab.</li>
<li>Select the <strong>External</strong> user type and click <strong>CREATE</strong>.</li>
<li>Provide the application name, user support email, and developer contact information, then click <strong>SAVE AND CONTINUE</strong>.</li>
<li>Click through the remaining scopes and summary pages (no additional scopes are required for this tutorial), and click <strong>SAVE AND CONTINUE</strong> on each.</li>
<li>Move to the <strong>Credentials</strong> tab.</li>
<li>Click <strong>CREATE CREDENTIALS</strong> in the top bar, choose <strong>OAuth Client ID</strong>, select <strong>Desktop App</strong> as the Application Type, and click <strong>Create</strong> to obtain your Client ID and Secret.
<div id="attachment_11904" style="width: 910px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/03/Google-Console-Create-credentials.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11904" class="wp-image-11904 size-full" src="https://zappysys.com/blog/wp-content/uploads/2026/03/Google-Console-Create-credentials.png" alt="" width="900" height="335" srcset="https://zappysys.com/blog/wp-content/uploads/2026/03/Google-Console-Create-credentials.png 900w, https://zappysys.com/blog/wp-content/uploads/2026/03/Google-Console-Create-credentials-300x112.png 300w, https://zappysys.com/blog/wp-content/uploads/2026/03/Google-Console-Create-credentials-768x286.png 768w" sizes="(max-width: 900px) 100vw, 900px" /></a><p id="caption-attachment-11904" class="wp-caption-text">Google Console &#8211; Create credentials</p></div></li>
<li>Download the credentials JSON file and save it in a secure location on your development machine.</li>
</ol>
<h3>Create the OAuth connection for Blogger</h3>
<ol>
<li>Create or select your SSIS project, and open the package.dtsx file.</li>
<li>Drag and drop the ZS REST API task from the Toolbox.</li>
<li>Inside<strong> Connection Manager</strong>, right-click and select <strong>New connection&#8230;</strong></li>
<li>Inside the SSIS connectors, select the <strong><strong>ZS-OAuth<br />
</strong></strong></p>
<div id="attachment_11825" style="width: 959px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2020/02/Create-a-new-SSIS-OAuth-API-Connection-Manager.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11825" class="size-full wp-image-11825" src="https://zappysys.com/blog/wp-content/uploads/2020/02/Create-a-new-SSIS-OAuth-API-Connection-Manager.png" alt="" width="949" height="447" srcset="https://zappysys.com/blog/wp-content/uploads/2020/02/Create-a-new-SSIS-OAuth-API-Connection-Manager.png 949w, https://zappysys.com/blog/wp-content/uploads/2020/02/Create-a-new-SSIS-OAuth-API-Connection-Manager-300x141.png 300w, https://zappysys.com/blog/wp-content/uploads/2020/02/Create-a-new-SSIS-OAuth-API-Connection-Manager-768x362.png 768w" sizes="(max-width: 949px) 100vw, 949px" /></a><p id="caption-attachment-11825" class="wp-caption-text">Create a new SSIS OAuth API Connection Manager</p></div></li>
<li>Select the <strong>Google API provider</strong></li>
<li>Enter the <strong>Client</strong> ID and <strong>Client Secret</strong> you generated in the past step</li>
<li>Use Blogger URL scope: <code>https://www.googleapis.com/auth/blogger</code></li>
<li>Generate the token</li>
<li>Test the connection to ensure it is working correctly.</li>
<li>Click OK to save the connection.
<div id="attachment_11907" style="width: 713px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/03/OAuth-connection-Blogger-API.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11907" class="size-full wp-image-11907" src="https://zappysys.com/blog/wp-content/uploads/2026/03/OAuth-connection-Blogger-API.png" alt="" width="703" height="698" srcset="https://zappysys.com/blog/wp-content/uploads/2026/03/OAuth-connection-Blogger-API.png 703w, https://zappysys.com/blog/wp-content/uploads/2026/03/OAuth-connection-Blogger-API-300x298.png 300w, https://zappysys.com/blog/wp-content/uploads/2026/03/OAuth-connection-Blogger-API-150x150.png 150w" sizes="(max-width: 703px) 100vw, 703px" /></a><p id="caption-attachment-11907" class="wp-caption-text">OAuth connection &#8211; Blogger API</p></div></li>
</ol>
<h3>Get information from a Blog</h3>
<ol>
<li>Create a string variable <code>{{User::BlogID}}</code> and enter the ID from the blog you want to get information from.</li>
<li>From the SSIS Toolbox, drag the<a href="https://zappysys.com/products/ssis-powerpack/ssis-rest-api-web-service-task/"><strong> ZS REST API Task</strong></a> onto the Control Flow designer.</li>
<li>Double-click the task to open the editor.</li>
<li>Select the connection manager you created in the previous step.</li>
<li>In the URL Path field, enter: <code>https://www.googleapis.com/blogger/v3/blogs/{{User::BlogID}}/posts</code></li>
<li>Set the HTTP method to <strong>GET</strong>.</li>
<li>Click the Preview tab to test the API connection and view sample data.</li>
<li>If the preview is successful, click OK to configure the task.
<div id="attachment_11908" style="width: 917px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/03/REST-API-task-Blogger-example.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11908" class="size-full wp-image-11908" src="https://zappysys.com/blog/wp-content/uploads/2026/03/REST-API-task-Blogger-example.png" alt="" width="907" height="729" srcset="https://zappysys.com/blog/wp-content/uploads/2026/03/REST-API-task-Blogger-example.png 907w, https://zappysys.com/blog/wp-content/uploads/2026/03/REST-API-task-Blogger-example-300x241.png 300w, https://zappysys.com/blog/wp-content/uploads/2026/03/REST-API-task-Blogger-example-768x617.png 768w" sizes="(max-width: 907px) 100vw, 907px" /></a><p id="caption-attachment-11908" class="wp-caption-text">REST API task &#8211; Blogger example</p></div></li>
</ol>
<h3>Save the information in a SQL table</h3>
<ol>
<li>Drag and drop a Data Flow into the Control Flow and double-click it.
<div id="attachment_11784" style="width: 485px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/Drag-and-drop-Data-flow.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11784" class="size-full wp-image-11784" src="https://zappysys.com/blog/wp-content/uploads/2026/02/Drag-and-drop-Data-flow.png" alt="" width="475" height="178" srcset="https://zappysys.com/blog/wp-content/uploads/2026/02/Drag-and-drop-Data-flow.png 475w, https://zappysys.com/blog/wp-content/uploads/2026/02/Drag-and-drop-Data-flow-300x112.png 300w" sizes="(max-width: 475px) 100vw, 475px" /></a><p id="caption-attachment-11784" class="wp-caption-text">Drag and drop Data flow.</p></div></li>
<li>In the Data Flow, drag and drop the <a href="https://zappysys.com/products/ssis-powerpack/ssis-json-file-source/" target="_blank" rel="noopener"><strong>JSON source,</strong></a> then double-click it to configure it.
<div id="attachment_11533" style="width: 553px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2015/09/ssis-json-source-adapter-drag.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11533" class="size-full wp-image-11533" src="https://zappysys.com/blog/wp-content/uploads/2015/09/ssis-json-source-adapter-drag.png" alt="" width="543" height="146" srcset="https://zappysys.com/blog/wp-content/uploads/2015/09/ssis-json-source-adapter-drag.png 543w, https://zappysys.com/blog/wp-content/uploads/2015/09/ssis-json-source-adapter-drag-300x81.png 300w" sizes="(max-width: 543px) 100vw, 543px" /></a><p id="caption-attachment-11533" class="wp-caption-text">SSIS JSON Source &#8211; Drag and Drop</p></div></li>
<li>Use the same configuration as in the REST API task, but first enable the <strong>Use credentials </strong>option.</li>
<li>Enter the <strong>URL</strong>, select the <strong>OAuth</strong> connection, and use the Method <strong>GET</strong>.</li>
<li>You can use the filter option to get the object you want to get data from: <code>$.Items[*]</code></li>
<li>Preview the data and click <strong>OK</strong> to save the configuration.
<div id="attachment_11911" style="width: 837px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/03/JSON-Source-Blogger-Example-Request.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11911" class="size-full wp-image-11911" src="https://zappysys.com/blog/wp-content/uploads/2026/03/JSON-Source-Blogger-Example-Request.png" alt="" width="827" height="725" srcset="https://zappysys.com/blog/wp-content/uploads/2026/03/JSON-Source-Blogger-Example-Request.png 827w, https://zappysys.com/blog/wp-content/uploads/2026/03/JSON-Source-Blogger-Example-Request-300x263.png 300w, https://zappysys.com/blog/wp-content/uploads/2026/03/JSON-Source-Blogger-Example-Request-768x673.png 768w" sizes="(max-width: 827px) 100vw, 827px" /></a><p id="caption-attachment-11911" class="wp-caption-text">JSON Source &#8211; Blogger Example Request</p></div>
<div class="mceTemp"></div>
</li>
<li>Now drag and drop a destination component. In our case, we will use the Upsert destination component.
<div id="attachment_9644" style="width: 837px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2017/08/ssis-data-flow-drag-drop-upsert-destination.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9644" class="size-full wp-image-9644" src="https://zappysys.com/blog/wp-content/uploads/2017/08/ssis-data-flow-drag-drop-upsert-destination.png" alt="SSIS - Data Flow - Drag and Drop Upsert Destination Component" width="827" height="385" srcset="https://zappysys.com/blog/wp-content/uploads/2017/08/ssis-data-flow-drag-drop-upsert-destination.png 827w, https://zappysys.com/blog/wp-content/uploads/2017/08/ssis-data-flow-drag-drop-upsert-destination-300x140.png 300w, https://zappysys.com/blog/wp-content/uploads/2017/08/ssis-data-flow-drag-drop-upsert-destination-768x358.png 768w" sizes="(max-width: 827px) 100vw, 827px" /></a><p id="caption-attachment-9644" class="wp-caption-text">SSIS &#8211; Data Flow &#8211; Drag and Drop Upsert Destination Component</p></div></li>
<li>Double-click in the <a href="https://zappysys.com/products/ssis-powerpack/ssis-upsert-destination/">Upsert destination</a> component to configure it.</li>
<li>Select the Action you want to use.</li>
<li>Create or select a database connector.</li>
<li>Create or select a table.</li>
<li>Use the options <strong>Insert</strong> or/and <strong>Update.</strong></li>
<li>Map the column; if the columns have the same name, it will be automatic.</li>
<li>Select at least one column for a <strong>primary key</strong>.</li>
<li>Click <strong>OK</strong> to save the configuration.
<div id="attachment_11912" style="width: 968px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/03/Upsert-destination-Blogger-example.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11912" class="size-full wp-image-11912" src="https://zappysys.com/blog/wp-content/uploads/2026/03/Upsert-destination-Blogger-example.png" alt="" width="958" height="645" srcset="https://zappysys.com/blog/wp-content/uploads/2026/03/Upsert-destination-Blogger-example.png 958w, https://zappysys.com/blog/wp-content/uploads/2026/03/Upsert-destination-Blogger-example-300x202.png 300w, https://zappysys.com/blog/wp-content/uploads/2026/03/Upsert-destination-Blogger-example-768x517.png 768w, https://zappysys.com/blog/wp-content/uploads/2026/03/Upsert-destination-Blogger-example-272x182.png 272w" sizes="(max-width: 958px) 100vw, 958px" /></a><p id="caption-attachment-11912" class="wp-caption-text">Upsert destination &#8211; Blogger example</p></div></li>
<li>Run the package, and you will see the data from Blogger in your database
<div id="attachment_11930" style="width: 350px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/03/Blogger-result.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11930" class="size-full wp-image-11930" src="https://zappysys.com/blog/wp-content/uploads/2026/03/Blogger-result.png" alt="" width="340" height="207" srcset="https://zappysys.com/blog/wp-content/uploads/2026/03/Blogger-result.png 340w, https://zappysys.com/blog/wp-content/uploads/2026/03/Blogger-result-300x183.png 300w" sizes="(max-width: 340px) 100vw, 340px" /></a><p id="caption-attachment-11930" class="wp-caption-text">Blogger &#8211; result</p></div></li>
</ol>
<p><!-- Code Examples --></p>
<h2>Code Examples</h2>
<h3>Sample REST API Request</h3>
<p>Here&#8217;s an example of retrieving blog posts using the Blogger REST API:</p><pre class="crayon-plain-tag">GET https://www.googleapis.com/blogger/v3/blogs/{blogId}/posts
Authorization: Bearer {access_token}
Content-Type: application/json</pre><p>
Example response:</p><pre class="crayon-plain-tag">{
  &quot;kind&quot;: &quot;blogger#posts&quot;,
  &quot;items&quot;: [
    {
      &quot;kind&quot;: &quot;blogger#post&quot;,
      &quot;id&quot;: &quot;7109703471293209437&quot;,
      &quot;title&quot;: &quot;Getting started with Blogger API&quot;,
      &quot;content&quot;: &quot;Learn how to integrate Blogger with your applications...&quot;,
      &quot;published&quot;: &quot;2026-03-15T10:30:00Z&quot;,
      &quot;updated&quot;: &quot;2026-03-20T14:15:00Z&quot;,
      &quot;url&quot;: &quot;http://example.blogspot.com/2026/03/getting-started.html&quot;,
      &quot;author&quot;: {
        &quot;displayName&quot;: &quot;John Doe&quot;
      }
    }
  ]
}</pre><p>
<h3>SQL Table Structure</h3>
<p>Recommended table structure for storing Blogger posts data:</p><pre class="crayon-plain-tag">CREATE TABLE BloggerPosts (
    PostID BIGINT PRIMARY KEY,
    BlogID BIGINT NOT NULL,
    Title NVARCHAR(MAX),
    Content NVARCHAR(MAX),
    AuthorName NVARCHAR(255),
    PublishedDate DATETIME,
    UpdatedDate DATETIME,
    PostURL NVARCHAR(MAX),
    CreatedDate DATETIME DEFAULT GETDATE(),
    ModifiedDate DATETIME DEFAULT GETDATE()
);</pre><p>
<!-- Conclusion --></p>
<h2>Conclusion</h2>
<p class="intro-text">You have successfully learned how to use Zappysys SSIS connectors to extract data from the Blogger<br />
platform using the REST API. With ZappySys SSIS PowerPack, connecting Blogger to your SQL Server becomes<br />
straightforward and reliable. By configuring the REST connector for Blogger and using the native SSIS destination,<br />
you can build a robust ETL pipeline for extracting blog data.</p>
<p class="intro-text">Explore the full capabilities of the <a href="https://zappysys.com/products/ssis-powerpack/">ZappySys SSIS PowerPack</a> to optimize your data integration<br />
tasks. By applying this pattern, you can extend your solution to include additional transformations, data<br />
validation, error handling, and scheduling through SQL Server Agent.</p>
<p><!-- References --></p>
<p><!-- Need Help --></p>
<h2>Need Help?</h2>
<p class="section-intro">If you encounter any issues, our support team is here to help:</p>
<ol>
<li><strong>Live Chat</strong> — Use the chat widget (bottom-right corner of this page)</li>
<li><strong>Email</strong> — support@zappysys.com</li>
<li><strong>Support Center</strong> — Visit the ZappySys Support Portal</li>
</ol>
<p>The post <a href="https://zappysys.com/blog/ssis-tutorial-how-to-connect-blogger-with-ssis/">SSIS tutorial: How to connect Blogger with SSIS</a> appeared first on <a href="https://zappysys.com/blog">ZappySys Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>SSIS tutorial: How to load MariaDB data into MongoDB</title>
		<link>https://zappysys.com/blog/how-to-load-mariadb-data-into-mongodb/</link>
		
		<dc:creator><![CDATA[ZappySys Team]]></dc:creator>
		<pubDate>Fri, 27 Feb 2026 12:20:05 +0000</pubDate>
				<category><![CDATA[SSIS MongoDB ExecuteSQL]]></category>
		<guid isPermaLink="false">https://zappysys.com/blog/?p=11787</guid>

					<description><![CDATA[<p>Introduction In our previous post, we explored how to read and write MongoDB data using the ZappySys MongoDB Source and Destination SSIS connectors. In this article, you will learn how to connect MariaDB to MongoDB using ZappySys SSIS PowerPack and transfer data between both systems. We will demonstrate a practical ETL pattern using ZappySys ODBC/JDBC connectivity to [&#8230;]</p>
<p>The post <a href="https://zappysys.com/blog/how-to-load-mariadb-data-into-mongodb/">SSIS tutorial: How to load MariaDB data into MongoDB</a> appeared first on <a href="https://zappysys.com/blog">ZappySys Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Introduction</h2>
<p><img loading="lazy" decoding="async" class="size-full wp-image-2115 alignleft" src="https://zappysys.com/blog/wp-content/uploads/2017/08/mongodb-logo.png" alt="" width="88" height="88" />In our previous post, we explored how to read and write MongoDB data using the <a href="https://zappysys.com/products/ssis-powerpack/ssis-mongodb-source/" target="_blank" rel="noopener">ZappySys MongoDB Source</a> and <a href="https://zappysys.com/products/ssis-powerpack/ssis-mongodb-destination/" target="_blank" rel="noopener">Destination</a> SSIS connectors. In this article, you will learn how to connect MariaDB to MongoDB using ZappySys SSIS PowerPack and transfer data between both systems.</p>
<p>We will demonstrate a practical ETL pattern using ZappySys ODBC/JDBC connectivity to extract data from MariaDB and load it into MongoDB within SSIS.</p>
<h2>Prerequisites</h2>
<p>Before you begin, make sure you have the following:</p>
<ul>
<li>First, you will need to have SSIS installed</li>
<li>Secondly, make sure to have SSDT</li>
<li>Thirdly, access credentials for both MariaDB and MongoDB</li>
<li>Finally, do not forget to install ZappySys <a href="https://zappysys.com/products/ssis-powerpack/" target="_blank" rel="noopener">SSIS PowerPack</a> and ZappySys <a href="https://zappysys.com/products/ODBC-powerpack/" target="_blank" rel="noopener">ODBC PowerPack</a></li>
</ul>
<h2>Steps</h2>
<h3>Configure MariaDB Connection Using ODBC (JDBC Bridge)</h3>
<p>Since MariaDB connectivity is handled via JDBC, we will use the <strong>ZappySys JDBC Bridge Driver</strong> to expose it as an ODBC data source.</p>
<ol>
<li>Visit the <a href="https://mariadb.com/downloads/connectors/connectors-data-access/java8-connector">official MariaDB website</a>.</li>
<li>Download the latest <strong>MariaDB JDBC driver</strong>.</li>
<li>Save the <code inline="">.jar</code> file locally, for example: <span style="background-color: #f2f4f5; color: #222222; font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 12.8px;">D:\Zappysys\drivers\mariadb-java-client-3.5.7.jar</span></li>
<li>Download and install <a href="https://zappysys.com/products/odbc-powerpack/download/"><strong>ZappySys ODBC PowerPack</strong></a> if not already installed.</li>
<li>Open <strong>ODBC Data Sources (64-bit)</strong>.
<div id="attachment_6213" style="width: 404px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2019/01/how-to-open-odbc-data-source-administrator-2.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-6213" class="wp-image-6213 size-full" src="https://zappysys.com/blog/wp-content/uploads/2019/01/how-to-open-odbc-data-source-administrator-2.png" alt="" width="394" height="542" srcset="https://zappysys.com/blog/wp-content/uploads/2019/01/how-to-open-odbc-data-source-administrator-2.png 394w, https://zappysys.com/blog/wp-content/uploads/2019/01/how-to-open-odbc-data-source-administrator-2-218x300.png 218w" sizes="(max-width: 394px) 100vw, 394px" /></a><p id="caption-attachment-6213" class="wp-caption-text">Open ODBC Data Sources</p></div></li>
<li>Create a <strong>User data source</strong> (User DSN) based on <strong>ZappySys JDBC Bridge Driver</strong>:
<div id="attachment_11767" style="width: 632px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/Create-a-User-data-source.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11767" class="size-full wp-image-11767" src="https://zappysys.com/blog/wp-content/uploads/2026/02/Create-a-User-data-source.png" alt="" width="622" height="517" srcset="https://zappysys.com/blog/wp-content/uploads/2026/02/Create-a-User-data-source.png 622w, https://zappysys.com/blog/wp-content/uploads/2026/02/Create-a-User-data-source-300x249.png 300w" sizes="(max-width: 622px) 100vw, 622px" /></a><p id="caption-attachment-11767" class="wp-caption-text">Create a User data source</p></div></li>
<li>Configure the JDBC Connection. Fill in the connection details
<ul style="list-style-type: disc;">
<li><strong>Connection String  </strong><code>jdbc:mariadb://{host-name}:{port}/{database-name}<br />
</code></li>
<li><strong>JDBC Driver File </strong><code>D:\Zappysys\drivers\mariadb-java-client-3.5.7.jar<br />
</code></li>
<li><strong>Username </strong><code>root<br />
</code></li>
<li><strong>Password </strong><code>********<br />
</code></li>
<li><strong>Connection Parameters</strong><code>[]</code></li>
</ul>
</li>
<li>Click <strong>Test Connection</strong>. If configured correctly, you should see a success message.
<div class="mceTemp"></div>
<div id="attachment_11768" style="width: 814px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/Zappysys-JDBC-Mariadb.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11768" class="size-full wp-image-11768" src="https://zappysys.com/blog/wp-content/uploads/2026/02/Zappysys-JDBC-Mariadb.png" alt="" width="804" height="704" srcset="https://zappysys.com/blog/wp-content/uploads/2026/02/Zappysys-JDBC-Mariadb.png 804w, https://zappysys.com/blog/wp-content/uploads/2026/02/Zappysys-JDBC-Mariadb-300x263.png 300w, https://zappysys.com/blog/wp-content/uploads/2026/02/Zappysys-JDBC-Mariadb-768x672.png 768w" sizes="(max-width: 804px) 100vw, 804px" /></a><p id="caption-attachment-11768" class="wp-caption-text">Zappysys JDBC &#8211; MariaDB</p></div></li>
<li>You can also use the <strong>Preview</strong> tab to select the table and execute SQL queries. For advanced SQL examples, refer to the <a href="https://zappysys.com/onlinehelp/odbc-powerpack/index.htm#page=jdbc-odbc-driver-sql-query-examples.htm" target="_blank" rel="noopener">JDBC Bridge documentation</a>.
<div id="attachment_11769" style="width: 814px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/Zappysys-JDBC-MariaDB-preview-result.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11769" class="size-full wp-image-11769" src="https://zappysys.com/blog/wp-content/uploads/2026/02/Zappysys-JDBC-MariaDB-preview-result.png" alt="" width="804" height="704" srcset="https://zappysys.com/blog/wp-content/uploads/2026/02/Zappysys-JDBC-MariaDB-preview-result.png 804w, https://zappysys.com/blog/wp-content/uploads/2026/02/Zappysys-JDBC-MariaDB-preview-result-300x263.png 300w, https://zappysys.com/blog/wp-content/uploads/2026/02/Zappysys-JDBC-MariaDB-preview-result-768x672.png 768w" sizes="(max-width: 804px) 100vw, 804px" /></a><p id="caption-attachment-11769" class="wp-caption-text">Zappysys JDBC &#8211; MariaDB preview result</p></div></li>
</ol>
<h3>Connect MariaDB to SSIS</h3>
<ol>
<li>Open <strong>Visual Studio</strong>.</li>
<li>Create a <strong>New Project</strong>.</li>
<li>Select <strong>Integration Services Project</strong>.</li>
<li>Provide a project name and location, then click <strong>OK</strong>.</li>
<li>Drag and drop a <strong>Data Flow Task</strong> from the SSIS Toolbox onto the Control Flow surface.
<div id="attachment_11784" style="width: 485px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/Drag-and-drop-Data-flow.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11784" class="size-full wp-image-11784" src="https://zappysys.com/blog/wp-content/uploads/2026/02/Drag-and-drop-Data-flow.png" alt="" width="475" height="178" srcset="https://zappysys.com/blog/wp-content/uploads/2026/02/Drag-and-drop-Data-flow.png 475w, https://zappysys.com/blog/wp-content/uploads/2026/02/Drag-and-drop-Data-flow-300x112.png 300w" sizes="(max-width: 475px) 100vw, 475px" /></a><p id="caption-attachment-11784" class="wp-caption-text">Drag and drop Data flow.</p></div></li>
<li>Double-click the task to open the <strong>Data Flow Designer</strong>.</li>
<li>Drag and drop an <strong>ODBC Source</strong> component into the Data Flow.
<div id="attachment_11783" style="width: 489px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/Drag-and-drop-ODBC-source.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11783" class="size-full wp-image-11783" src="https://zappysys.com/blog/wp-content/uploads/2026/02/Drag-and-drop-ODBC-source.png" alt="" width="479" height="227" srcset="https://zappysys.com/blog/wp-content/uploads/2026/02/Drag-and-drop-ODBC-source.png 479w, https://zappysys.com/blog/wp-content/uploads/2026/02/Drag-and-drop-ODBC-source-300x142.png 300w" sizes="(max-width: 479px) 100vw, 479px" /></a><p id="caption-attachment-11783" class="wp-caption-text">Drag and drop the ODBC source.</p></div></li>
<li>Double-click the component to configure it.</li>
<li>Click <strong>New…</strong> to create a new ODBC Connection Manager.
<div id="attachment_11772" style="width: 763px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/Creating-ODBC-Connection-Manager-in-SSIS.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11772" class="size-full wp-image-11772" src="https://zappysys.com/blog/wp-content/uploads/2026/02/Creating-ODBC-Connection-Manager-in-SSIS.png" alt="" width="753" height="685" srcset="https://zappysys.com/blog/wp-content/uploads/2026/02/Creating-ODBC-Connection-Manager-in-SSIS.png 753w, https://zappysys.com/blog/wp-content/uploads/2026/02/Creating-ODBC-Connection-Manager-in-SSIS-300x273.png 300w" sizes="(max-width: 753px) 100vw, 753px" /></a><p id="caption-attachment-11772" class="wp-caption-text">Creating an ODBC Connection Manager in SSIS</p></div></li>
<li>Select the MariaDB ODBC DSN you created earlier.</li>
<li>Click <strong>Test Connection </strong>and click <strong>OK </strong>to save the configuration.
<div id="attachment_11773" style="width: 724px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/Creating-ODBC-Connection-Manager-in-SSIS-from-JDBC.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11773" class="size-full wp-image-11773" src="https://zappysys.com/blog/wp-content/uploads/2026/02/Creating-ODBC-Connection-Manager-in-SSIS-from-JDBC.png" alt="" width="714" height="620" srcset="https://zappysys.com/blog/wp-content/uploads/2026/02/Creating-ODBC-Connection-Manager-in-SSIS-from-JDBC.png 714w, https://zappysys.com/blog/wp-content/uploads/2026/02/Creating-ODBC-Connection-Manager-in-SSIS-from-JDBC-300x261.png 300w" sizes="(max-width: 714px) 100vw, 714px" /></a><p id="caption-attachment-11773" class="wp-caption-text">Creating an ODBC Connection Manager in SSIS from JDBC</p></div></li>
<li>Choose <strong>Data Access Mode: </strong>Table name or SQL command.</li>
<li>Select the desired table or enter a custom query.</li>
<li><span style="box-sizing: border-box; margin: 0px; padding: 0px;">Click <strong>Preview</strong> to validate the data, and click <strong>OK </strong>to save the configuration.<br />
</span></p>
<div id="attachment_11774" style="width: 763px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/Preview-ODBC-Connection-Manager-in-SSIS-from-JDBC.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11774" class="size-full wp-image-11774" src="https://zappysys.com/blog/wp-content/uploads/2026/02/Preview-ODBC-Connection-Manager-in-SSIS-from-JDBC.png" alt="" width="753" height="637" srcset="https://zappysys.com/blog/wp-content/uploads/2026/02/Preview-ODBC-Connection-Manager-in-SSIS-from-JDBC.png 753w, https://zappysys.com/blog/wp-content/uploads/2026/02/Preview-ODBC-Connection-Manager-in-SSIS-from-JDBC-300x254.png 300w" sizes="(max-width: 753px) 100vw, 753px" /></a><p id="caption-attachment-11774" class="wp-caption-text">Preview an ODBC Connection Manager in SSIS from JDBC</p></div></li>
</ol>
<h3>Configure MongoDB Destination</h3>
<ol>
<li>In the Connection Manager pane, click <strong>New Connection</strong>.</li>
<li>Select <strong>ZS-MONGODB</strong>.</li>
<li>Configure the connection:
<ul style="list-style-type: disc;">
<li>Host</li>
<li>Username</li>
<li>Password</li>
<li>Database</li>
</ul>
</li>
<li>Use the other tabs for more configuration if needed</li>
<li>Click <strong>Test Connection </strong>and Click <strong>OK</strong>.
<div id="attachment_11793" style="width: 628px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/MongoDB-connection-configuration.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11793" class="size-full wp-image-11793" src="https://zappysys.com/blog/wp-content/uploads/2026/02/MongoDB-connection-configuration.png" alt="" width="618" height="580" srcset="https://zappysys.com/blog/wp-content/uploads/2026/02/MongoDB-connection-configuration.png 618w, https://zappysys.com/blog/wp-content/uploads/2026/02/MongoDB-connection-configuration-300x282.png 300w" sizes="(max-width: 618px) 100vw, 618px" /></a><p id="caption-attachment-11793" class="wp-caption-text">MongoDB connection configuration</p></div></li>
<li>Drag and drop the <a href="https://zappysys.com/products/ssis-powerpack/ssis-mongodb-destination/"><strong>MongoDB Destination</strong></a> component.
<div id="attachment_11792" style="width: 504px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/Drag-and-drop-MongoDB-destination.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11792" class="size-full wp-image-11792" src="https://zappysys.com/blog/wp-content/uploads/2026/02/Drag-and-drop-MongoDB-destination.png" alt="" width="494" height="248" srcset="https://zappysys.com/blog/wp-content/uploads/2026/02/Drag-and-drop-MongoDB-destination.png 494w, https://zappysys.com/blog/wp-content/uploads/2026/02/Drag-and-drop-MongoDB-destination-300x151.png 300w" sizes="(max-width: 494px) 100vw, 494px" /></a><p id="caption-attachment-11792" class="wp-caption-text">Drag and drop the MongoDB destination</p></div></li>
<li>Connect it to the <strong>ODBC Source </strong>and double-click to configure it.</li>
<li>Select the MongoDB connection.
<div id="attachment_11797" style="width: 733px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/MongoDB-Destination-Select-connection.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11797" class="size-full wp-image-11797" src="https://zappysys.com/blog/wp-content/uploads/2026/02/MongoDB-Destination-Select-connection.png" alt="" width="723" height="373" srcset="https://zappysys.com/blog/wp-content/uploads/2026/02/MongoDB-Destination-Select-connection.png 723w, https://zappysys.com/blog/wp-content/uploads/2026/02/MongoDB-Destination-Select-connection-300x155.png 300w" sizes="(max-width: 723px) 100vw, 723px" /></a><p id="caption-attachment-11797" class="wp-caption-text">MongoDB Destination &#8211; Select connection</p></div></li>
<li>Go to the <strong>Properties</strong> tab and choose the operation and the target table.
<div id="attachment_11796" style="width: 733px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/MongoDB-Destination-Properties-configuration.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11796" class="size-full wp-image-11796" src="https://zappysys.com/blog/wp-content/uploads/2026/02/MongoDB-Destination-Properties-configuration.png" alt="" width="723" height="664" srcset="https://zappysys.com/blog/wp-content/uploads/2026/02/MongoDB-Destination-Properties-configuration.png 723w, https://zappysys.com/blog/wp-content/uploads/2026/02/MongoDB-Destination-Properties-configuration-300x276.png 300w" sizes="(max-width: 723px) 100vw, 723px" /></a><p id="caption-attachment-11796" class="wp-caption-text">MongoDB Destination &#8211; Properties configuration</p></div></li>
<li>Go to the <strong>Column Mappings</strong> tab and map source columns to destination columns.
<div id="attachment_11795" style="width: 733px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/MongoDB-Destination-Map-the-columns.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11795" class="size-full wp-image-11795" src="https://zappysys.com/blog/wp-content/uploads/2026/02/MongoDB-Destination-Map-the-columns.png" alt="" width="723" height="664" srcset="https://zappysys.com/blog/wp-content/uploads/2026/02/MongoDB-Destination-Map-the-columns.png 723w, https://zappysys.com/blog/wp-content/uploads/2026/02/MongoDB-Destination-Map-the-columns-300x276.png 300w" sizes="(max-width: 723px) 100vw, 723px" /></a><p id="caption-attachment-11795" class="wp-caption-text">MongoDB Destination &#8211; Map the columns.</p></div></li>
<li>Click <strong>OK </strong>to save the configuration.</li>
<li>Run the SSIS package. If everything is configured correctly, the data will be transferred from MariaDB to MongoDB.
<div id="attachment_11794" style="width: 269px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/MongoDB-Destination-Final-Result.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11794" class="size-full wp-image-11794" src="https://zappysys.com/blog/wp-content/uploads/2026/02/MongoDB-Destination-Final-Result.png" alt="" width="259" height="270" /></a><p id="caption-attachment-11794" class="wp-caption-text">MongoDB Destination &#8211; Final Result</p></div></li>
</ol>
<h2>Conclusion</h2>
<p>With ZappySys SSIS PowerPack and ODBC PowerPack, connecting MariaDB to MongoDB becomes straightforward and reliable.</p>
<p>By configuring the ODBC/JDBC bridge for MariaDB and using the native MongoDB destination in SSIS, you can build a robust ETL pipeline between the two databases.</p>
<p>Explore the full capabilities of the ZappySys <a href="https://zappysys.com/products/ssis-powerpack/" target="_blank" rel="noopener">SSIS PowerPack</a> and ZappySys <a href="https://zappysys.com/products/ODBC-powerpack/" target="_blank" rel="noopener">ODBC PowerPack</a> to optimize your data integration tasks.</p>
<h1>Need Help?</h1>
<p>If you encounter any issues, our support team is here to help:</p>
<ul>
<li><strong>Live Chat</strong> — Use the chat widget (bottom-right corner of this page)</li>
<li><strong>Email</strong> — <a href="mailto:support@zappysys.com">support@zappysys.com</a></li>
<li><strong>Support Center</strong> — Support | ZappySys</li>
</ul>
<p>&nbsp;</p>
<p>The post <a href="https://zappysys.com/blog/how-to-load-mariadb-data-into-mongodb/">SSIS tutorial: How to load MariaDB data into MongoDB</a> appeared first on <a href="https://zappysys.com/blog">ZappySys Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>SSIS tutorial: How to connect to AliPay</title>
		<link>https://zappysys.com/blog/ssis-tutorial-how-to-connect-to-alipay/</link>
		
		<dc:creator><![CDATA[ZappySys Team]]></dc:creator>
		<pubDate>Sat, 21 Feb 2026 01:03:31 +0000</pubDate>
				<category><![CDATA[REST API]]></category>
		<category><![CDATA[REST API Integration]]></category>
		<category><![CDATA[SSIS PowerPack]]></category>
		<category><![CDATA[SSIS REST API Task]]></category>
		<category><![CDATA[SSIS Tasks]]></category>
		<guid isPermaLink="false">https://zappysys.com/blog/?p=11735</guid>

					<description><![CDATA[<p>Introduction In this article, you’ll learn how to connect SSIS PowerPack (ZappySys) to AliPay OpenAPI to call REST endpoints from SSIS. We’ll focus on the practical integration pattern AliPay requires: sending requests to the OpenAPI gateway with the correct parameters and a valid RSA2 signature, then parsing JSON responses in SSIS. AliPay OpenAPI basics (what [&#8230;]</p>
<p>The post <a href="https://zappysys.com/blog/ssis-tutorial-how-to-connect-to-alipay/">SSIS tutorial: How to connect to AliPay</a> appeared first on <a href="https://zappysys.com/blog">ZappySys Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Introduction</h2>
<p>In this article, you’ll learn how to connect SSIS PowerPack (ZappySys) to AliPay OpenAPI to call REST endpoints from SSIS. We’ll focus on the practical integration pattern AliPay requires: sending requests to the OpenAPI gateway with the correct parameters and a valid RSA2 signature, then parsing JSON responses in SSIS.</p>
<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>AliPay OpenAPI basics (what SSIS must send)</h2>
<p>AliPay OpenAPI calls typically go through a single gateway endpoint:</p>
<ul>
<li><strong>Sandbox gateway:</strong><br />
<pre class="crayon-plain-tag">https://openapi-sandbox.dl.alipaydev.com/gateway.do</pre>
</li>
</ul>
<p>A request is built from:</p>
<ul>
<li>Standard parameters (for example: <code>app_id</code>, <code>method</code>, <code>charset</code>, <code>sign_type</code>, <code>timestamp</code>, <code>version</code>)</li>
<li><code>biz_content</code> (usually JSON)</li>
<li><code>sign</code> (a signature generated from the parameters using RSA/RSA2—AliPay recommends RSA2)</li>
</ul>
<p>AliPay requires you to construct a “string to sign” from parameters and attach <code>sign</code> and <code>sign_type</code> to the request, then validate/verify responses using the AliPay public key.</p>
<h2>High-level integration pattern in SSIS</h2>
<p>Because AliPay signing is mandatory, the most reliable SSIS approach is a two-step pattern:</p>
<ol>
<li><strong>Generate the signature</strong> (RSA2) for the request parameters.</li>
<li><strong>Call the AliPay gateway</strong> from ZappySys (REST API Task or REST API Source), passing the signed parameters.</li>
</ol>
<p>ZappySys components support custom HTTP methods, headers, request bodies, and advanced options—so they work well once you have the signed payload ready.</p>
<h2>Steps</h2>
<h3>Start in the AliPay Sandbox</h3>
<p>AliPay strongly recommends using the sandbox for development and debugging. In the sandbox, you must:</p>
<ul>
<li data-start="668" data-end="697">An AliPay Developer Account</li>
<li data-start="668" data-end="697">An AliPay App ID</li>
<li>Use the sandbox gateway URL</li>
<li data-start="721" data-end="779">RSA2 Private Key (generated in AliPay developer console)</li>
<li data-start="782" data-end="820">AliPay Public Key (for verification)</li>
<li data-start="823" data-end="889">Access to the AliPay Sandbox environment (recommended for testing)</li>
</ul>
<h3>Decide where you will generate the RSA2 signature</h3>
<p>You have three common options:</p>
<ul>
<li><strong>Option A (Recommended): SSIS Script Task (C#) to generate signature</strong><br />
Use a Script Task before the ZappySys call to build parameters and compute <code>sign</code>.</li>
<li><strong>Option B: Use an AliPay SDK in a small helper app</strong><br />
Run it via Execute Process Task to output signed parameters (JSON/text), then pass them to ZappySys.</li>
<li><strong>Option C: Use a signing microservice</strong><br />
SSIS calls your internal service to get <code>sign</code>, then calls AliPay.</li>
</ul>
<p><a href="https://docs.alipayplus.com/alipayplus/alipayplus/api_acq_unified/api_overview?role=ACQP&amp;product=Payment1&amp;version=1.4.6">AliPay’s documentation</a> emphasizes the signature process and verification using the AliPay public key.</p>
<h3>Example: What a signed AliPay request looks like</h3>
<p>AliPay’s gateway model is “parameters + signature.” Conceptually, your final request includes:</p>
<ul>
<li><code>app_id</code></li>
<li><code>method</code> (the API name you’re calling)</li>
<li><code>charset</code> (often <code>utf-8</code>)</li>
<li><code>sign_type</code> (recommended <code>RSA2</code>)</li>
<li><code>timestamp</code></li>
<li><code>version</code></li>
<li><code>biz_content</code> (JSON)</li>
<li><code>sign</code> (computed over the canonicalized parameter string)</li>
</ul>
<p>AliPay documents that <code>sign</code> and <code>sign_type</code> are appended after creating the string to be signed, and verification uses the AliPay public key.</p>
<h3>Configure the ZappySys REST API Task (Control Flow)</h3>
<p>Use this when operating (e.g., creating a payment, refunding, or querying).</p>
<ol>
<li>Drag <strong>ZappySys REST API Web Service Task</strong> into Control Flow.</li>
<li>Set the task:
<ul>
<li><strong>Method:</strong> POST (commonly used with AliPay gateway)</li>
<li><strong>URL:</strong><br />
<pre class="crayon-plain-tag">https://openapi-sandbox.dl.alipaydev.com/gateway.do</pre>
</li>
<li>Headers: use<br />
<pre class="crayon-plain-tag">Content-Type: application/x-www-form-urlencoded</pre>
</li>
<li><strong>Body:</strong> form-encoded parameters; use this format: <em>key1=value1&amp;key2=value2&#8230;</em>
<div>
<pre class="crayon-plain-tag">app_id=YOUR_APP_ID&amp;amp;method=alipay.trade.query&amp;amp;charset=utf-8&amp;amp;sign_type=RSA2&amp;amp;timestamp=2026-02-20 10:00:00&amp;amp;version=1.0&amp;amp;biz_content={&quot;out_trade_no&quot;:&quot;202602200001&quot;}&amp;amp;sign=GENERATED_SIGNATURE</pre>
</div>
</li>
</ul>
</li>
<li>Click <strong>Test Request/Response</strong> to confirm you get a valid JSON response.
<div id="attachment_11739" style="width: 847px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/Alipay-REST-API.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11739" class="size-full wp-image-11739" src="https://zappysys.com/blog/wp-content/uploads/2026/02/Alipay-REST-API.png" alt="" width="837" height="720" srcset="https://zappysys.com/blog/wp-content/uploads/2026/02/Alipay-REST-API.png 837w, https://zappysys.com/blog/wp-content/uploads/2026/02/Alipay-REST-API-300x258.png 300w, https://zappysys.com/blog/wp-content/uploads/2026/02/Alipay-REST-API-768x661.png 768w" sizes="(max-width: 837px) 100vw, 837px" /></a><p id="caption-attachment-11739" class="wp-caption-text">Alipay REST API</p></div></li>
</ol>
<h2>Troubleshooting common AliPay + SSIS issues</h2>
<ul>
<li><strong>invalid-signature / missing-signature</strong>: most often caused by parameter ordering, incorrect URL-encoding, wrong key pair, or using sandbox keys against production (or vice versa).</li>
<li><strong>Wrong gateway</strong>: sandbox and production are fully isolated—ensure your <code>app_id,</code>keys, and gateway host match the environment.</li>
<li><strong>Encoding issues</strong>: confirm UTF-8 everywhere and ensure parameters are encoded exactly once before submission.</li>
<li><strong>Parsing JSON</strong>: use ZappySys JSON Source preview and JSONPath filters to flatten nested objects.</li>
</ul>
<h2>Security best practices</h2>
<ul>
<li>Store private keys securely (SSIS variables protected, encrypted config, or secret vaults).</li>
<li>Do not hardcode secrets in packages.</li>
<li>Use a sandbox for development, then switch to production only after full validation.</li>
</ul>
<h2>Conclusion</h2>
<p>Download <a href="https://zappysys.com/products/ssis-powerpack/" target="_blank" rel="noopener">SSIS PowerPack</a> today and see for yourself how easy it is to connect SSIS PowerPack (ZappySys) to AliPay is absolutely achievable once you treat AliPay’s OpenAPI as a <strong>signed gateway integration</strong>. The key is generating a correct <strong>RSA2 signature</strong> for every request, then using ZappySys REST components to send the parameters and parse responses.</p>
<p>&nbsp;</p>
<p><span style="font-size: 14pt;"><strong>Still need help?</strong></span></p>
<p>If the issue persists, please get in touch with our support team:</p>
<ul>
<li><strong>Live Chat:</strong> Open the chat widget <em>(bottom right of this page)</em></li>
<li><strong>Email:</strong> <a href="mailto:support@zappysys.com">support@zappysys.com</a></li>
<li><strong>Support Center</strong>: <a class="inline-onebox" href="https://zappysys.com/support/">Support | ZappySys</a></li>
</ul>
<p>&nbsp;</p>
<p>The post <a href="https://zappysys.com/blog/ssis-tutorial-how-to-connect-to-alipay/">SSIS tutorial: How to connect to AliPay</a> appeared first on <a href="https://zappysys.com/blog">ZappySys Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>SSIS tutorial: How to connect to Swagger</title>
		<link>https://zappysys.com/blog/ssis-tutorial-how-to-connect-to-swagger/</link>
		
		<dc:creator><![CDATA[ZappySys Team]]></dc:creator>
		<pubDate>Fri, 20 Feb 2026 00:11:27 +0000</pubDate>
				<category><![CDATA[REST API Integration]]></category>
		<category><![CDATA[SSIS Components]]></category>
		<category><![CDATA[SSIS JSON Source (File/REST)]]></category>
		<category><![CDATA[SSIS PowerPack]]></category>
		<category><![CDATA[SSIS REST API Task]]></category>
		<category><![CDATA[SSIS Tasks]]></category>
		<guid isPermaLink="false">https://zappysys.com/blog/?p=11710</guid>

					<description><![CDATA[<p>Introduction In this article, we&#8217;ll learn how to integrate a documented API in Swagger with SQL Server Integration Services (SSIS) using ZappySys PowerPack. Swagger enables us to visualize and test REST endpoints, while ZappySys SSIS provides advanced components for consuming APIs and transforming data in ETL processes. Steps Get the Swagger endpoints Before connecting from [&#8230;]</p>
<p>The post <a href="https://zappysys.com/blog/ssis-tutorial-how-to-connect-to-swagger/">SSIS tutorial: How to connect to Swagger</a> appeared first on <a href="https://zappysys.com/blog">ZappySys Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Introduction</h2>
<p>In this article, we&#8217;ll learn how to integrate a documented API in Swagger with SQL Server Integration Services (SSIS) using ZappySys PowerPack.</p>
<p>Swagger enables us to visualize and test REST endpoints, while ZappySys SSIS provides advanced components for consuming APIs and transforming data in ETL processes.</p>
<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><a class="anchor" href="https://community.zappysys.com/t/ssis-tips-download-upload-files-from-azure-data-lake-storage-gen2-adls-v2/746#p-891-steps-2" name="p-891-steps-2" aria-label="Heading link"></a>Steps</h2>
<h3><a class="anchor" href="https://community.zappysys.com/t/ssis-tips-download-upload-files-from-azure-data-lake-storage-gen2-adls-v2/746#p-891-validating-your-azure-storage-account-is-gen2-adls-v2-3" name="p-891-validating-your-azure-storage-account-is-gen2-adls-v2-3" aria-label="Heading link"></a>Get the Swagger endpoints</h3>
<div>Before connecting from SSIS, identify the endpoints you want to use. In this example, we will use the <a href="https://petstore.swagger.io/#/">Petstore Swagger server </a>as a public API reference.</div>
<ol>
<li>Review the server’s endpoint list. In this example, we will explore the <strong>Pet</strong> category.
<div id="attachment_11712" style="width: 604px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-Pet-category.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11712" class="size-full wp-image-11712" src="https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-Pet-category.png" alt="" width="594" height="547" srcset="https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-Pet-category.png 594w, https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-Pet-category-300x276.png 300w" sizes="(max-width: 594px) 100vw, 594px" /></a><p id="caption-attachment-11712" class="wp-caption-text">Swagger &#8211; Pet category</p></div></li>
<li>From the list, we can see multiple endpoints and HTTP methods, including <strong>GET</strong>, <strong>POST</strong>, <strong>PUT</strong>, and <strong>DELETE.</strong></li>
<li>Click on an endpoint to expand it. For this example, we will use <strong><strong>Add a new pet to the store.<br />
</strong></strong></p>
<div id="attachment_11714" style="width: 1430px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-Create-a-new-pet.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11714" class="size-full wp-image-11714" src="https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-Create-a-new-pet.png" alt="" width="1420" height="742" srcset="https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-Create-a-new-pet.png 1420w, https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-Create-a-new-pet-300x157.png 300w, https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-Create-a-new-pet-1024x535.png 1024w, https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-Create-a-new-pet-768x401.png 768w" sizes="(max-width: 1420px) 100vw, 1420px" /></a><p id="caption-attachment-11714" class="wp-caption-text">Swagger &#8211; Create a new pet</p></div></li>
<li>Click <strong>Try it out</strong>. Swagger will allow you to edit the request body and choose the content type (JSON or XML).</li>
<li>Click <strong>Execute</strong>. Swagger will display
<ul>
<li>The generated request in <strong>cURL</strong> format</li>
<li>The Request URL</li>
<li>The Response body</li>
<li>The HTTP status code</li>
</ul>
</li>
<li>In the Response JSON, we can see the new pet with status code 200, indicating success.</li>
<li>Now, with the <strong>CURL</strong> syntax, we can use that inside our tool.
<div id="attachment_11715" style="width: 1421px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-Create-a-new-pet-CURL.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11715" class="size-full wp-image-11715" src="https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-Create-a-new-pet-CURL.png" alt="" width="1411" height="919" srcset="https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-Create-a-new-pet-CURL.png 1411w, https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-Create-a-new-pet-CURL-300x195.png 300w, https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-Create-a-new-pet-CURL-1024x667.png 1024w, https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-Create-a-new-pet-CURL-768x500.png 768w" sizes="(max-width: 1411px) 100vw, 1411px" /></a><p id="caption-attachment-11715" class="wp-caption-text">Swagger &#8211; Create a new pet CURL</p></div></li>
</ol>
<h3><a class="anchor" href="https://community.zappysys.com/t/ssis-tips-download-upload-files-from-azure-data-lake-storage-gen2-adls-v2/746#p-891-connect-azure-adls-gen2-in-ssis-4" name="p-891-connect-azure-adls-gen2-in-ssis-4" aria-label="Heading link"></a></h3>
<h3>POST request: Create Pet Request</h3>
<ol>
<li>Open Visual Studio and create a new <strong>Integration Services Project</strong>.</li>
<li>After the project is created, locate the <strong>SSIS Toolbox</strong> on the left panel.</li>
<li>Drag and drop the <strong>REST API Task</strong> onto the Control Flow surface and double-click it to configure
<div id="attachment_11713" style="width: 576px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/Drag-and-Drop-REST-API-Task.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11713" class="size-full wp-image-11713" src="https://zappysys.com/blog/wp-content/uploads/2026/02/Drag-and-Drop-REST-API-Task.png" alt="" width="566" height="279" srcset="https://zappysys.com/blog/wp-content/uploads/2026/02/Drag-and-Drop-REST-API-Task.png 566w, https://zappysys.com/blog/wp-content/uploads/2026/02/Drag-and-Drop-REST-API-Task-300x148.png 300w" sizes="(max-width: 566px) 100vw, 566px" /></a><p id="caption-attachment-11713" class="wp-caption-text">Drag and Drop REST API Task</p></div></li>
<li>Use the cURL generated from Swagger. For reference, you can review our article about converting <a href="https://zappysys.com/blog/using-ssis-curl-syntax-to-ssis-api-task/">cURL to an SSIS API Task</a>.<br />
<pre class="crayon-plain-tag">curl -X 'POST' \
  'https://petstore.swagger.io/v2/pet' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  &quot;id&quot;: 123,
  &quot;category&quot;: {
    &quot;id&quot;: 456,
    &quot;name&quot;: &quot;Friendly&quot;
  },
  &quot;name&quot;: &quot;Zappy&quot;,
  &quot;photoUrls&quot;: [
    &quot;string&quot;
  ],
  &quot;tags&quot;: [
    {
      &quot;id&quot;: 0,
      &quot;name&quot;: &quot;tech&quot;
    }
  ],
  &quot;status&quot;: &quot;available&quot;
}'</pre>
</li>
<li><strong>-X POST</strong> represents the HTTP method. Set the Request Method to <strong>POST</strong>.</li>
<li>Enter the URL from the cURL command.</li>
<li>Each <strong>-H</strong> represents a Header. Add the corresponding headers inside the REST API Task.</li>
<li>The <strong>-d</strong> parameter represents the Body. Paste the JSON payload into the Body section.</li>
<li>Click <strong>Test Request/Response</strong> to validate the configuration.
<div id="attachment_11716" style="width: 1312px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/SSIS-Create-a-new-pet.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11716" class="size-full wp-image-11716" src="https://zappysys.com/blog/wp-content/uploads/2026/02/SSIS-Create-a-new-pet.png" alt="" width="1302" height="667" srcset="https://zappysys.com/blog/wp-content/uploads/2026/02/SSIS-Create-a-new-pet.png 1302w, https://zappysys.com/blog/wp-content/uploads/2026/02/SSIS-Create-a-new-pet-300x154.png 300w, https://zappysys.com/blog/wp-content/uploads/2026/02/SSIS-Create-a-new-pet-1024x525.png 1024w, https://zappysys.com/blog/wp-content/uploads/2026/02/SSIS-Create-a-new-pet-768x393.png 768w" sizes="(max-width: 1302px) 100vw, 1302px" /></a><p id="caption-attachment-11716" class="wp-caption-text">SSIS &#8211; Create a new pet</p></div></li>
<li>You can use additional components such as <strong>JSON Source</strong> or <strong>XML Source,</strong> depending on how you plan to process the response.</li>
</ol>
<h3>POST request: Upload a file</h3>
<ol>
<li>Next, we will upload an image for the pet we created earlier
<div id="attachment_11717" style="width: 1422px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-upload-image.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11717" class="size-full wp-image-11717" src="https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-upload-image.png" alt="" width="1412" height="680" srcset="https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-upload-image.png 1412w, https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-upload-image-300x144.png 300w, https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-upload-image-1024x493.png 1024w, https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-upload-image-768x370.png 768w" sizes="(max-width: 1412px) 100vw, 1412px" /></a><p id="caption-attachment-11717" class="wp-caption-text">Swagger &#8211; upload image</p></div></li>
<li>Generate the CURL code.<br />
<pre class="crayon-plain-tag">curl -X 'POST' \
  'https://petstore.swagger.io/v2/pet/123/uploadImage' \
  -H 'accept: application/json' \
  -H 'Content-Type: multipart/form-data' \
  -F 'file=@new.jpg;type=image/jpeg'</pre>
</li>
<li>Configure the REST API Task with:
<ul>
<li>Request Method: POST</li>
<li>URL</li>
<li>Headers</li>
<li>File parameter</li>
</ul>
</li>
<li>Check the option <strong>File upload.</strong></li>
<li>Specify the full file path (e.g., <em>file=@D:\Zappysys\new.jpg</em>).</li>
<li>Click Test Request to validate the upload.</li>
<li>You can find an article about <a href="https://zappysys.com/blog/rest-api-file-upload-using-ssis-multi-part-post/" target="_blank" rel="noopener">uploading files here</a>.
<div class="mceTemp"></div>
<div id="attachment_11730" style="width: 1322px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/SSIS-upload-an-image.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11730" class="size-full wp-image-11730" src="https://zappysys.com/blog/wp-content/uploads/2026/02/SSIS-upload-an-image.png" alt="" width="1312" height="719" srcset="https://zappysys.com/blog/wp-content/uploads/2026/02/SSIS-upload-an-image.png 1312w, https://zappysys.com/blog/wp-content/uploads/2026/02/SSIS-upload-an-image-300x164.png 300w, https://zappysys.com/blog/wp-content/uploads/2026/02/SSIS-upload-an-image-1024x561.png 1024w, https://zappysys.com/blog/wp-content/uploads/2026/02/SSIS-upload-an-image-768x421.png 768w" sizes="(max-width: 1312px) 100vw, 1312px" /></a><p id="caption-attachment-11730" class="wp-caption-text">SSIS &#8211; upload an image</p></div></li>
</ol>
<h3>GET request: Get the Pet information</h3>
<ol>
<li> Now we will get the pet we created earlier. This is the example
<div id="attachment_11724" style="width: 1432px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-get-pet-by-id.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11724" class="size-full wp-image-11724" src="https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-get-pet-by-id.png" alt="" width="1422" height="592" srcset="https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-get-pet-by-id.png 1422w, https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-get-pet-by-id-300x125.png 300w, https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-get-pet-by-id-1024x426.png 1024w, https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-get-pet-by-id-768x320.png 768w" sizes="(max-width: 1422px) 100vw, 1422px" /></a><p id="caption-attachment-11724" class="wp-caption-text">Swagger &#8211; get pet by id</p></div></li>
<li>We generate the CURL<br />
<pre class="crayon-plain-tag">curl -X 'GET' \
  'https://petstore.swagger.io/v2/pet/123' \
  -H 'accept: application/json'</pre>
</li>
<li>Inside the Visual Studio project, drag and drop the <strong>SSIS Data Flow Task</strong> from the SSIS Toolbox. Double-click on the <em>Data Flow Task</em> to see the <em>Data Flow</em> designer.
<div id="attachment_11622" style="width: 472px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2019/08/Drag-and-Drop-SSIS-Data-Flow-Task-from-SSIS-Toolbox.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11622" class="size-full wp-image-11622" src="https://zappysys.com/blog/wp-content/uploads/2019/08/Drag-and-Drop-SSIS-Data-Flow-Task-from-SSIS-Toolbox.png" alt="" width="462" height="157" srcset="https://zappysys.com/blog/wp-content/uploads/2019/08/Drag-and-Drop-SSIS-Data-Flow-Task-from-SSIS-Toolbox.png 462w, https://zappysys.com/blog/wp-content/uploads/2019/08/Drag-and-Drop-SSIS-Data-Flow-Task-from-SSIS-Toolbox-300x102.png 300w" sizes="(max-width: 462px) 100vw, 462px" /></a><p id="caption-attachment-11622" class="wp-caption-text">Drag and Drop SSIS Data Flow Task from SSIS Toolbox</p></div></li>
<li>From the SSIS toolbox, drag and drop a <a title="SSIS API Source" href="https://zappysys.com/products/ssis-powerpack/ssis-json-file-source">JSON Source</a> onto the data flow designer surface, and double-click on it to edit it
<div id="attachment_11533" style="width: 553px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2015/09/ssis-json-source-adapter-drag.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11533" class="size-full wp-image-11533" src="https://zappysys.com/blog/wp-content/uploads/2015/09/ssis-json-source-adapter-drag.png" alt="" width="543" height="146" srcset="https://zappysys.com/blog/wp-content/uploads/2015/09/ssis-json-source-adapter-drag.png 543w, https://zappysys.com/blog/wp-content/uploads/2015/09/ssis-json-source-adapter-drag-300x81.png 300w" sizes="(max-width: 543px) 100vw, 543px" /></a><p id="caption-attachment-11533" class="wp-caption-text">SSIS JSON Source &#8211; Drag and Drop</p></div></li>
<li>We use the method <strong>GET</strong></li>
<li>We enter the URL with the <strong>ID</strong> from the earlier response.</li>
<li>We can use the filter to get the object we need, and now we can check the data.</li>
<li>Preview the data, and you will see the Pet&#8217;s information
<div id="attachment_11725" style="width: 833px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/SSIS-get-a-pet.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11725" class="size-full wp-image-11725" src="https://zappysys.com/blog/wp-content/uploads/2026/02/SSIS-get-a-pet.png" alt="" width="823" height="889" srcset="https://zappysys.com/blog/wp-content/uploads/2026/02/SSIS-get-a-pet.png 823w, https://zappysys.com/blog/wp-content/uploads/2026/02/SSIS-get-a-pet-278x300.png 278w, https://zappysys.com/blog/wp-content/uploads/2026/02/SSIS-get-a-pet-768x830.png 768w" sizes="(max-width: 823px) 100vw, 823px" /></a><p id="caption-attachment-11725" class="wp-caption-text">SSIS &#8211; get a pet by ID</p></div></li>
</ol>
<h3>PUT request: Update an existing pet</h3>
<ol>
<li>We go to the updated pet example and run the example
<div id="attachment_11721" style="width: 1432px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-update-a-pet.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11721" class="size-full wp-image-11721" src="https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-update-a-pet.png" alt="" width="1422" height="662" srcset="https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-update-a-pet.png 1422w, https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-update-a-pet-300x140.png 300w, https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-update-a-pet-1024x477.png 1024w, https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-update-a-pet-768x358.png 768w" sizes="(max-width: 1422px) 100vw, 1422px" /></a><p id="caption-attachment-11721" class="wp-caption-text">Swagger &#8211; update a pet</p></div></li>
<li>Generate the CURL<br />
<pre class="crayon-plain-tag">curl -X 'PUT' \
  'https://petstore.swagger.io/v2/pet' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  &quot;id&quot;: 0,
  &quot;category&quot;: {
    &quot;id&quot;: 0,
    &quot;name&quot;: &quot;string&quot;
  },
  &quot;name&quot;: &quot;doggie2&quot;,
  &quot;photoUrls&quot;: [
    &quot;string&quot;
  ],
  &quot;tags&quot;: [
    {
      &quot;id&quot;: 0,
      &quot;name&quot;: &quot;string&quot;
    }
  ],
  &quot;status&quot;: &quot;available&quot;
}'</pre>
</li>
<li>Inside the JSON source, we configure the HTTP method to <strong>PUT.</strong></li>
<li>Change the url and the header.</li>
<li>Inside the Body we can change the values from the existing pet.</li>
<li>Test the connection and check the result.
<div id="attachment_11719" style="width: 838px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/SSIS-update-a-pet.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11719" class="size-full wp-image-11719" src="https://zappysys.com/blog/wp-content/uploads/2026/02/SSIS-update-a-pet.png" alt="" width="828" height="745" srcset="https://zappysys.com/blog/wp-content/uploads/2026/02/SSIS-update-a-pet.png 828w, https://zappysys.com/blog/wp-content/uploads/2026/02/SSIS-update-a-pet-300x270.png 300w, https://zappysys.com/blog/wp-content/uploads/2026/02/SSIS-update-a-pet-768x691.png 768w" sizes="(max-width: 828px) 100vw, 828px" /></a><p id="caption-attachment-11719" class="wp-caption-text">SSIS &#8211; update a pet</p></div></li>
</ol>
<h3>DELETE request: Remove an existing pet</h3>
<ol>
<li>Now we will delete the pet using this example.
<div id="attachment_11722" style="width: 1424px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-delete-a-pet.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11722" class="size-full wp-image-11722" src="https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-delete-a-pet.png" alt="" width="1414" height="588" srcset="https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-delete-a-pet.png 1414w, https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-delete-a-pet-300x125.png 300w, https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-delete-a-pet-1024x426.png 1024w, https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-delete-a-pet-768x319.png 768w" sizes="(max-width: 1414px) 100vw, 1414px" /></a><p id="caption-attachment-11722" class="wp-caption-text">Swagger &#8211; delete a pet</p></div></li>
<li>Generate the CURL to delete the pet<br />
<pre class="crayon-plain-tag">curl -X 'DELETE' \
  'https://petstore.swagger.io/v2/pet/1234' \
  -H 'accept: application/json' \
  -H 'api_key: special-key'</pre>
</li>
<li>Inside the JSON source, configure the HTTP method to <strong>DELETE.</strong></li>
<li>Change the URL to include the pet&#8217;s ID.</li>
<li>Inside the header, we need to insert an API key.</li>
<li>Test the connection, and we will delete the pet.
<div id="attachment_11718" style="width: 838px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/SSIS-delete-a-pet.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11718" class="size-full wp-image-11718" src="https://zappysys.com/blog/wp-content/uploads/2026/02/SSIS-delete-a-pet.png" alt="" width="828" height="745" srcset="https://zappysys.com/blog/wp-content/uploads/2026/02/SSIS-delete-a-pet.png 828w, https://zappysys.com/blog/wp-content/uploads/2026/02/SSIS-delete-a-pet-300x270.png 300w, https://zappysys.com/blog/wp-content/uploads/2026/02/SSIS-delete-a-pet-768x691.png 768w" sizes="(max-width: 828px) 100vw, 828px" /></a><p id="caption-attachment-11718" class="wp-caption-text">aSSIS &#8211; delete a pet</p></div></li>
</ol>
<h3>Authentication method</h3>
<ol>
<li>Some APIs require authentication. You can configure authentication using an HTTP Connection Manager.</li>
<li>Enter the login URL if required.</li>
<li>Select the credential type (e.g., Basic – Username/Password).</li>
<li>Enter the credentials.</li>
<li>Click OK to save the configuration.</li>
<li>This connection can be reused across multiple REST API Tasks or JSON Sources.</li>
<li>For more details on <a href="https://zappysys.com/blog/how-to-set-base64-encoded-authorization-header-for-http-web-request/" target="_blank" rel="noopener">basic authentication, click here.</a> For <a href="https://zappysys.com/blog/rest-api-authentication-with-oauth-2-0-using-ssis/" target="_blank" rel="noopener">more details on the OAuth connection, click here</a>.
<div id="attachment_11726" style="width: 1430px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-SSIS-basic-authentication.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11726" class="wp-image-11726 size-full" src="https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-SSIS-basic-authentication.png" alt="" width="1420" height="893" srcset="https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-SSIS-basic-authentication.png 1420w, https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-SSIS-basic-authentication-300x189.png 300w, https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-SSIS-basic-authentication-1024x644.png 1024w, https://zappysys.com/blog/wp-content/uploads/2026/02/Swagger-SSIS-basic-authentication-768x483.png 768w" sizes="(max-width: 1420px) 100vw, 1420px" /></a><p id="caption-attachment-11726" class="wp-caption-text">Swagger &#8211; SSIS basic authentication</p></div></li>
</ol>
<div class="mceTemp"></div>
<h2><a class="anchor" href="https://community.zappysys.com/t/ssis-tips-download-upload-files-from-azure-data-lake-storage-gen2-adls-v2/746#p-891-summary-9" name="p-891-summary-9" aria-label="Heading link"></a>Conclusion</h2>
<p>Integrating Swagger-documented APIs with ZappySys SSIS becomes significantly easier when using the generated <strong>cURL</strong> command as a reference. Swagger provides a clear and interactive way to understand API endpoints, request structures, headers, and payload formats, while cURL offers a direct, executable representation of the HTTP request.</p>
<p>By translating the cURL command into the REST API Task or JSON Source configuration, developers can confidently replicate API calls inside SSIS without guesswork. This approach ensures accuracy, reduces troubleshooting time, and provides a consistent workflow for handling GET, POST, PUT, DELETE operations, file uploads, and authentication scenarios.</p>
<p><span style="box-sizing: border-box; margin: 0px; padding: 0px;">Download <a href="https://zappysys.com/products/odbc-powerpack/" target="_blank" rel="noopener">SSIS PowerPack</a> today and see for yourself how easy it is to combine Swagger and ZappySys SSIS, enabling organizations to seamlessly integrate modern REST APIs into enterprise ETL processes and bridge the gap between cloud-based services and traditional SQL Server data platforms.</span></p>
<p><a class="anchor" href="https://community.zappysys.com/t/ssis-tips-download-upload-files-from-azure-data-lake-storage-gen2-adls-v2/746#p-891-still-need-help-10" name="p-891-still-need-help-10" aria-label="Heading link"></a><span style="font-size: 14pt;"><strong>Still need help?</strong></span></p>
<p>If the issue persists, please get in touch with our support team:</p>
<ul>
<li><strong>Live Chat:</strong> Open the chat widget <em>(bottom right of this page)</em></li>
<li><strong>Email:</strong> <a href="mailto:support@zappysys.com">support@zappysys.com</a></li>
<li><strong>Support Center</strong>: <a class="inline-onebox" href="https://zappysys.com/support/">Support | ZappySys</a></li>
</ul>
<p>The post <a href="https://zappysys.com/blog/ssis-tutorial-how-to-connect-to-swagger/">SSIS tutorial: How to connect to Swagger</a> appeared first on <a href="https://zappysys.com/blog">ZappySys Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to save a list of files into a table using SSIS.</title>
		<link>https://zappysys.com/blog/how-to-save-a-list-of-files-into-a-table-using-ssis/</link>
		
		<dc:creator><![CDATA[ZappySys Team]]></dc:creator>
		<pubDate>Mon, 27 Mar 2023 11:47:11 +0000</pubDate>
				<category><![CDATA[SSIS Advanced File System Task]]></category>
		<category><![CDATA[html table source]]></category>
		<category><![CDATA[ssis advanced file system task]]></category>
		<guid isPermaLink="false">https://zappysys.com/blog/?p=9901</guid>

					<description><![CDATA[<p>Introduction In this post, we will show how to save a list of files into a table a table using SSIS. The article will show how to get a list of files and then store the list of files into an Excel file. Prerequisites Before we perform the steps listed in this article, you will [&#8230;]</p>
<p>The post <a href="https://zappysys.com/blog/how-to-save-a-list-of-files-into-a-table-using-ssis/">How to save a list of files into a table using SSIS.</a> appeared first on <a href="https://zappysys.com/blog">ZappySys Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2><strong>Introduction</strong></h2>
<p>In this post, we will show how to save a list of files into a table a table using SSIS. The article will show how to get a list of files and then store the list of files into an Excel file.</p>
<h2><strong>Prerequisites</strong></h2>
<p>Before we perform the steps listed in this article, you will need to make sure the following prerequisites are met:</p>
<ol>
<li>SSIS designer installed. Sometimes it is referred to as BIDS or SSDT (<a href="https://learn.microsoft.com/en-us/sql/ssdt/download-sql-server-data-tools-ssdt?view=sql-server-ver16">download it from the Microsoft site</a>).</li>
<li>Basic knowledge of SSIS package development using Microsoft SQL Server Integration Services.</li>
<li>Make sure <a href="https://zappysys.com/products/ssis-powerpack/">ZappySys SSIS PowerPack</a> is installed (<a href="https://zappysys.com/products/ssis-powerpack/download/">download it</a>).</li>
<li>Optional (If you want to Deploy and Schedule ) &#8211; <a href="https://zappysys.zendesk.com/hc/en-us/articles/360035974593">Deploy and Schedule SSIS Packages</a></li>
</ol>
<h2><strong>Step-by-step process to save the list of files and folders into an article</strong></h2>
<h3>Save the information in a variable with the Advanced file system task</h3>
<p>1. Drag and drop the Advance File System Task from the SSIS toolbox, chose to Get file list as ADO.net Data table and select an object variable type</p>
<div id="attachment_9951" style="width: 596px" class="wp-caption aligncenter"><a href="https://zappysys.com/blog/wp-content/uploads/2023/02/afst1-1.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9951" class="wp-image-9951 size-full" src="https://zappysys.com/blog/wp-content/uploads/2023/02/afst1-1.png" alt="Advanced file system task 1" width="586" height="593" srcset="https://zappysys.com/blog/wp-content/uploads/2023/02/afst1-1.png 586w, https://zappysys.com/blog/wp-content/uploads/2023/02/afst1-1-296x300.png 296w" sizes="(max-width: 586px) 100vw, 586px" /></a><p id="caption-attachment-9951" class="wp-caption-text">Getting the file list in a variable</p></div>
<h3>Save the result in a file with Logging task in order to save a list of files into a table</h3>
<p>2. The next step is to save the result in a HTML file: select the file destination, uncheck append and prefix datetime. Select the file in log mode and none in message type, and insert the variable in the message as follows:</p>
<div id="attachment_9953" style="width: 546px" class="wp-caption aligncenter"><a href="https://zappysys.com/blog/wp-content/uploads/2023/02/lt1-1.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9953" class="wp-image-9953 size-full" src="https://zappysys.com/blog/wp-content/uploads/2023/02/lt1-1.png" alt="save a list of files into a table - Logging task configuration" width="536" height="473" srcset="https://zappysys.com/blog/wp-content/uploads/2023/02/lt1-1.png 536w, https://zappysys.com/blog/wp-content/uploads/2023/02/lt1-1-300x265.png 300w" sizes="(max-width: 536px) 100vw, 536px" /></a><p id="caption-attachment-9953" class="wp-caption-text">Save the value from the variable in a file without a prefix</p></div>
<div class="mceTemp"></div>
<h3>Read the table and save it on a new file in order to save a list of files into a table</h3>
<p>3. Now, Drag and Drop SSIS <b>Data Flow Task</b> from SSIS Toolbox</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full" src="https://zappysys.com/onlinehelp/ssis-powerpack/scr/images/drag-and-drop-data-flow-task.png" width="460" height="155" /></p>
<p>4. Double click on the DataFlow task to see DataFlow designer surface.</p>
<p>5. From the SSIS toolbox drag and drop HTML source and insert the path for the new file, you can preview the file if it was previously created.</p>
<div id="attachment_9954" style="width: 811px" class="wp-caption aligncenter"><a href="https://zappysys.com/blog/wp-content/uploads/2023/02/htmls1.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9954" class="wp-image-9954 size-full" src="https://zappysys.com/blog/wp-content/uploads/2023/02/htmls1.png" alt="save a list of files into a table - HTML Source configuration" width="801" height="593" srcset="https://zappysys.com/blog/wp-content/uploads/2023/02/htmls1.png 801w, https://zappysys.com/blog/wp-content/uploads/2023/02/htmls1-300x222.png 300w, https://zappysys.com/blog/wp-content/uploads/2023/02/htmls1-768x569.png 768w" sizes="(max-width: 801px) 100vw, 801px" /></a><p id="caption-attachment-9954" class="wp-caption-text">Preview the HTML file</p></div>
<p>7. Then you can use a destination like the <a href="https://zappysys.com/products/ssis-powerpack/ssis-excel-file-destination/">Excel destination</a>, <a href="https://zappysys.com/products/ssis-powerpack/ssis-json-file-destination-connector/">JSON destination</a> or <a href="https://zappysys.com/products/ssis-powerpack/ssis-csv-file-destination/">CSV destination</a></p>
<div id="attachment_9955" style="width: 268px" class="wp-caption aligncenter"><a href="https://zappysys.com/blog/wp-content/uploads/2023/02/dataflow1.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9955" class="wp-image-9955 size-full" src="https://zappysys.com/blog/wp-content/uploads/2023/02/dataflow1.png" alt="save a list of files into a table - Save from HTML table into Excel" width="258" height="298" /></a><p id="caption-attachment-9955" class="wp-caption-text">Save the path list into an excel file</p></div>
<p>If everything is OK, the information will be stored in Excel. However, you can select any destination.</p>
<h2>Conclusion</h2>
<p>In this article, we show how to save a list of files in a table. Basically, we use the Advanced file system to save the list in a file. We use the Logging Task</p>
<p>The post <a href="https://zappysys.com/blog/how-to-save-a-list-of-files-into-a-table-using-ssis/">How to save a list of files into a table using SSIS.</a> appeared first on <a href="https://zappysys.com/blog">ZappySys Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to get all URLs from emails from Outlook</title>
		<link>https://zappysys.com/blog/how-to-get-all-urls-from-emails-from-outlook/</link>
		
		<dc:creator><![CDATA[ZappySys Team]]></dc:creator>
		<pubDate>Mon, 27 Mar 2023 11:44:37 +0000</pubDate>
				<category><![CDATA[SSIS JSON Source (File/REST)]]></category>
		<category><![CDATA[SSIS Regex Parser Task]]></category>
		<category><![CDATA[Email]]></category>
		<category><![CDATA[url]]></category>
		<guid isPermaLink="false">https://zappysys.com/blog/?p=9974</guid>

					<description><![CDATA[<p>Introduction This time we will explain how to get all URLS from emails using MS Outlook. Sometimes we need get all URLs from emails. In this post, we will show how to do this. Step by step using SSIS. Microsoft Graph API is a unified way to access many Microsoft services API including Office 365 API Prerequisites Before [&#8230;]</p>
<p>The post <a href="https://zappysys.com/blog/how-to-get-all-urls-from-emails-from-outlook/">How to get all URLs from emails from Outlook</a> appeared first on <a href="https://zappysys.com/blog">ZappySys Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2><strong>Introduction</strong></h2>
<p style="text-align: left;">This time we will explain how to get all URLS from emails using MS Outlook. Sometimes we need get <a href="https://zappysys.com/blog/wp-content/uploads/2023/03/microsoft-office-365-api-integration-150x150.png"><img loading="lazy" decoding="async" class="wp-image-10001 alignleft" src="https://zappysys.com/blog/wp-content/uploads/2023/03/microsoft-office-365-api-integration-150x150.png" alt="" width="73" height="73" /></a>all URLs from emails. In this post, we will show how to do this. Step by step using SSIS.</p>
<p style="text-align: left;"><a href="https://developer.microsoft.com/en-us/graph/docs/concepts/overview" target="_blank" rel="noopener">Microsoft Graph API</a> is a unified way to access many Microsoft services API including <strong>Office 365 API</strong></p>
<h2><strong>Prerequisites</strong></h2>
<p>Before we perform steps listed in this article, you will need to make sure following prerequisites are met:</p>
<ol>
<li>SSIS designer installed. Sometimes it is referred as BIDS or SSDT (<a href="https://learn.microsoft.com/en-us/sql/ssdt/download-sql-server-data-tools-ssdt?view=sql-server-ver16">download it from Microsoft site</a>).</li>
<li>Basic knowledge of SSIS package development using Microsoft SQL Server Integration Services.</li>
<li>Make sure <a href="https://zappysys.com/products/ssis-powerpack/">ZappySys SSIS PowerPack</a> is installed (<a href="https://zappysys.com/products/ssis-powerpack/download/">download it</a>).</li>
<li>Optional (If you want to Deploy and Schedule ) &#8211; <a href="https://zappysys.zendesk.com/hc/en-us/articles/360035974593">Deploy and Schedule SSIS Packages</a></li>
</ol>
<h2><strong>Steps-by-step process to download images from HTML using SSIS</strong></h2>
<h3><span id="Register_Application_OAuth2_App_for_Graph_API">Register Application (OAuth2 App for Graph API)</span></h3>
<p>First, check our article about how to get the OAuth2 connection, click <a href="https://zappysys.com/blog/get-office-365-mail-attachments-using-ssis/#Register_Application_OAuth2_App_for_Graph_API">here for the article</a></p>
<h3>Get the information for the body content from the emails</h3>
<p>1. Now, Drag and Drop SSIS <b>Data Flow Task</b> from SSIS Toolbox.</p>
<div style="width: 470px" class="wp-caption alignnone"><img loading="lazy" decoding="async" class="size-full" src="https://zappysys.com/onlinehelp/ssis-powerpack/scr/images/drag-and-drop-data-flow-task.png" width="460" height="155" /><p class="wp-caption-text">Drag and drop Data flow task</p></div>
<p>2. Double click on the DataFlow task to see the DataFlow designer surface.</p>
<p>3. From the SSIS toolbox drag and drop JSON Source on the dataflow designer surface.</p>
<div style="width: 551px" class="wp-caption alignnone"><img loading="lazy" decoding="async" class="size-full" src="https://zappysys.com/onlinehelp/ssis-powerpack/scr/images/json-source/ssis-json-source-adapter-drag.png" width="541" height="144" /><p class="wp-caption-text">Drag and drop a JSON sourcec</p></div>
<p>4. Select the <strong>OAuth connection</strong> you created, then use this URL to get the body content</p><pre class="crayon-plain-tag">https://graph.microsoft.com/v1.0/me/messages?$select=subject,body,bodyPreview,uniqueBody</pre><p>
&nbsp;</p>
<div id="attachment_9985" style="width: 838px" class="wp-caption aligncenter"><a href="https://zappysys.com/blog/wp-content/uploads/2023/03/JSON-URLS.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9985" class="wp-image-9985 size-full" src="https://zappysys.com/blog/wp-content/uploads/2023/03/JSON-URLS.png" alt="Filter the body content" width="828" height="735" srcset="https://zappysys.com/blog/wp-content/uploads/2023/03/JSON-URLS.png 828w, https://zappysys.com/blog/wp-content/uploads/2023/03/JSON-URLS-300x266.png 300w, https://zappysys.com/blog/wp-content/uploads/2023/03/JSON-URLS-768x682.png 768w" sizes="(max-width: 828px) 100vw, 828px" /></a><p id="caption-attachment-9985" class="wp-caption-text">Getting the information from the emails</p></div>
<p>5. Drag and drop the <strong>trash destination</strong> and save the result in a file with the following configuration. Make sure to check the <strong>Overwrite target file if exists</strong>.</p>
<div id="attachment_9986" style="width: 648px" class="wp-caption aligncenter"><a href="https://zappysys.com/blog/wp-content/uploads/2023/03/trash-url.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9986" class="wp-image-9986 size-full" src="https://zappysys.com/blog/wp-content/uploads/2023/03/trash-url.png" alt="Add destination and check the overwrite option" width="638" height="525" srcset="https://zappysys.com/blog/wp-content/uploads/2023/03/trash-url.png 638w, https://zappysys.com/blog/wp-content/uploads/2023/03/trash-url-300x247.png 300w" sizes="(max-width: 638px) 100vw, 638px" /></a><p id="caption-attachment-9986" class="wp-caption-text">Save the body from the emails in a file</p></div>
<p>Now we have saved the email body in the file, to extract the links we need to go control flow and drag and drop the Regular Expression Parser Task and follow the steps from below section.</p>
<h3>Getting all URLs from emails inside a variable</h3>
<p>6. The next step is to save the URLs&#8217;. We will use the Regular Expression Parser Task for this.<br />
Also, you need to use Regex and here is one example you can use, in this page <a href="https://regex101.com/">Regex101</a> you can check more details about the expressions we are using:</p>
<div id="attachment_9987" style="width: 694px" class="wp-caption aligncenter"><a href="https://zappysys.com/blog/wp-content/uploads/2023/03/regex-urls.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9987" class="wp-image-9987 size-full" src="https://zappysys.com/blog/wp-content/uploads/2023/03/regex-urls.png" alt="URLs from emails - Create the expression" width="684" height="695" srcset="https://zappysys.com/blog/wp-content/uploads/2023/03/regex-urls.png 684w, https://zappysys.com/blog/wp-content/uploads/2023/03/regex-urls-295x300.png 295w" sizes="(max-width: 684px) 100vw, 684px" /></a><p id="caption-attachment-9987" class="wp-caption-text">Getting all URL from the emails</p></div>
<p>Expression: <pre class="crayon-plain-tag">href="(.*?)"{{*}}</pre>
<h3>Save the result in a file of the URLs from emails</h3>
<p>7. Finally, use the<strong> Logging task</strong> to save the URLs in a file, use the following configuration</p>
<div id="attachment_9988" style="width: 548px" class="wp-caption aligncenter"><a href="https://zappysys.com/blog/wp-content/uploads/2023/03/logging-urls.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9988" class="wp-image-9988 size-full" src="https://zappysys.com/blog/wp-content/uploads/2023/03/logging-urls.png" alt="URLs from emails - Configure the logging Task to save on a file" width="538" height="475" srcset="https://zappysys.com/blog/wp-content/uploads/2023/03/logging-urls.png 538w, https://zappysys.com/blog/wp-content/uploads/2023/03/logging-urls-300x265.png 300w" sizes="(max-width: 538px) 100vw, 538px" /></a><p id="caption-attachment-9988" class="wp-caption-text">Uncheck all options and select message type as none</p></div>
<h2>Conclusion</h2>
<p>If everything is OK, you will be able to download the URLS from your emails. To do that, we read the list from the body of the emails. Then we get the URLs of the emails using expressions. Finally, we store them in a local file.</p>
<p>The post <a href="https://zappysys.com/blog/how-to-get-all-urls-from-emails-from-outlook/">How to get all URLs from emails from Outlook</a> appeared first on <a href="https://zappysys.com/blog">ZappySys Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to call NetSuite RESTlet API in SSIS / ODBC</title>
		<link>https://zappysys.com/blog/call-netsuite-restlet-ssis-odbc/</link>
		
		<dc:creator><![CDATA[ZappySys]]></dc:creator>
		<pubDate>Mon, 23 May 2022 21:18:19 +0000</pubDate>
				<category><![CDATA[ODBC PowerPack]]></category>
		<category><![CDATA[REST API]]></category>
		<category><![CDATA[REST API Integration]]></category>
		<category><![CDATA[SSIS OAuth Connection]]></category>
		<category><![CDATA[SSIS REST API Task]]></category>
		<category><![CDATA[NetSuite]]></category>
		<category><![CDATA[oauth]]></category>
		<category><![CDATA[oauth1]]></category>
		<category><![CDATA[oauth2]]></category>
		<category><![CDATA[rest api]]></category>
		<guid isPermaLink="false">https://zappysys.com/blog/?p=9657</guid>

					<description><![CDATA[<p>Introduction In our previous post we saw how to read API data in SSIS. This post we will cover how to call NetSuite RESTlet to read / write data in SSIS or ODBC Apps. For demo purpose we will use SSIS PowerPack REST API Task but concepts and many UI elements remain same for ODBC [&#8230;]</p>
<p>The post <a href="https://zappysys.com/blog/call-netsuite-restlet-ssis-odbc/">How to call NetSuite RESTlet API in SSIS / ODBC</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/2022/05/netsuite-logo.png"><img loading="lazy" decoding="async" class=" wp-image-9658 alignleft" src="https://zappysys.com/blog/wp-content/uploads/2022/05/netsuite-logo.png" alt="" width="144" height="114" srcset="https://zappysys.com/blog/wp-content/uploads/2022/05/netsuite-logo.png 309w, https://zappysys.com/blog/wp-content/uploads/2022/05/netsuite-logo-300x238.png 300w" sizes="(max-width: 144px) 100vw, 144px" /></a>In our previous post we saw how to <a href="https://zappysys.com/blog/ssis-read-api-data-load-sql-table/">read API data in SSIS</a>. This post we will cover how to call <a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_N2979684.html">NetSuite RESTlet</a> to read / write data in SSIS or ODBC Apps. For demo purpose we will use <a href="https://zappysys.com/products/ssis-powerpack/ssis-rest-api-web-service-task/">SSIS PowerPack REST API Task</a> but concepts and many UI elements remain same for <a href="https://zappysys.com/products/odbc-powerpack/odbc-json-rest-api-driver/">ODBC JSON Driver</a> too. This article assumes you know how to write Netsuite RESTlet and you have obtained Credentials to call RESTlet from extranal app.</p>
<h2></h2>
<h2></h2>
<h2>What is NetSuite RESTlets</h2>
<p>NetSuite added a really nice feature to expose business data and workflows as API by writing Javascript functions which they call it <strong>RESTlets</strong>. You can secure and customize these restlets as per your need.</p>
<p>You can automate CRUD (Create /Read / Write / Delete) operations in NetSuite by writing special functions in JavaScript and expose those functions as API URL which can be called by any external Systems (i.e. SSIS Packages , ODBC Apps like Power BI, Informatica, SSRS).</p>
<p>RESTlet can be secured few ways such as OAuth 1.0 and OAuth 2.0 authentication. We will cover both approach briefly in this article. You can choose any one as per your need</p>
<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>Creating NetSuite RESTlet / Obtain OAuth Credentials (Client ID and Secret)</h2>
<p>Below video shows how to obtain necessary credentials to call Netsuites API (RESTlet).</p>
<p>At mark 4:30 seconds it will show you How to use OAuth 2.0 for calling RESTlet</p>
<a href="https://zappysys.com/blog/call-netsuite-restlet-ssis-odbc/"><img decoding="async" src="https://zappysys.com/blog/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FMAOMQp5dh0U%2Fhqdefault.jpg" alt="YouTube Video"></a><br /><br /></p>
<p>&nbsp;</p>
<h2>Create NetSuite RESTlet Connection</h2>
<p>There are few ways to authenticate NetSuite RESTlet. If you are using ZappySys Products then it makes it super easy to use either approach. Lets look at both approaches.</p>
<h3>Using OAuth 2.0 (Recommended)</h3>
<p>As per above video if you obtained Client ID and Secret for OAuth 2.0 you can follow below steps to configure OAuth connection to call RESTlet.</p>
<p>What you need to use OAuth 2.0.</p>
<ul>
<li>Your Account ID (it goes in URL)</li>
<li>Your Client ID and Secret (Obtained from Netsuite Portal) &#8211; See above video Mark 04:30</li>
<li>Register Redirect URL in NetSuite portal (we recommend you use <strong>https://zappysys.com/oauth</strong> as call back Url for Automatic Code extraction)</li>
</ul>
<p><strong>Steps to configure OAuth Connection</strong></p>
<ol>
<li>Right click on Connection Panel and choose Choose &#8220;New Connection..&#8221;. Select <strong>ZS-OAUTH</strong> type<br />
<strong><strong><br />
</strong></strong></p>
<div id="attachment_1569" style="width: 687px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2017/07/ssis-oauth-create-new-connection.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1569" class="size-full wp-image-1569" src="https://zappysys.com/blog/wp-content/uploads/2017/07/ssis-oauth-create-new-connection.png" alt="Create new SSIS OAuth API Connection Manager" width="677" height="220" srcset="https://zappysys.com/blog/wp-content/uploads/2017/07/ssis-oauth-create-new-connection.png 677w, https://zappysys.com/blog/wp-content/uploads/2017/07/ssis-oauth-create-new-connection-300x97.png 300w" sizes="(max-width: 677px) 100vw, 677px" /></a><p id="caption-attachment-1569" class="wp-caption-text">Create new SSIS OAuth API Connection Manager</p></div>
<p>&nbsp;</p>
<p>&nbsp;</li>
<li> Enter following things<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
<strong>On General Tab<br />
</strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
ClientID and Secret: <strong>&lt;get it from NetSuite&gt;</strong><br />
Authorization URL: <strong>https://&lt;accountID&gt;.</strong><a href="http://app.netsuite.com/app/login/oauth2/authorize.nl" target="_blank" rel="noopener noreferrer"><strong>app.netsuite.com/app/login/oauth2/authorize.nl</strong></a><br />
Token URL: <strong>https://&lt;accountID&gt;.suitetalk.api.netsuite.com/services/rest/auth/oauth2/v1/token<br />
</strong>Scope: <strong><strong><strong>restlet</strong></strong></strong></p>
<div id="attachment_9660" style="width: 642px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2022/05/netsuite-oauth2-api-connection.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9660" class="size-full wp-image-9660" src="https://zappysys.com/blog/wp-content/uploads/2022/05/netsuite-oauth2-api-connection.png" alt="Configure NetSuite OAuth 2.0 Connection for API call" width="632" height="418" srcset="https://zappysys.com/blog/wp-content/uploads/2022/05/netsuite-oauth2-api-connection.png 632w, https://zappysys.com/blog/wp-content/uploads/2022/05/netsuite-oauth2-api-connection-300x198.png 300w" sizes="(max-width: 632px) 100vw, 632px" /></a><p id="caption-attachment-9660" class="wp-caption-text">Configure NetSuite OAuth 2.0 Connection for API call</p></div>
<p>&nbsp;</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
<strong>On Advanced Tab<br />
</strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
Callback / Redirect URL:  <strong>https://zappysys.com/oauth </strong> (this must be entered same way in NetSuite Portal)</p>
<div id="attachment_9659" style="width: 563px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2022/05/oauth2-connection-callback-redirect-url.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9659" class="size-full wp-image-9659" src="https://zappysys.com/blog/wp-content/uploads/2022/05/oauth2-connection-callback-redirect-url.png" alt="OAuth2 Connection - Callback / Redirect URL" width="553" height="201" srcset="https://zappysys.com/blog/wp-content/uploads/2022/05/oauth2-connection-callback-redirect-url.png 553w, https://zappysys.com/blog/wp-content/uploads/2022/05/oauth2-connection-callback-redirect-url-300x109.png 300w" sizes="(max-width: 553px) 100vw, 553px" /></a><p id="caption-attachment-9659" class="wp-caption-text">OAuth2 Connection &#8211; Callback / Redirect URL</p></div></li>
<li>Now go back to General Tab and click <strong>Generate Token</strong> button</li>
<li>Follow login screen and try to finish the flow. At the end it will generate Tokens and populate on UI</li>
<li>Click OK to save</li>
</ol>
<h3>Using OAuth 1.0</h3>
<p>Another approach is use OAuth 1.0 (Older version). If you have enabled OAuth 1.0 in NetSuite then follow below steps (Create connection is same as before).</p>
<ol>
<li>Setup General Tab and Advanced Tab as below.<br />
On <strong>==== </strong><strong>General Tab====</strong>:<br />
Enter ClientID, ClientSecret, AccessToken, AccessToken Secret<br />
On <strong>==== </strong><strong>Advanced Tab ====</strong>:<br />
Check <strong>Do Not Include Empty Key/Value Pairs</strong><br />
Select Signature Method as <strong>HMAC-SHA256</strong><br />
For Extra Token Attribute enter <strong>realm=&lt;your-account-number&gt;_SB1</strong></li>
<li>Click OK to Save</li>
</ol>
<p><a href="https://zappysys.com/blog/wp-content/uploads/2022/05/netsuite-oauth1-api-connection.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-9662" src="https://zappysys.com/blog/wp-content/uploads/2022/05/netsuite-oauth1-api-connection.png" alt="" width="495" height="363" srcset="https://zappysys.com/blog/wp-content/uploads/2022/05/netsuite-oauth1-api-connection.png 495w, https://zappysys.com/blog/wp-content/uploads/2022/05/netsuite-oauth1-api-connection-300x220.png 300w" sizes="(max-width: 495px) 100vw, 495px" /></a></p>
<p><a href="https://zappysys.com/blog/wp-content/uploads/2022/05/netsuite-oauth1-api-connection_realm_accountnumber.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-9661" src="https://zappysys.com/blog/wp-content/uploads/2022/05/netsuite-oauth1-api-connection_realm_accountnumber.png" alt="" width="495" height="363" srcset="https://zappysys.com/blog/wp-content/uploads/2022/05/netsuite-oauth1-api-connection_realm_accountnumber.png 495w, https://zappysys.com/blog/wp-content/uploads/2022/05/netsuite-oauth1-api-connection_realm_accountnumber-300x220.png 300w" sizes="(max-width: 495px) 100vw, 495px" /></a></p>
<h2></h2>
<h2>Call NetSuite RESTlet in SSIS</h2>
<ol>
<li>Create a new SSIS Package</li>
<li>Drag REST API Task from SSIS Toolbox<img decoding="async" class="figureimage" title="SSIS REST Api Web Service Task - Drag and Drop" src="https://zappysys.com/onlinehelp/ssis-powerpack/scr/images/rest-api-task/ssis-rest-api-web-service-task-drag.png" alt="SSIS REST Api Task - Drag and Drop" /></li>
<li>Double click the Task to configure</li>
<li>Select <strong>URL from Connection </strong></li>
<li>From Connection dropdown select OAuth connection we created in the earlier section (either OAuth 1 or OAuth 2)</li>
<li>Enter the URL as below. Assuming you copied URL from NetSuite Replace script ID and account number<br />
<pre class="crayon-plain-tag">https://&lt;account-number&gt;-sb1.restlets.api.netsuite.com/app/site/hosting/restlet.nl?script=&lt;scriptid&gt;&amp;deploy=1</pre>Enter <strong>&lt;account-number&gt;</strong><br />
Enter <strong>&lt;scriptid&gt;</strong></li>
<li>Change Method to POST if your script supports Parameters (Else you can supply id=xxxx and recordtype=xxxxx in the URL for GET request)</li>
<li>If its POST request then chnage ContentType to ApplicationJSON (application/json)</li>
<li>Enter your Input in the body. In below example our RESTlet takes sql query as input so we enter just one parameter named query but you can have different parameter(s)<br />
<pre class="crayon-plain-tag">Syntax:  { param1_name : &lt;value&gt; , param2_name : &lt;value&gt; ....  }</pre>
</li>
<li>Now click Test see everything works
<div id="attachment_9663" style="width: 1178px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2022/05/calling-netsuite-restlet-api-ssis.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9663" class="size-full wp-image-9663" src="https://zappysys.com/blog/wp-content/uploads/2022/05/calling-netsuite-restlet-api-ssis.png" alt="Calling NetSuite RESTlet in SSIS (Using REST API Task)" width="1168" height="928" srcset="https://zappysys.com/blog/wp-content/uploads/2022/05/calling-netsuite-restlet-api-ssis.png 1168w, https://zappysys.com/blog/wp-content/uploads/2022/05/calling-netsuite-restlet-api-ssis-300x238.png 300w, https://zappysys.com/blog/wp-content/uploads/2022/05/calling-netsuite-restlet-api-ssis-768x610.png 768w, https://zappysys.com/blog/wp-content/uploads/2022/05/calling-netsuite-restlet-api-ssis-1024x814.png 1024w" sizes="(max-width: 1168px) 100vw, 1168px" /></a><p id="caption-attachment-9663" class="wp-caption-text">Calling NetSuite RESTlet in SSIS (Using REST API Task)</p></div></li>
</ol>
<p>&nbsp;</p>
<h2>Conclusion</h2>
<p>We saw how easy it is to call NetSuite RESTlets or other NetSuite API in SSIS / other BI Apps using ODBC Drivers provided by ZappySys. <a href="https://zappysys.com/products/ssis-powerpack/download/">Download SSIS PowerPack</a> and try your self see how easy it is to consume virtually any API in SSIS.</p>
<p>The post <a href="https://zappysys.com/blog/call-netsuite-restlet-ssis-odbc/">How to call NetSuite RESTlet API in SSIS / ODBC</a> appeared first on <a href="https://zappysys.com/blog">ZappySys Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to query salesforce data using Bulk API in SSIS</title>
		<link>https://zappysys.com/blog/query-salesforce-data-using-bulk-api-ssis/</link>
		
		<dc:creator><![CDATA[ZappySys]]></dc:creator>
		<pubDate>Thu, 20 Jan 2022 19:07:09 +0000</pubDate>
				<category><![CDATA[SSIS CSV Source]]></category>
		<category><![CDATA[SSIS Salesforce API Task]]></category>
		<category><![CDATA[SSIS Salesforce Connection]]></category>
		<category><![CDATA[bulk api]]></category>
		<category><![CDATA[pagination]]></category>
		<category><![CDATA[regex]]></category>
		<category><![CDATA[Regular Expression]]></category>
		<category><![CDATA[salesforce]]></category>
		<guid isPermaLink="false">https://zappysys.com/blog/?p=9507</guid>

					<description><![CDATA[<p>Introduction In our previous post, we saw how to read Salesforce data using SSIS Salesforce Source (Which uses SOAP API under the hood). This may be slow if you have millions of rows because Salesforce Source paginates every 2000 rows, so it&#8217;s not a good option to read millions of rows to iterate on a [&#8230;]</p>
<p>The post <a href="https://zappysys.com/blog/query-salesforce-data-using-bulk-api-ssis/">How to query salesforce data using Bulk API in SSIS</a> appeared first on <a href="https://zappysys.com/blog">ZappySys Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Introduction</h2>
<p>In our previous post, we saw how to <a href="https://zappysys.com/blog/export-data-from-salesforce-to-sql-server-using-ssis/" target="_blank" rel="noopener">read Salesforce</a> data using SSIS Salesforce Source (Which uses SOAP API under the hood). This may be slow if you have millions of rows because Salesforce Source paginates every 2000 rows, so it&#8217;s not a good option to read millions of rows to iterate on a large Salesforce dataset (Table or Query). To increase the read speed, you can use BULK API. This article explains how to read salesforce data using BULK API and increase read speed.</p>
<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>NEW Version (v5.5+)</h2>
<p>In the new version (v5.5), we have added an option to query in Bulk Mode. This means if you have millions of Salesforce object rows to read, no worries; it may be very fast in the new version. Previously, it used to take a long time because it read in batches of 2000 rows in each request. With the Bulk API, the batch size is really large.</p>
<p>Here is how to set Salesforce Bulk API Mode in SELECT query (Read operation).</p>
<ol>
<li>Install new version of SSIS PowerPack. Make sure it is v5.5 or higher.</li>
<li>Open existing Salesforce Source UI</li>
<li>Make sure you <strong>check [Use Bulk API]</strong> option like below. if you do not see this option then most likely you are using older version.<br />
-OR-<br />
Just add <strong>#bulkmode</strong> prefix in the SQL query like below, it will use Bulk API</p>
<div id="attachment_11114" style="width: 687px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2022/01/ssis-salesforce-bulk-api-option-soql-select-query.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-11114" class="size-full wp-image-11114" src="https://zappysys.com/blog/wp-content/uploads/2022/01/ssis-salesforce-bulk-api-option-soql-select-query.png" alt="" width="677" height="585" srcset="https://zappysys.com/blog/wp-content/uploads/2022/01/ssis-salesforce-bulk-api-option-soql-select-query.png 677w, https://zappysys.com/blog/wp-content/uploads/2022/01/ssis-salesforce-bulk-api-option-soql-select-query-300x259.png 300w" sizes="(max-width: 677px) 100vw, 677px" /></a><p id="caption-attachment-11114" class="wp-caption-text">Bulk API mode for SSIS Salesforce Source (Read Large amount of data using SOQL Query)</p></div></li>
</ol>
<h2>OLD Version</h2>
<p>If you are using an older version of SSIS Power Pack (v5.4.0 or older), you can follow the steps mentioned in the following section.</p>
<p>We will see how to query using Salesforce Bulk API in SSIS. It involves three simple steps like the one below.</p>
<ol>
<li>Call BULK API &#8211; Submit SOQL Query and receive a JobId back (Use <a href="https://zappysys.com/products/ssis-powerpack/ssis-salesforce-api-task/">SSIS Salesforce API Task</a>)<br />
<pre class="crayon-plain-tag">https://{your-instance}.salesforce.com/services/data/v50.0/jobs/query</pre>
</li>
<li>Keep checking Job Status Until Status is <strong>JobComplete</strong> (Use <a href="https://zappysys.com/products/ssis-powerpack/ssis-salesforce-api-task/">SSIS Salesforce API Task</a>)<br />
<pre class="crayon-plain-tag">https://{your-instance}.salesforce.com/services/data/v50.0/jobs/query/{{User::JobId}}</pre>
</li>
<li>Read Query Result  (Use <a href="https://zappysys.com/products/ssis-powerpack/ssis-csv-file-source-flat-file-web-api/" target="_blank" rel="noopener">SSIS CSV Source</a>)<br />
<pre class="crayon-plain-tag">https://{your-instance}.salesforce.com/services/data/v50.0/jobs/query/{{User::JobId}}/results</pre>
</li>
</ol>
<div id="attachment_9515" style="width: 671px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2022/01/salesforce-query-bulk-api-read-data.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9515" class="size-full wp-image-9515" src="https://zappysys.com/blog/wp-content/uploads/2022/01/salesforce-query-bulk-api-read-data.png" alt="Query Salesforce Data using Bulk API in SSIS (read using SOQL query in Bulk mode / large dataset)" width="661" height="330" srcset="https://zappysys.com/blog/wp-content/uploads/2022/01/salesforce-query-bulk-api-read-data.png 661w, https://zappysys.com/blog/wp-content/uploads/2022/01/salesforce-query-bulk-api-read-data-300x150.png 300w" sizes="(max-width: 661px) 100vw, 661px" /></a><p id="caption-attachment-9515" class="wp-caption-text">Query Salesforce Data using Bulk API in SSIS (read using SOQL query in Bulk mode / large dataset)</p></div>
<p>Now, let&#8217;s look at everything in detail.</p>
<h3>Obtain Salesforce Credentials</h3>
<p>The first step to call Salesforce API is to obtain credentials (security token or OAuth ClientId /Secret)</p>
<p>Method#1 &#8211; Check <a href="https://zappysys.com/blog/export-data-from-salesforce-to-sql-server-using-ssis/#Get_Salesforce_Security_Token">this article</a> to use <strong>UserId/ Password / SecretToken</strong><br />
Method#2 &#8211; Check <a href="https://zappysys.com/blog/register-salesforce-app-obtain-client-id-secret-oauth-api-call/">this article</a> to use the <strong>OAuth</strong> Connection Option</p>
<h3>Create Salesforce Connection</h3>
<p>Once we have Salesforce Credentials, we can create a new Salesforce Connection (You can do this from Task UI or the below way)</p>
<ol>
<li>Open Visual Studio ( Assuming you already have SSIS installed along with <a href="https://zappysys.com/products/ssis-powerpack/download/" target="_blank" rel="noopener">ZappySys PowerPack</a> )</li>
<li>Create a New SSIS Package Project.</li>
<li>Right-click on the Connection Manager panel and click on New Connection.<br />
<img decoding="async" class="figureimage" title="SSIS Create New Connection" src="https://zappysys.com/onlinehelp/ssis-powerpack/scr/images/ssis-new-connection.png" alt="SSIS Create New Connection" /></li>
<li>Select <strong>ZS-SALESFORCE</strong> Connection Manager from the Connection Managers list and Click on the Add Button.<br />
<img decoding="async" class="figureimage" title="SSIS Salesforce Connection Manager - ADD" src="https://zappysys.com/onlinehelp/ssis-powerpack/scr/images/salesforce-connection/ssis-salesforce-api-task-connection-1.png" alt="SSIS Salesforce Connection Manager - ADD" /></li>
<li>Now in Connection Manager UI, Enter your SalesForce Credentials (OAuth Client Id/. Secret &#8211;or&#8212; User Name, Password and Security Token), and leave all other properties as it is.<br />
<img decoding="async" class="figureimage" title="SSIS Salesforce Connection Manager UI " src="https://zappysys.com/onlinehelp/ssis-powerpack/scr/images/salesforce-connection/ssis-salesforce-connection-manager-ui.png" alt="SSIS Salesforce Connection Manager UI " /></li>
</ol>
<h3>Call Create Job &#8211; Retrieve / Save JobId</h3>
<p>Once the connection is created, we can create our first step. Basically, we will call this API to <a href="https://developer.salesforce.com/docs/atlas.en-us.api_asynch.meta/api_asynch/query_create_job.htm" target="_blank" rel="noopener">create Job</a> (Bulk Read)</p>
<ol>
<li>Here, in Visual Studio, drag and drop the ZS Salesforce API Task on the design surface.<img decoding="async" class="figureimage" title="SSIS Salesforce API Task - Drag and Drop" src="https://zappysys.com/onlinehelp/ssis-powerpack/scr/images/salesforce-api-task/ssis-salesforce-api-task-drag.png" alt="SSIS Salesforce API Task - Drag and Drop" /></li>
<li>Double click the Task and configure Request Settings Tab like below<br />
&#8211; Select Salesforce Connection (Created in the previous section)<br />
&#8211; Check <strong>Use direct URL</strong><br />
&#8211; Enter URL like below (Replace <strong>{your-instance}</strong> with your own instance (i.e. na9) . For more information on how to find out my<br />
salesforce instance id <a href="https://help.salesforce.com/s/articleView?id=000322728&amp;type=1">check this article</a><br />
<pre class="crayon-plain-tag">https://{your-instance}.salesforce.com/services/data/v50.0/jobs/query</pre>
&#8211; Request Method <strong>POST</strong><br />
&#8211; Enter Body like below (You can use your own <a href="https://developer.salesforce.com/docs/atlas.en-us.soql_sosl.meta/soql_sosl/sforce_api_calls_soql.htm" target="_blank" rel="noopener">SOQL query</a>). Keep in mind SQOL must be <a href="https://www.freeformatter.com/json-escape.html" target="_blank" rel="noopener">encoded for JSON format</a>. This means the entire SQL must be in one line (replace new lines with \r\n , quotes with \&#8221; and tabs with \t)<br />
For example, to execute SELECT Id, Name FROM Accounts, you can write something like the one below in BODY.<br />
<pre class="crayon-plain-tag">{
  "operation": "query",
  "query": "SELECT Id, Name\r\nFROM Account"
}</pre>
The above is for below (with a new line)<br />
<pre class="crayon-plain-tag">SELECT Id, Name
FROM Account</pre>
<div id="attachment_9516" style="width: 690px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2022/01/ssis-call-salesforce-bulk-api-query-soql-sql.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9516" class="size-full wp-image-9516" src="https://zappysys.com/blog/wp-content/uploads/2022/01/ssis-call-salesforce-bulk-api-query-soql-sql.png" alt="Create Job - Call Bulk API to Read / Query using SOQL" width="680" height="547" srcset="https://zappysys.com/blog/wp-content/uploads/2022/01/ssis-call-salesforce-bulk-api-query-soql-sql.png 680w, https://zappysys.com/blog/wp-content/uploads/2022/01/ssis-call-salesforce-bulk-api-query-soql-sql-300x241.png 300w" sizes="(max-width: 680px) 100vw, 680px" /></a><p id="caption-attachment-9516" class="wp-caption-text">Create Job &#8211; Call Bulk API to Read / Query using SOQL</p></div></li>
<li>Now Click Test Request (Copy the <strong>JobId</strong> which we will use in the Variable for Designtime Testing)</li>
<li>On the Response Tab, configure it like the below.<br />
&#8211; Select Response content Type = Json<br />
&#8211; Enter <strong>$.id</strong> as the expression<br />
&#8211; Check Save response option<br />
&#8211; Select Save to Variable and click New to create a variable. Name it <strong>JobId</strong> and enter a sample <strong>JobId</strong> value (copied from the previous step)</p>
<div id="attachment_9517" style="width: 459px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2022/01/ssis-call-salesforce-bulk-api-extract-jobid-from-result.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9517" class="size-full wp-image-9517" src="https://zappysys.com/blog/wp-content/uploads/2022/01/ssis-call-salesforce-bulk-api-extract-jobid-from-result.png" alt="Extract Salesforce JobId save to SSIS Variable" width="449" height="236" srcset="https://zappysys.com/blog/wp-content/uploads/2022/01/ssis-call-salesforce-bulk-api-extract-jobid-from-result.png 449w, https://zappysys.com/blog/wp-content/uploads/2022/01/ssis-call-salesforce-bulk-api-extract-jobid-from-result-300x158.png 300w" sizes="(max-width: 449px) 100vw, 449px" /></a><p id="caption-attachment-9517" class="wp-caption-text">Extract Salesforce JobId save to SSIS Variable</p></div></li>
</ol>
<h3>Do Status Check &#8211; Look for JobComplete</h3>
<p>Once we create a job and store JobId in the variable we have to keep <a href="https://developer.salesforce.com/docs/atlas.en-us.api_asynch.meta/api_asynch/query_get_one_job.htm" target="_blank" rel="noopener">checking Job status</a> every X seconds. Don&#8217;t worry you don&#8217;t have to use Loop or timer control for that. ZappySys made it so simple to check such thing without Loop /Timer.</p>
<ol>
<li>Drag and drop the ZS Salesforce API Task in the design surface.<img decoding="async" class="figureimage" title="SSIS Salesforce API Task - Drag and Drop" src="https://zappysys.com/onlinehelp/ssis-powerpack/scr/images/salesforce-api-task/ssis-salesforce-api-task-drag.png" alt="SSIS Salesforce API Task - Drag and Drop" /></li>
<li>Double click and configure like below. URL will be different this time. Use variable as below and replace your instance ID<br />
<pre class="crayon-plain-tag">https://{your-instance}.salesforce.com/services/data/v50.0/jobs/query/{{User::JobId}}</pre>
<div id="attachment_9518" style="width: 720px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2022/01/ssis-salesforce-api-job-status-check.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9518" class="size-full wp-image-9518" src="https://zappysys.com/blog/wp-content/uploads/2022/01/ssis-salesforce-api-job-status-check.png" alt="Check Salesforce Job Status Periodically (Without Loop + Timer Controls) " width="710" height="566" srcset="https://zappysys.com/blog/wp-content/uploads/2022/01/ssis-salesforce-api-job-status-check.png 710w, https://zappysys.com/blog/wp-content/uploads/2022/01/ssis-salesforce-api-job-status-check-300x239.png 300w" sizes="(max-width: 710px) 100vw, 710px" /></a><p id="caption-attachment-9518" class="wp-caption-text">Check Salesforce Job Status Periodically (Without Loop + Timer Controls)</p></div></li>
<li>Now go to the Status Check Tab and configure it, as shown below. It will keep looking for the words below in the response to decide whether it is a Success or Failure. If those words are not found, they will be checked every 5 seconds (Maximum 1200 secs).<br />
&#8211; Check Enable Status Check option<br />
&#8211; For Success Value &#8211; Enter <strong>JobComplete</strong><br />
-Check Fail task option<br />
&#8211; Enter <strong>Cancel|Failed|Abort</strong> in the text box</p>
<div id="attachment_9519" style="width: 709px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2022/01/ssis-salesforce-api-job-status-check-2.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9519" class="size-full wp-image-9519" src="https://zappysys.com/blog/wp-content/uploads/2022/01/ssis-salesforce-api-job-status-check-2.png" alt="Configure Job Status Check Loop using Salesforce API Task" width="699" height="640" srcset="https://zappysys.com/blog/wp-content/uploads/2022/01/ssis-salesforce-api-job-status-check-2.png 699w, https://zappysys.com/blog/wp-content/uploads/2022/01/ssis-salesforce-api-job-status-check-2-300x275.png 300w" sizes="(max-width: 699px) 100vw, 699px" /></a><p id="caption-attachment-9519" class="wp-caption-text">Configure Job Status Check Loop using Salesforce API Task</p></div></li>
</ol>
<h2></h2>
<h3>Read data (Compressed CSV Format)</h3>
<p>Last step is <a href="https://developer.salesforce.com/docs/atlas.en-us.api_asynch.meta/api_asynch/query_get_job_results.htm" target="_blank" rel="noopener">read the result</a> from completed Salesforce Job. Its in CSV format so we will use Advanced <a href="https://zappysys.com/products/ssis-powerpack/ssis-csv-file-source-flat-file-web-api/" target="_blank" rel="noopener">SSIS CSV Source</a> which supports API connection to Salesforce. For that, we will use the same Salesforce API Task used before.</p>
<ol>
<li>Drag and Drop SSIS Data Flow Task from SSIS Toolbox.<br />
<img decoding="async" class="figureimage" title="SSIS Data Flow Task - Drag and Drop" src="https://zappysys.com/onlinehelp/ssis-powerpack/scr/images/drag-and-drop-data-flow-task.png" alt="SSIS Data Flow Task - Drag and Drop" /></li>
<li>Double click on the DataFlow task to see DataFlow designer surface.</li>
<li>Here, In Visual Studio, drag and drop the ZS CSV Source (Web API or File) in the design panel<br />
<img decoding="async" class="figureimage" title="SSIS CSV Source (Web API or File) - Drag and Drop" src="https://zappysys.com/onlinehelp/ssis-powerpack/scr/images/csv-source/ssis-csv-file-source-drag.png" alt="SSIS CSV Source (Web API or File) - Drag and Drop" /></li>
<li>Double click on ZS CSV Source (Web API or File) Configure it like below.<br />
&#8211; Enter URL to read result like this (You can supply OPTIONAL maxRecords parameters to control how much data comes in a single response)<br />
<pre class="crayon-plain-tag">https://{your-instance}.salesforce.com/services/data/v50.0/jobs/query/{{User::JobId}}/results
--OR--
https://{your-instance}.salesforce.com/services/data/v50.0/jobs/query/{{User::JobId}}/results?maxRecords=50000</pre>
&#8211; Check Use Credentials and select Salesforce Connection<br />
&#8211; Click Preview (assuming JobId variable has a valid completed JobId)</p>
<div id="attachment_9520" style="width: 689px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2022/01/read-salesforce-data-bulk-api-csv-result.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9520" class="size-full wp-image-9520" src="https://zappysys.com/blog/wp-content/uploads/2022/01/read-salesforce-data-bulk-api-csv-result.png" alt="Read Salesforce Bulk API Job Result - Using SSIS CSV / API Source" width="679" height="663" srcset="https://zappysys.com/blog/wp-content/uploads/2022/01/read-salesforce-data-bulk-api-csv-result.png 679w, https://zappysys.com/blog/wp-content/uploads/2022/01/read-salesforce-data-bulk-api-csv-result-300x293.png 300w" sizes="(max-width: 679px) 100vw, 679px" /></a><p id="caption-attachment-9520" class="wp-caption-text">Read Salesforce Bulk API Job Result &#8211; Using SSIS CSV / API Source</p></div></li>
<li>Now, set up Pagination as below to read all records using an automated loop. You will need <strong>VERSION Released after Jun 20, 2022</strong> to use Regular Expression feature in Header Value extractionBy default, Salesforce doesn&#8217;t send all records in response so we <a href="https://zappysys.com/blog/ssis-rest-api-looping-until-no-more-pages-found/#Method-7_REST_APIPagination_using_Cursor_Continuation_Token_from_Response_Header" target="_blank" rel="noopener">need to setup pagination</a>. In below example we are reading <strong>Sforce-Locator</strong> attribute from Response and sending it to the next URL as <strong>locator=&lt;continue-token&gt;</strong> value<br />
&#8211; Choose <strong>Response Header Contains Continue Token </strong><br />
&#8211; Enter below expression in <strong>Page Num Indicator</strong><br />
<pre class="crayon-plain-tag">locator=Sforce-Locator(^((?!null\b).)*$)</pre>
Basically, the above expression will keep looping until we find <strong>Sforce-Locator : null</strong> in the response header.</p>
<div id="attachment_9723" style="width: 872px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2022/01/salesforce-bulk-query-api-pagination-read-csv-data.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9723" class="size-full wp-image-9723" src="https://zappysys.com/blog/wp-content/uploads/2022/01/salesforce-bulk-query-api-pagination-read-csv-data.png" alt="Pagination for Salesforce Bulk Query API (Get Header Value from Sforce-Locator)" width="862" height="523" srcset="https://zappysys.com/blog/wp-content/uploads/2022/01/salesforce-bulk-query-api-pagination-read-csv-data.png 862w, https://zappysys.com/blog/wp-content/uploads/2022/01/salesforce-bulk-query-api-pagination-read-csv-data-300x182.png 300w, https://zappysys.com/blog/wp-content/uploads/2022/01/salesforce-bulk-query-api-pagination-read-csv-data-768x466.png 768w" sizes="(max-width: 862px) 100vw, 862px" /></a><p id="caption-attachment-9723" class="wp-caption-text">Pagination for Salesforce Bulk Query API (Get Header Value from Sforce-Locator)</p></div></li>
<li>Click OK to save and now run entire package like below.</li>
</ol>
<div id="attachment_9515" style="width: 671px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2022/01/salesforce-query-bulk-api-read-data.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9515" class="size-full wp-image-9515" src="https://zappysys.com/blog/wp-content/uploads/2022/01/salesforce-query-bulk-api-read-data.png" alt="Query Salesforce Data using Bulk API in SSIS (read using SOQL query in Bulk mode / large dataset)" width="661" height="330" srcset="https://zappysys.com/blog/wp-content/uploads/2022/01/salesforce-query-bulk-api-read-data.png 661w, https://zappysys.com/blog/wp-content/uploads/2022/01/salesforce-query-bulk-api-read-data-300x150.png 300w" sizes="(max-width: 661px) 100vw, 661px" /></a><p id="caption-attachment-9515" class="wp-caption-text">Query Salesforce Data using Bulk API in SSIS (read using SOQL query in Bulk mode / large dataset)</p></div>
<h2>Conclusion</h2>
<p>In this article we saw how to use various ZappySys Components / Task to achieve complex Salesforce API calls to read Query data using Bulk API. Download <a href="https://zappysys.com/products/ssis-powerpack/" target="_blank" rel="noopener">SSIS PowerPack</a> and try yourself and also explore 70+ other tasks /components not discussed in this article.</p>
<p>The post <a href="https://zappysys.com/blog/query-salesforce-data-using-bulk-api-ssis/">How to query salesforce data using Bulk API in SSIS</a> appeared first on <a href="https://zappysys.com/blog">ZappySys Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to create SSIS Package Programmatically (Add / Execute Tasks)</title>
		<link>https://zappysys.com/blog/create-ssis-package-programmatically-add-execute-connections-tasks/</link>
		
		<dc:creator><![CDATA[ZappySys]]></dc:creator>
		<pubDate>Fri, 31 Dec 2021 15:00:01 +0000</pubDate>
				<category><![CDATA[SSIS PowerPack]]></category>
		<category><![CDATA[SSIS SFTP Task]]></category>
		<category><![CDATA[SSIS Tips & How-Tos]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[sftp]]></category>
		<category><![CDATA[ssis]]></category>
		<guid isPermaLink="false">https://zappysys.com/blog/?p=9500</guid>

					<description><![CDATA[<p>Introduction In this post, we will see how to create SSIS Package Programmatically to use ZappySys SSIS PowerPack. This blog post assumes you have basic knowledge of Programming language like C# and you have installed Visual Studio Express or a similar product (VS Code not supported). Add SSIS Dll References The very first thing is [&#8230;]</p>
<p>The post <a href="https://zappysys.com/blog/create-ssis-package-programmatically-add-execute-connections-tasks/">How to create SSIS Package Programmatically (Add / Execute Tasks)</a> appeared first on <a href="https://zappysys.com/blog">ZappySys Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Introduction</h2>
<p>In this post, we will see how to create SSIS Package Programmatically to use <a href="https://zappysys.com/products/ssis-powerpack/" target="_blank" rel="noopener">ZappySys SSIS PowerPack</a>. This blog post assumes you have basic knowledge of Programming language like C# and you have installed <strong>Visual Studio Express</strong> or a similar product (<strong>VS Code not supported</strong>).</p>
<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>Add SSIS Dll References</h2>
<p>The very first thing is to create a C# Project (i.e. Console or WinForm). Add SSIS dll reference.</p>
<p><a href="https://zappysys.com/blog/wp-content/uploads/2021/12/create-ssis-package-programatically-add-dll-reference-visual-studio.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-9503" src="https://zappysys.com/blog/wp-content/uploads/2021/12/create-ssis-package-programatically-add-dll-reference-visual-studio.png" alt="" width="778" height="604" srcset="https://zappysys.com/blog/wp-content/uploads/2021/12/create-ssis-package-programatically-add-dll-reference-visual-studio.png 778w, https://zappysys.com/blog/wp-content/uploads/2021/12/create-ssis-package-programatically-add-dll-reference-visual-studio-300x233.png 300w, https://zappysys.com/blog/wp-content/uploads/2021/12/create-ssis-package-programatically-add-dll-reference-visual-studio-768x596.png 768w" sizes="(max-width: 778px) 100vw, 778px" /></a></p>
<p>You will need the following references in your project. The below example is for SSIS 2017 (Version 14.x.x)</p>
<ul>
<li>For SSIS 2012 change to Version=11.0.0.0</li>
<li>For SSIS 2014 change to Version=12.0.0.0</li>
<li>For SSIS 2016 change to Version=13.0.0.0</li>
<li>For SSIS 2017 change to Version=14.0.0.0</li>
<li>For SSIS 2019 change to Version=15.0.0.0</li>
<li>And may be future versions same way &#8230;.</li>
</ul>
<pre class="crayon-plain-tag">&lt;Reference Include="Microsoft.SqlServer.Dts.Design"/&gt;
&lt;Reference Include="Microsoft.SqlServer.DTSPipelineWrap" /&gt;
&lt;Reference Include="Microsoft.SQLServer.DTSRuntimeWrap" /&gt;
&lt;Reference Include="Microsoft.SQLServer.ManagedDTS" /&gt;
&lt;Reference Include="Microsoft.SqlServer.PipelineHost" /&gt;</pre>
<h2>Step-By-Step Example (Create SSIS Package Programmatically &#8211; C#)</h2>
<p>Now let&#8217;s see each piece to create SSIS Package in code and later we will show the full code.</p>
<h3>Import Namespaces</h3>
<p>First step is at the top you need to import some namespaces.</p><pre class="crayon-plain-tag">using Microsoft.SqlServer.Dts.Runtime;
using Microsoft.SqlServer.Dts.Pipeline;
//using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
//using Microsoft.SqlServer.Dts.Runtime.Wrapper;</pre><p>
<h3></h3>
<h3>Create SSIS Package</h3>
<p>Here how you can create SSIS Package instance in code</p><pre class="crayon-plain-tag">var p = new Package();</pre><p>
<h3>Add SSIS Connection</h3>
<p>Now lets add connection manager to our package instance. To add connection you will need two pieces. Creation Name (i.e. ZS-SFTP) and ConnectionString. You can find creation name from exsing Dtsx file by opening in text editor.</p><pre class="crayon-plain-tag">var conn1=p.Connections.Add(&quot;ZS-SFTP&quot;);
conn1.Name = &quot;MySftpConnection&quot;;
conn1.ConnectionString= &quot;Protocol=Sftp;ServerName=127.0.0.1;Port=0;LogonType=Normal;UserName=zstest;Password=zstest123&quot;;</pre><p>
<h4>How to find CreationName of SSIS Connection manager</h4>
<p>To find the creation name of your Connection Type open an existing DTSX file where you had similar connection type in the package. Locate node like below and check CrewationName. It can be a friendly name or can be fully qualified assembly name. Both ways is fine but a friendly name is easy to remember.</p><pre class="crayon-plain-tag">&lt;DTS:ConnectionManagers&gt;
  &lt;DTS:ConnectionManager
    DTS:refId="Package.ConnectionManagers[RedshiftConn1]"
    DTS:CreationName="ZS-POSTGRESQL"
    .........
    .........</pre><p>
<h4>How to find ConnectionString</h4>
<p>Now another thing you need to know is the exact connectionstring. You can go to SSIS Designer and right-click on Connection Icon and check Properties Grid. It will show you ConnectionString or you can use the above technique &gt; Open DTSX file in notepad and find connectinstring there.</p>
<p>ConnectionString doesnt include any passwords / secrets. So manually append those properties in your connectionstring when you set in code.</p>
<h3>Add SSIS Task</h3>
<p>Now let&#8217;s add task in our SSIS Package instance. To create SSIS Task programmatically in code, you need to know the exact type name (i.e. creation name). As we discussed earlier check your dtsx file to know the creation name for the task you like to create. In the below code we used a friendly name which is not supported in SSIS 2012 so for that you must use full name. For SSIS 2014 or higher you can use friendly names.</p>
<p>You can also find it in file like this (example of SSIS 2017 and 2019 folders)<br />
C:\Program Files (x86)\Microsoft SQL Server\140\DTS\UpgradeMappings\ZappySys.PowerPack140.Extensions.xml<br />
C:\Program Files (x86)\Microsoft SQL Server\150\DTS\UpgradeMappings\ZappySys.PowerPack150.Extensions.xml</p>
<p>&nbsp;</p><pre class="crayon-plain-tag">//var SSIS_VERSION = "110"; //110=SQL2012, 120=SQL2014, 130=SQL2016, 140=SQL2017, 150=SQL2019
//For SSIS 2012
var SFTP_TASK_2012 = "ZappySys.PowerPack.Task.SecureFtpTask.SecureFtpTask, ZappySys.PowerPack110, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1903265a93eae502";
//For SSIS 2014 or higher
//Goto folder like this and find zappysys extension file 
//(e.g. 140) =&gt; C:\Program Files (x86)\Microsoft SQL Server\140\DTS\UpgradeMappings\ZappySys.PowerPack140.Extensions.xml
//Find Task creation name there
var SFTP_TASK = "ZappySys.SecureFtpTask";

var tsk1 = p.Executables.Add(SFTP_TASK) as TaskHost;
tsk1.Properties["SourceStorageConnection"].SetValue(tsk1, "MySftpConnection");
tsk1.Properties["StorageAction"].SetValue(tsk1, 10); //DownloadFileFromFtp [10] find numeric value for this enum from help file&gt; properties https://zappysys.com/onlinehelp/ssis-powerpack/scr/ssis-sftp-ftp-ftps-task.htm
tsk1.Properties["SourcePathValue"].SetValue(tsk1, "subfolder/localsubfile1.csv");
tsk1.Properties["TargetPathValue"].SetValue(tsk1, @"c:\temp\");
tsk1.Properties["FileOverwriteAction"].SetValue(tsk1, 2); //OverwriteAll [2]</pre><p>
<h3>Execute SSIS Package</h3>
<p>Now let&#8217;s execute the package using the below line</p><pre class="crayon-plain-tag">var status =p.Execute();</pre><p>
<h3>Check Execution Errors</h3>
<p>At the end you need to check execution errors if any.</p><pre class="crayon-plain-tag">if (status != DTSExecResult.Success)
{
	string errs = p.Errors.Cast&lt;DtsError&gt;().Aggregate("",
           (current, err) =&gt; current + string.Format("Source={0}, Err={1}", err.Source, err.Description));
	throw new Exception("Package status was &gt;&gt; " + status + " &gt;&gt; " + errs);
}</pre><p>
&nbsp;</p>
<h3>Full Code</h3>
<p>Here is the full code</p><pre class="crayon-plain-tag">using System;
using System.Linq;
using System.Runtime.InteropServices;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime;
/*
For SSIS 2012 - Compile with .net 4.0
For SSIS 2014-2017 - Compile with .net 4.5 
For SSIS 2019 - Compile with .net 4.6.2
 */

//current one is SSIS 2017 (140 dlls)
/*
 * References needed for SSIS 2017 , for 2019 change 14.0.0.0 to 15.0.0.0
 * 
    &lt;Reference Include="Microsoft.SqlServer.DtsMsg, Version=14.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL" /&gt;
    &lt;Reference Include="Microsoft.SqlServer.Dts.Design, Version=14.0.0.0, PublicKeyToken=89845dcd8080cc91" /&gt;
    &lt;Reference Include="Microsoft.SqlServer.DTSPipelineWrap, Version=14.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL" /&gt;
    &lt;Reference Include="Microsoft.SQLServer.DTSRuntimeWrap, Version=14.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" /&gt;
    &lt;Reference Include="Microsoft.SQLServer.ManagedDTS, Version=14.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL" /&gt;
    &lt;Reference Include="Microsoft.SqlServer.PipelineHost, Version=14.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL" /&gt; 
 */
namespace SSISCodeDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            
            //Create_SSIS_Controlflow_Task_Demo();
            Create_SSIS_Dataflow_Source_Component_Demo();

            //Create_SSIS_Connection_Demo();
            //Create_SSIS_Variable_Demo();
            //Create_SSIS_Connect_Tasks_Demo();

        }

        private static void Create_SSIS_Controlflow_Task_Demo()
        {
            var p = new Microsoft.SqlServer.Dts.Runtime.Package();

            var conn1 = p.Connections.Add("ZS-SFTP");
            conn1.Name = "MySftpConnection";
            conn1.ConnectionString = "Protocol=Sftp;ServerName=127.0.0.1;Port=0;LogonType=Normal;UserName=zstest;Password=zstest123";

            //var SSIS_VERSION = "110"; //110=SQL2012, 120=SQL2014, 130=SQL2016, 140=SQL2017, 150=SQL2019
            //For SSIS 2012
            var SFTP_TASK_2012 = "ZappySys.PowerPack.Task.SecureFtpTask.SecureFtpTask, ZappySys.PowerPack110, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1903265a93eae502";
            //For SSIS 2014 or higher
            //Goto folder like this and find zappysys extension file (e.g. 140) =&gt; C:\Program Files (x86)\Microsoft SQL Server\140\DTS\UpgradeMappings\ZappySys.PowerPack140.Extensions.xml
            //Find Task creation name there
            var SFTP_TASK = "ZappySys.SecureFtpTask";

            var tsk1 = p.Executables.Add(SFTP_TASK) as TaskHost;
            tsk1.Name = "SFTP_Task1";
            tsk1.Properties["SourceStorageConnection"].SetValue(tsk1, "MySftpConnection");
            tsk1.Properties["StorageAction"].SetValue(tsk1, 10); //DownloadFileFromFtp [10] find numeric value for this enum from help file&gt; properties https://zappysys.com/onlinehelp/ssis-powerpack/scr/ssis-sftp-ftp-ftps-task.htm
            tsk1.Properties["SourcePathValue"].SetValue(tsk1, "subfolder/localsubfile1.csv");
            tsk1.Properties["TargetPathValue"].SetValue(tsk1, @"c:\temp\");
            tsk1.Properties["FileOverwriteAction"].SetValue(tsk1, 2); //OverwriteAll [2]


            /*
             Go to package file (*.dtsx) &gt; Open in Notepad &gt; and findout which properties set. Do same way (ignore some default proprties)
             Some enum properties needs numeric values &gt; Check Task / Component help file to findout number for that

      &lt;DTS:ObjectData&gt;
        &lt;SecureFtpTask
          StorageAction="DeleteFtpFile"
          FileOverwriteAction="OverwriteAll"
          TreatRegXForFullPath="False"
          ContinueOnError="False"
...................
...................
...................            
            PrefixTimestamp="False" /&gt;
      &lt;/DTS:ObjectData&gt;
    &lt;/DTS:Executable&gt;             
             */

            //Application.

            /* use below code to save to disk file 
            var app = new Microsoft.SqlServer.Dts.Runtime.Application();
            var filepath = @"c:\temp\demo.dtsx";
            app.SaveToXml(filepath, p, null);

            --load from disk to memory
            p = app.LoadPackage(filepath, null);

            */
            var status = p.Execute();

            if (status != DTSExecResult.Success)
            {
                var errs = "";
                foreach (var e in p.Errors)
                {
                    errs = errs + string.Format("Source={0}, Err={1}", e.Source, e.Description) + "\r\n";
                }

                throw new Exception("Package status was &gt;&gt; " + status + " &gt;&gt; " + errs);
            }

            Console.WriteLine("Execution Completed... Press any key to exit!!!");
            Console.ReadKey();
        }
        private static void Create_SSIS_Dataflow_Source_Component_Demo()
        {
            var p = new Microsoft.SqlServer.Dts.Runtime.Package();


            /*============ STEP-1: Create Dataflow Task =========== */

            var tsk1 = p.Executables.Add("STOCK:PipelineTask") as TaskHost;
            var dataFlowTask = tsk1.InnerObject as MainPipe;

            /*============ STEP-2: Create Connection =========== */
            var conn1 = p.Connections.Add("ZS-HTTP");
            conn1.Name = "MyConnection";
            conn1.ConnectionString = "Url=https://httpbin.org/get;CredentialType=Basic;UserName=test;Password=test123";


            /*============ STEP-3: Create Source =========== */
            var sourceComponent = dataFlowTask.ComponentMetaDataCollection.New();

            try
            {
                sourceComponent.ComponentClassID = "ZappySys.JsonSource";
                var sourceInstance = sourceComponent.Instantiate();
                sourceInstance.ProvideComponentProperties();

                sourceComponent.Name = "MySource";
                /**** Special Case for JSON Source - if user wants connection to use then we create Runtime connection. For all other components this is always created when ProvideComponentProperties() is called*/
                if (sourceComponent.RuntimeConnectionCollection.Count &lt;= 0)
                {
                    var dtsRuntimeConnection = sourceComponent.RuntimeConnectionCollection.New();
                    dtsRuntimeConnection.Name = "Connection"; 
                    //dtsRuntimeConnection.Description = "This can be ZS-HTTP, ZS-OAUTH or ZS-SALESFORCE";
                }
                sourceComponent.RuntimeConnectionCollection[0].ConnectionManager = DtsConvert.GetExtendedInterface(conn1);
                sourceComponent.RuntimeConnectionCollection[0].ConnectionManagerID = conn1.ID;

                sourceInstance.SetComponentProperty("UseConnection", true);//JsonSource specific -- for all other components connection always used
                sourceInstance.SetComponentProperty("DirectPath", "https://httpbin.org/basic-auth/test/test123");
                //sourceInstance.SetComponentProperty("Filter", "$.value[*]");

                //make connection active before next step
                sourceInstance.AcquireConnections(null);

                //after connection + props set ... call ReInitialize meta... it creates columns / output / input etc
                sourceInstance.ReinitializeMetaData(); 
            }
            catch (COMException ex)
            {
                throw new Exception("Error Happened ==&gt; " + sourceComponent.GetErrorDescription(ex.ErrorCode));
            }




            /*============ STEP-4: Create Target (without Reinitialize) =========== */

            var targetComponent = dataFlowTask.ComponentMetaDataCollection.New();
            CManagedComponentWrapper targetInstance=null;
            try
            {
                targetComponent.ComponentClassID = "ZappySys.TrashDestination";
                targetInstance = targetComponent.Instantiate();
                targetInstance.ProvideComponentProperties();

                targetComponent.Name = "MyDestination";

                targetInstance.SetComponentProperty("SaveDataToFile", true);
                targetInstance.SetComponentProperty("FilePath", @"c:\temp\dump.txt");
                targetInstance.SetComponentProperty("OverwriteFileIfExists", true);

                //--- Trash destination doesnt have connection but incase destination uses connection... set below way
                //if you have connection then set this way
                //var conn2 = p.Connections.Add("....."); //Creation name i.e. ZS-HTTP
                //conn2.Name = "MyConnection2";
                //conn3.ConnectionString = "Url=https://httpbin.org/get;CredentialType=Basic;UserName=test;Password=test123";
                //if (targetComponent.RuntimeConnectionCollection.Count &lt;= 0)
                //{
                //    var dtsRuntimeConnection = targetComponent.RuntimeConnectionCollection.New();
                //    dtsRuntimeConnection.Name = "Connection"; 
                //}
                //sourceComponent.RuntimeConnectionCollection[0].ConnectionManager = DtsConvert.GetExtendedInterface(conn2);
                //sourceComponent.RuntimeConnectionCollection[0].ConnectionManagerID = conn2.ID;
                //make connection active before next step
                //targetInstance.AcquireConnections(null);
            }
            catch (COMException ex)
            {
                throw new Exception("Error Happened ==&gt; " + targetComponent.GetErrorDescription(ex.ErrorCode));
            }

            /*============ STEP-5: Connect Source to Target =========== */

            //before we call reintializemetadata for dest .. lets attach src and dest so .. dest can use virtual inputs if needed
            var output = sourceComponent.OutputCollection[0]; //to make it simple lets pick first output but possible component can have more outputs
            var input = targetComponent.InputCollection[0];

            dataFlowTask.PathCollection.New().AttachPathAndPropagateNotifications(output, input);

            /*============ STEP-6: Configure Target =========== */
            try
            {
                //after connection + props set and source to target attached... call ReInitialize meta... it creates columns / output / input etc
                targetInstance.ReinitializeMetaData(); 
            }
            catch (COMException ex)
            {
                throw new Exception("Error Happened ==&gt; " + targetComponent.GetErrorDescription(ex.ErrorCode));
            }


            /*============ STEP-6: Save Package =========== */

            //* use below code to save to disk file 
            var app = new Microsoft.SqlServer.Dts.Runtime.Application();
            var filepath = @"c:\temp\demo.dtsx";
            app.SaveToXml(filepath, p, null);

            /*============ STEP-7: Load Package =========== */
            //--load from disk to memory
            p = app.LoadPackage(filepath, null);

            //*/

            /*============ STEP-8: Execute Package =========== */
            var status = p.Execute();

            /*============ STEP-9: Print execution status / log =========== */
            if (status != DTSExecResult.Success)
            {
                var errs = "";
                foreach (var e in p.Errors)
                {
                    errs = errs + string.Format("Source={0}, Err={1}", e.Source, e.Description) + "\r\n";
                }

                throw new Exception("Package status was &gt;&gt; " + status + " &gt;&gt; " + errs);
            }

            Console.WriteLine("Execution Completed... Press any key to exit!!!");
            Console.ReadKey();
        }

        private static void Create_SSIS_Variable_Demo()
        {
            var p = new Microsoft.SqlServer.Dts.Runtime.Package();
            
            p.Variables.Add("MyVariableName1", false, "User", "Some value");
        }

        private static void Create_SSIS_Connection_Demo()
        {
            var p = new Microsoft.SqlServer.Dts.Runtime.Package();

            var conn1 = p.Connections.Add("ZS-SFTP");
            conn1.Name = "MySftpConnection";
            conn1.ConnectionString = "Protocol=Sftp;ServerName=127.0.0.1;Port=0;LogonType=Normal;UserName=zstest;Password=zstest123";

        }

        private static void Create_SSIS_Connect_Tasks_Demo()
        {
            var p = new Microsoft.SqlServer.Dts.Runtime.Package();

            var SFTP_TASK = "ZappySys.SecureFtpTask";

            var tsk1 = p.Executables.Add(SFTP_TASK) as TaskHost;
            tsk1.Name = "SFTP_Task1";
            /*set some props - see Create_SSIS_Controlflow_Task_Demo */

            var tsk2 = p.Executables.Add(SFTP_TASK) as TaskHost;
            tsk2.Name = "SFTP_Task2";
            /*set some props - see Create_SSIS_Controlflow_Task_Demo */
            
            //add link between task1--&gt;task2
            var pc = p.PrecedenceConstraints.Add(tsk1, tsk2);
            pc.EvalOp = DTSPrecedenceEvalOp.Constraint;
            pc.Value = DTSExecResult.Success;
            pc.LogicalAnd = true; //only useful if multiple inputs coming and you want all previous steps to be Green vs Any One Green .. if its any use LogicalAnd=False

            //If you need to connect with expression use below
            //pc.EvalOp = DTSPrecedenceEvalOp.ExpressionAndConstraint;
            //pc.Expression = "@SomeVariable == true";
        }

       

     
    }
}</pre><p>
&nbsp;</p>
<p>&nbsp;</p>
<p>The post <a href="https://zappysys.com/blog/create-ssis-package-programmatically-add-execute-connections-tasks/">How to create SSIS Package Programmatically (Add / Execute Tasks)</a> appeared first on <a href="https://zappysys.com/blog">ZappySys Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to call OneDrive API in SSIS (Upload, Download)</title>
		<link>https://zappysys.com/blog/call-onedrive-api-ssis-file-upload-download-delete/</link>
		
		<dc:creator><![CDATA[Ankur Saxena]]></dc:creator>
		<pubDate>Wed, 05 Aug 2020 14:08:12 +0000</pubDate>
				<category><![CDATA[REST API]]></category>
		<category><![CDATA[SSIS OAuth Connection]]></category>
		<category><![CDATA[SSIS REST API Task]]></category>
		<category><![CDATA[microsoft graph api]]></category>
		<category><![CDATA[onedrive]]></category>
		<category><![CDATA[ssis]]></category>
		<guid isPermaLink="false">https://zappysys.com/blog/?p=8965</guid>

					<description><![CDATA[<p>Introduction Microsoft Graph API is a unified way to access many Microsoft services API including OneDrive API. In our previous blog post we saw how to call Office 365 API Graph API. In this post, you will focus on how to access OneDrive API in SSIS and use REST API Task or connector like SSIS JSON / [&#8230;]</p>
<p>The post <a href="https://zappysys.com/blog/call-onedrive-api-ssis-file-upload-download-delete/">How to call OneDrive API in SSIS (Upload, Download)</a> appeared first on <a href="https://zappysys.com/blog">ZappySys Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Introduction</h2>
<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>UPDATE:</strong> ZappySys has released a brand new <a href="https://zappysys.com/api/integration-hub/onedrive-connector/">API Connector for OneDrive</a> which makes it much simpler to <strong>Read/Write OneDrive Data in SSIS</strong> compared to the steps listed in this article. You can still use steps from this article but if you are new to API or want to avoid learning curve with API then use newer approach.</p>
<p>Please visit <a href="https://zappysys.com/api/integration-hub/">this page to see all</a> Pre-Configured ready to use API connectors which you can use in <a href="https://zappysys.com/products/ssis-powerpack/ssis-api-source/">SSIS API Source</a> / <a href="https://zappysys.com/products/ssis-powerpack/ssis-api-destination/">SSIS API Destination</a> OR <a href="https://zappysys.com/products/odbc-powerpack/odbc-api-driver/">API ODBC Driver</a> (for non-SSIS Apps such as Excel, Power BI, Informatica).<br />
</div></div>
<a href="https://zappysys.com/blog/wp-content/uploads/2020/08/microsoft-onedrive-logo.png"><img loading="lazy" decoding="async" class="wp-image-9115 alignleft" src="https://zappysys.com/blog/wp-content/uploads/2020/08/microsoft-onedrive-logo.png" alt="" width="161" height="119" /></a><a href="https://developer.microsoft.com/en-us/graph/docs/concepts/overview" target="_blank" rel="noopener">Microsoft Graph API</a> is a unified way to access many Microsoft services API including <strong>OneDrive API</strong>. In our previous blog post we saw <a href="https://zappysys.com/blog/calling-office-365-api-using-ssis-graph-api-mail-calendar-contacts-onedrive-excel/" target="_blank" rel="noopener">how to call Office 365 API Graph API</a>. In this post, you will focus on how to access OneDrive API in SSIS and use REST API Task or connector like <a href="https://zappysys.com/products/ssis-powerpack/ssis-json-file-source/" target="_blank" rel="noopener">SSIS JSON / REST API Source Connector</a> to load Read / Download / Upload data from OneDrive.</p>
<p>OneDrive allows to store files on the cloud and and we have seen growing requirements in downloading/Uploading files from there. This post will provide step by step details of how to Upload/Download files from OneDrive.</p>
<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>Register Microsoft App for OAuth Authentication</h2>
<p>In this section, you will learn how to register a custom app in Microsoft Azure portal that will allow access to the OneDrive. So, let&#8217;s get started &#8211;</p>
<ol>
<li>Log into <a href="https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredApps">Microsoft Azure portal</a> to register a custom app.</li>
<li>Register a new application by clicking New Registration link.
<div id="attachment_9034" style="width: 758px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2020/07/NewRegistration.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9034" class="size-full wp-image-9034" src="https://zappysys.com/blog/wp-content/uploads/2020/07/NewRegistration.png" alt="New App Registration in Azure portal" width="748" height="221" srcset="https://zappysys.com/blog/wp-content/uploads/2020/07/NewRegistration.png 748w, https://zappysys.com/blog/wp-content/uploads/2020/07/NewRegistration-300x89.png 300w" sizes="(max-width: 748px) 100vw, 748px" /></a><p id="caption-attachment-9034" class="wp-caption-text">New App Registration in Azure portal</p></div></li>
<li>Provide the name of the custom app and who can access the app in the organization.
<div id="attachment_9005" style="width: 620px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2020/07/RegisterOneDriveApp-1.jpg"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9005" class="wp-image-9005 size-full" src="https://zappysys.com/blog/wp-content/uploads/2020/07/RegisterOneDriveApp-1.jpg" alt="Register an OneDrive App" width="610" height="518" srcset="https://zappysys.com/blog/wp-content/uploads/2020/07/RegisterOneDriveApp-1.jpg 610w, https://zappysys.com/blog/wp-content/uploads/2020/07/RegisterOneDriveApp-1-300x255.jpg 300w" sizes="(max-width: 610px) 100vw, 610px" /></a><p id="caption-attachment-9005" class="wp-caption-text">Register an OneDrive App</p></div></li>
<li>Go to the App overview and add a Redirect URL.
<div id="attachment_9044" style="width: 947px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2020/07/RedirectURI-1.jpg"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9044" class="wp-image-9044 size-full" src="https://zappysys.com/blog/wp-content/uploads/2020/07/RedirectURI-1.jpg" alt="Add a Redirect URL" width="937" height="122" srcset="https://zappysys.com/blog/wp-content/uploads/2020/07/RedirectURI-1.jpg 937w, https://zappysys.com/blog/wp-content/uploads/2020/07/RedirectURI-1-300x39.jpg 300w, https://zappysys.com/blog/wp-content/uploads/2020/07/RedirectURI-1-768x100.jpg 768w" sizes="(max-width: 937px) 100vw, 937px" /></a><p id="caption-attachment-9044" class="wp-caption-text">Add a Redirect URL</p></div></li>
<li>Click on &#8220;Add a Platform&#8221; under Platform Configuration section and then select &#8220;Web&#8221; under Web applications section to enter a Redirect URL.<br />
<pre class="crayon-plain-tag">https://zappysys.com/oauth</pre>
<div id="attachment_9007" style="width: 476px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2020/07/RedirectURI2.jpg"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9007" class="size-full wp-image-9007" src="https://zappysys.com/blog/wp-content/uploads/2020/07/RedirectURI2.jpg" alt="Redirect URL" width="466" height="564" srcset="https://zappysys.com/blog/wp-content/uploads/2020/07/RedirectURI2.jpg 466w, https://zappysys.com/blog/wp-content/uploads/2020/07/RedirectURI2-248x300.jpg 248w" sizes="(max-width: 466px) 100vw, 466px" /></a><p id="caption-attachment-9007" class="wp-caption-text">Redirect URL</p></div></li>
<li>Create a Client Secret key which will be used to Authenticate the custom Azure app.
<div id="attachment_9010" style="width: 586px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2020/07/ClientSecret.jpg"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9010" class="size-full wp-image-9010" src="https://zappysys.com/blog/wp-content/uploads/2020/07/ClientSecret.jpg" alt="Add a Client Secret" width="576" height="403" srcset="https://zappysys.com/blog/wp-content/uploads/2020/07/ClientSecret.jpg 576w, https://zappysys.com/blog/wp-content/uploads/2020/07/ClientSecret-300x210.jpg 300w" sizes="(max-width: 576px) 100vw, 576px" /></a><p id="caption-attachment-9010" class="wp-caption-text">Add a Client Secret</p></div>
<div id="attachment_9011" style="width: 218px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2020/07/ClientSecret2.jpg"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9011" class="size-full wp-image-9011" src="https://zappysys.com/blog/wp-content/uploads/2020/07/ClientSecret2.jpg" alt="Secret Key Expiration Period" width="208" height="259" /></a><p id="caption-attachment-9011" class="wp-caption-text">Secret Key Expiration Period</p></div>
<div id="attachment_9012" style="width: 1034px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2020/07/ClientSecret3.jpg"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9012" class="size-full wp-image-9012" src="https://zappysys.com/blog/wp-content/uploads/2020/07/ClientSecret3.jpg" alt="Specify Secret Key" width="1024" height="176" srcset="https://zappysys.com/blog/wp-content/uploads/2020/07/ClientSecret3.jpg 1024w, https://zappysys.com/blog/wp-content/uploads/2020/07/ClientSecret3-300x52.jpg 300w, https://zappysys.com/blog/wp-content/uploads/2020/07/ClientSecret3-768x132.jpg 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><p id="caption-attachment-9012" class="wp-caption-text">Specify Secret Key</p></div>
<div><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> &#8211; Take a note of <strong>Client Secret</strong>, it will be required while configuring OAuth connection in the SSIS later.</div></div></div>
</li>
<li>Add API Permissions for OneDrive API.
<div id="attachment_10198" style="width: 1301px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2020/08/APIPermissions1.jpg"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-10198" class="wp-image-10198 size-full" src="https://zappysys.com/blog/wp-content/uploads/2020/08/APIPermissions1.jpg" alt="OneDrive API Permissions" width="1291" height="415" srcset="https://zappysys.com/blog/wp-content/uploads/2020/08/APIPermissions1.jpg 1291w, https://zappysys.com/blog/wp-content/uploads/2020/08/APIPermissions1-300x96.jpg 300w, https://zappysys.com/blog/wp-content/uploads/2020/08/APIPermissions1-768x247.jpg 768w, https://zappysys.com/blog/wp-content/uploads/2020/08/APIPermissions1-1024x329.jpg 1024w" sizes="(max-width: 1291px) 100vw, 1291px" /></a><p id="caption-attachment-10198" class="wp-caption-text">OneDrive API Permissions</p></div></li>
<li>Select the following permissions from the Delegated Permissions section.<br />
<pre class="crayon-plain-tag">User.ReadBasic.All
Files.Read
offline_access</pre>
<div id="attachment_9009" style="width: 522px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2020/07/APIPermissions2.jpg"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9009" class="size-full wp-image-9009" src="https://zappysys.com/blog/wp-content/uploads/2020/07/APIPermissions2.jpg" alt="Select Delegated Permissions" width="512" height="571" srcset="https://zappysys.com/blog/wp-content/uploads/2020/07/APIPermissions2.jpg 512w, https://zappysys.com/blog/wp-content/uploads/2020/07/APIPermissions2-269x300.jpg 269w" sizes="(max-width: 512px) 100vw, 512px" /></a><p id="caption-attachment-9009" class="wp-caption-text">Select Delegated Permissions</p></div></li>
<li>Take note of Client ID, it will be required while configuring OAuth connection in the SSIS later.
<div id="attachment_10199" style="width: 820px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2020/08/ClientSecret41.jpg"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-10199" class="wp-image-10199 size-full" src="https://zappysys.com/blog/wp-content/uploads/2020/08/ClientSecret41.jpg" alt="Client ID" width="810" height="274" srcset="https://zappysys.com/blog/wp-content/uploads/2020/08/ClientSecret41.jpg 810w, https://zappysys.com/blog/wp-content/uploads/2020/08/ClientSecret41-300x101.jpg 300w, https://zappysys.com/blog/wp-content/uploads/2020/08/ClientSecret41-768x260.jpg 768w" sizes="(max-width: 810px) 100vw, 810px" /></a><p id="caption-attachment-10199" class="wp-caption-text">Client ID</p></div></li>
</ol>
<h2>Get OneDrive File ID</h2>
<p>In this section, you will learn how to get the File ID of the CSV file through OneDrive API. So, let&#8217;s get started &#8211;</p>
<ol>
<li>Go to the <a href="https://developer.microsoft.com/en-us/graph/graph-explorer">Microsoft Graph Explorer</a>.</li>
<li>Sign in to Graph Explorer.
<div id="attachment_9153" style="width: 489px" class="wp-caption aligncenter"><a href="https://zappysys.com/blog/wp-content/uploads/2020/08/ssis-GraphExplorer-2.jpg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9153" class="wp-image-9153 size-full" src="https://zappysys.com/blog/wp-content/uploads/2020/08/ssis-GraphExplorer-2.jpg" alt="SSIS GraphExplorer SignIn" width="479" height="388" srcset="https://zappysys.com/blog/wp-content/uploads/2020/08/ssis-GraphExplorer-2.jpg 479w, https://zappysys.com/blog/wp-content/uploads/2020/08/ssis-GraphExplorer-2-300x243.jpg 300w" sizes="(max-width: 479px) 100vw, 479px" /></a><p id="caption-attachment-9153" class="wp-caption-text">SSIS GraphExplorer SignIn</p></div></li>
<li>Run below OneDrive API to get a list of the files from the OneDrive.<br />
<pre class="crayon-plain-tag">https://graph.microsoft.com/v1.0/me/drive/root/children</pre>
<div id="attachment_9048" style="width: 1003px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2020/07/GraphExplorer-1.jpg"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9048" class="size-full wp-image-9048" src="https://zappysys.com/blog/wp-content/uploads/2020/07/GraphExplorer-1.jpg" alt="Microsoft Graph Explorer" width="993" height="509" srcset="https://zappysys.com/blog/wp-content/uploads/2020/07/GraphExplorer-1.jpg 993w, https://zappysys.com/blog/wp-content/uploads/2020/07/GraphExplorer-1-300x154.jpg 300w, https://zappysys.com/blog/wp-content/uploads/2020/07/GraphExplorer-1-768x394.jpg 768w" sizes="(max-width: 993px) 100vw, 993px" /></a><p id="caption-attachment-9048" class="wp-caption-text">Microsoft Graph Explorer</p></div>
<div><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> Take a note of <strong>File ID</strong> of the CSV file. For this example, we will download invoices.csv file.</div></div></div>
</li>
</ol>
<h2>Create OAuth Connection in SSIS</h2>
<p>In this section, you will learn how to create an OAuth connection in SSIS to an Azure custom app. So, let&#8217;s get started &#8211;</p>
<ol>
<li>Create a new ZS-OAuth connection in SSIS.
<div id="attachment_9015" style="width: 486px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2020/07/OAuth.jpg"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9015" class="size-full wp-image-9015" src="https://zappysys.com/blog/wp-content/uploads/2020/07/OAuth.jpg" alt="ZappySys OAuth Connection in SSIS" width="476" height="445" srcset="https://zappysys.com/blog/wp-content/uploads/2020/07/OAuth.jpg 476w, https://zappysys.com/blog/wp-content/uploads/2020/07/OAuth-300x280.jpg 300w" sizes="(max-width: 476px) 100vw, 476px" /></a><p id="caption-attachment-9015" class="wp-caption-text">ZappySys OAuth Connection in SSIS</p></div></li>
<li>Configure OAuth connection with following settings.
<div>
<div></div>
</div>
<div class="su-table su-table-alternate">
<table style="width: 100%;border-collapse: collapse;border-style: solid;border-color: #dedede" border="1">
<tbody>
<tr style="height: 21px">
<td style="width: 23.0015%;height: 21px"><span style="font-size: 10pt">Client ID</span></td>
<td style="width: 76.9985%"><span style="font-size: 10pt">Provide Client ID from App Registration steps</span></td>
</tr>
<tr>
<td style="width: 23.0015%"><span style="font-size: 10pt">Client Secret</span></td>
<td style="width: 76.9985%"><span style="font-size: 10pt">Provide Client Secret from App Registration steps</span></td>
</tr>
<tr>
<td style="width: 23.0015%"><span style="font-size: 10pt">Authorization URL</span></td>
<td style="width: 76.9985%"><span style="font-size: 10pt">https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize</span></td>
</tr>
<tr>
<td style="width: 23.0015%"><span style="font-size: 10pt">Access Token URL</span></td>
<td style="width: 76.9985%"><span style="font-size: 10pt">https://login.microsoftonline.com/organizations/oauth2/v2.0/token</span></td>
</tr>
<tr>
<td style="width: 23.0015%"><span style="font-size: 10pt">Scope/Permissions</span></td>
<td style="width: 76.9985%"><span style="font-size: 10pt">User.ReadBasic.All</span><br />
<span style="font-size: 10pt">Files.Read.All</span><br />
<span style="font-size: 10pt">offline_access</span></td>
</tr>
</tbody>
</table>
</div>
<div id="attachment_9016" style="width: 860px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2020/07/OAuth2.jpg"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9016" class="wp-image-9016 size-full" src="https://zappysys.com/blog/wp-content/uploads/2020/07/OAuth2.jpg" alt="OAuth Connection Configuration" width="850" height="653" srcset="https://zappysys.com/blog/wp-content/uploads/2020/07/OAuth2.jpg 850w, https://zappysys.com/blog/wp-content/uploads/2020/07/OAuth2-300x230.jpg 300w, https://zappysys.com/blog/wp-content/uploads/2020/07/OAuth2-768x590.jpg 768w" sizes="(max-width: 850px) 100vw, 850px" /></a><p id="caption-attachment-9016" class="wp-caption-text">OAuth Connection Configuration</p></div></li>
<li>Go to the Advanced tab and provide Return URL.<br />
<pre class="crayon-plain-tag">https://zappysys.com/oauth</pre>
<div id="attachment_9021" style="width: 827px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2020/07/OAuth6.jpg"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9021" class="size-full wp-image-9021" src="https://zappysys.com/blog/wp-content/uploads/2020/07/OAuth6.jpg" alt="Add Redirect URL" width="817" height="197" srcset="https://zappysys.com/blog/wp-content/uploads/2020/07/OAuth6.jpg 817w, https://zappysys.com/blog/wp-content/uploads/2020/07/OAuth6-300x72.jpg 300w, https://zappysys.com/blog/wp-content/uploads/2020/07/OAuth6-768x185.jpg 768w" sizes="(max-width: 817px) 100vw, 817px" /></a><p id="caption-attachment-9021" class="wp-caption-text">Add Redirect URL</p></div></li>
<li>Click on Generate Token will give a login screen which will allow to generate access and refresh token for the app.</li>
<li>Approve the requested permissions bu Accepting it.
<div id="attachment_9018" style="width: 638px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2020/07/OAuth4.jpg"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9018" class="size-full wp-image-9018" src="https://zappysys.com/blog/wp-content/uploads/2020/07/OAuth4.jpg" alt="Approve Permissions Requested" width="628" height="522" srcset="https://zappysys.com/blog/wp-content/uploads/2020/07/OAuth4.jpg 628w, https://zappysys.com/blog/wp-content/uploads/2020/07/OAuth4-300x249.jpg 300w" sizes="(max-width: 628px) 100vw, 628px" /></a><p id="caption-attachment-9018" class="wp-caption-text">Approve Permissions Requested</p></div></li>
<li>Token has been generate successfully.
<div id="attachment_9019" style="width: 422px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2020/07/OAuth5.jpg"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9019" class="wp-image-9019 size-full" src="https://zappysys.com/blog/wp-content/uploads/2020/07/OAuth5.jpg" alt="Refresh Token Successful" width="412" height="315" srcset="https://zappysys.com/blog/wp-content/uploads/2020/07/OAuth5.jpg 412w, https://zappysys.com/blog/wp-content/uploads/2020/07/OAuth5-300x229.jpg 300w" sizes="(max-width: 412px) 100vw, 412px" /></a><p id="caption-attachment-9019" class="wp-caption-text">Refresh Token Successful</p></div></li>
<li>Let&#8217;s test the connection to make sure it is working fine.
<div id="attachment_9020" style="width: 827px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2020/07/OAuth7.jpg"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9020" class="wp-image-9020 size-full" src="https://zappysys.com/blog/wp-content/uploads/2020/07/OAuth7.jpg" alt="Connection Successful" width="817" height="694" srcset="https://zappysys.com/blog/wp-content/uploads/2020/07/OAuth7.jpg 817w, https://zappysys.com/blog/wp-content/uploads/2020/07/OAuth7-300x255.jpg 300w, https://zappysys.com/blog/wp-content/uploads/2020/07/OAuth7-768x652.jpg 768w" sizes="(max-width: 817px) 100vw, 817px" /></a><p id="caption-attachment-9020" class="wp-caption-text">Connection Successful</p></div></li>
</ol>
<h2>Download CSV File Through OneDrive REST API in SSIS</h2>
<p>In this section, you will learn how to download a CSV file through OneDrive API in SSIS and save it into a CSV file.</p>
<ol>
<li>Here is the OneDrive API which allows to read content of the file.<br />
<pre class="crayon-plain-tag">https://graph.microsoft.com/v1.0/me/drive/Items/&lt;File ID&gt;/content</pre>
</li>
<li>Replace &lt;File ID&gt; in above step#1 with the file ID that we have got in the <strong>Get OneDrive File ID</strong> section. Final URL will look something like below.<br />
<pre class="crayon-plain-tag">https://graph.microsoft.com/v1.0/me/drive/Items/01W7L3VCUBS27ILUQKENAK4LQGGTJ2R3TT/content</pre>
</li>
<li>Let&#8217;s create a SSIS package with Data Flow Task from SSIS Toolbox.<a href="https://zappysys.com/blog/wp-content/uploads/2020/07/AddDataflow.png"><img loading="lazy" decoding="async" width="516" height="185" class="size-full wp-image-9073" src="https://zappysys.com/blog/wp-content/uploads/2020/07/AddDataflow.png" alt="&quot;&quot;/content&lt;/pre" srcset="https://zappysys.com/blog/wp-content/uploads/2020/07/AddDataflow.png 516w, https://zappysys.com/blog/wp-content/uploads/2020/07/AddDataflow-300x108.png 300w" sizes="(max-width: 516px) 100vw, 516px" /></a></li>
<li>Replace &lt;File ID&gt; in above step#1 with the file ID that we have got in the <strong>Get OneDrive File ID</strong> section. Final URL will look something like below.<br />
<pre class="crayon-plain-tag">https://graph.microsoft.com/v1.0/me/drive/Items/01W7L3VCWMCGPYZLM2IRAYWROSH4XMQT7A/content</pre>
</li>
<li>Configure REST API task as follows.
<div id="attachment_9084" style="width: 928px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2020/07/Download-Binary-File.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9084" class="size-full wp-image-9084" src="https://zappysys.com/blog/wp-content/uploads/2020/07/Download-Binary-File.png" alt="Binary File Configuration in ZappySys REST API Task" width="918" height="625" srcset="https://zappysys.com/blog/wp-content/uploads/2020/07/Download-Binary-File.png 918w, https://zappysys.com/blog/wp-content/uploads/2020/07/Download-Binary-File-300x204.png 300w, https://zappysys.com/blog/wp-content/uploads/2020/07/Download-Binary-File-768x523.png 768w" sizes="(max-width: 918px) 100vw, 918px" /></a><p id="caption-attachment-9084" class="wp-caption-text">Binary File Configuration in ZappySys REST API Task</p></div></li>
<li>Configure the responses setting as below.
<div id="attachment_9083" style="width: 696px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2020/07/Download-Binary-File2.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9083" class="wp-image-9083 size-full" src="https://zappysys.com/blog/wp-content/uploads/2020/07/Download-Binary-File2.png" alt="Binary File Configuration in ZappySys REST API Task" width="686" height="613" srcset="https://zappysys.com/blog/wp-content/uploads/2020/07/Download-Binary-File2.png 686w, https://zappysys.com/blog/wp-content/uploads/2020/07/Download-Binary-File2-300x268.png 300w" sizes="(max-width: 686px) 100vw, 686px" /></a><p id="caption-attachment-9083" class="wp-caption-text">Binary File Configuration in ZappySys REST API Task</p></div>
<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>: Ensure that the <strong>Treat response as the binary</strong> checkbox is checked otherwise the file will be downloaded but corrupted as zip/mp3 etc. file format is binary.</div></div></li>
<li>Check if the request is made correctly by clicking Test Request/Response.
<div id="attachment_10201" style="width: 622px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2020/08/Download-Binary-File3.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-10201" class="wp-image-10201 size-full" src="https://zappysys.com/blog/wp-content/uploads/2020/08/Download-Binary-File3.png" alt="Example of Testing the Request" width="612" height="621" srcset="https://zappysys.com/blog/wp-content/uploads/2020/08/Download-Binary-File3.png 612w, https://zappysys.com/blog/wp-content/uploads/2020/08/Download-Binary-File3-296x300.png 296w" sizes="(max-width: 612px) 100vw, 612px" /></a><p id="caption-attachment-10201" class="wp-caption-text">Example of Testing the Request</p></div></li>
<li>Let&#8217;s have a look at the folder where the file has been downloaded. Here is an example &#8211;
<div id="attachment_9082" style="width: 894px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2020/07/DownloadedFileExample.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9082" class="wp-image-9082 size-full" src="https://zappysys.com/blog/wp-content/uploads/2020/07/DownloadedFileExample.png" alt="Downloaded File Example" width="884" height="128" srcset="https://zappysys.com/blog/wp-content/uploads/2020/07/DownloadedFileExample.png 884w, https://zappysys.com/blog/wp-content/uploads/2020/07/DownloadedFileExample-300x43.png 300w, https://zappysys.com/blog/wp-content/uploads/2020/07/DownloadedFileExample-768x111.png 768w" sizes="(max-width: 884px) 100vw, 884px" /></a><p id="caption-attachment-9082" class="wp-caption-text">Downloaded File Example</p></div></li>
</ol>
<div class="mceTemp"></div>
<h2>Download a Text File Through OneDrive API in SSIS</h2>
<p>Here is another technique that can be used to download a CSV/text file through OneDrive API without knowing it&#8217;s file ID but file name. Please check this <a href="https://zappysys.zendesk.com/hc/en-us/articles/115005010573-How-to-download-file-from-OneDrive-using-Graph-API">link</a> for more details.</p>
<h2>Download Excel Sheets Through OneDrive API in SSIS</h2>
<p>JSON Source also supports reading API response which returns 2D arrays. Such as <a href="https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/resources/excel" target="_blank" rel="noopener">Office Excel Spreadsheet API</a> to read excel data. Check <a href="https://zappysys.com/blog/get-data-google-spreadsheet-using-ssis/" target="_blank" rel="noopener">this blog post</a> to learn a similar scenario to parse 2D arrays. There are few other options for parsing 2D arrays which are <a href="https://zappysys.com/blog/parse-multi-dimensional-json-array-ssis/" target="_blank" rel="noopener">documented here</a>.</p>
<div id="crayon-5efb7d9f087eb405096699" class="crayon-syntax crayon-theme-vs2012 crayon-font-courier-new crayon-os-pc print-yes notranslate">
<div class="crayon-plain-wrap">
<pre class="crayon-plain-tag">https://graph.microsoft.com/v1.0/me/drive/items/01CYZLFJDYxxxxxxx/workbook/worksheets('test')/range(address='A1:B200')</pre>
</div>
</div>
<h2>Upload a File Through OneDrive API in SSIS</h2>
<p>In this section, you will learn how to upload a file through OneDrive API in SSIS. Uploading a file has few additional steps and has been documented separately. Please check this <a href="https://zappysys.zendesk.com/hc/en-us/articles/115004893713-How-to-upload-file-to-OneDrive-using-Office-365-Graph-API">link</a> for more details.</p>
<h2>Delete a File Through OneDrive API in SSIS</h2>
<p>In this section, you will learn how to delete a file from OneDrive through OneDrive APIs in SSIS.</p>
<ol>
<li>Add a REST API task and configure as follows. Make sure to use the File ID of the file which needs to be deleted from OneDrive. Example URL &#8211;<br />
<pre class="crayon-plain-tag">https://graph.microsoft.com/v1.0/me/drive/Items/01W7L3VCSEADQ457W54RBI3I47YGFJOD2I</pre>
<div id="attachment_9081" style="width: 818px" class="wp-caption alignnone"><a href="https://zappysys.com/blog/wp-content/uploads/2020/07/Delete-OneDrive-File.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9081" class="wp-image-9081 size-full" src="https://zappysys.com/blog/wp-content/uploads/2020/07/Delete-OneDrive-File.png" alt="Delete OneDrive File" width="808" height="648" srcset="https://zappysys.com/blog/wp-content/uploads/2020/07/Delete-OneDrive-File.png 808w, https://zappysys.com/blog/wp-content/uploads/2020/07/Delete-OneDrive-File-300x241.png 300w, https://zappysys.com/blog/wp-content/uploads/2020/07/Delete-OneDrive-File-768x616.png 768w" sizes="(max-width: 808px) 100vw, 808px" /></a><p id="caption-attachment-9081" class="wp-caption-text">Delete OneDrive File</p></div></li>
<li>Execute the task and you will have file deleted from OneDrive.</li>
</ol>
<h2><span id="ConclusionWhats_next"><span id="ConclusionWhat8217s_next">Conclusion</span></span></h2>
<p>In this article, we have learned how to Upload/Download/Delete data/file from OneDrive API in SSIS. We used <a href="https://zappysys.com/products/ssis-powerpack/ssis-rest-api-web-service-task/" target="_blank" rel="noopener">SSIS REST API Task</a> to extract data through OneDrive API in SSIS. <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/call-onedrive-api-ssis-file-upload-download-delete/">How to call OneDrive API in SSIS (Upload, Download)</a> appeared first on <a href="https://zappysys.com/blog">ZappySys Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
