<?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>Rob Windsor&#039;s Weblog</title>
	<atom:link href="https://blogs.msmvps.com/windsor/feed/" rel="self" type="application/rss+xml" />
	<link>https://blogs.msmvps.com/windsor</link>
	<description>Thoughts about SharePoint and Office 365 development</description>
	<lastBuildDate>Thu, 06 Oct 2022 16:13:02 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.6.2</generator>
	<item>
		<title>This Blog has Moved</title>
		<link>https://blogs.msmvps.com/windsor/2022/10/06/this-blog-has-moved/</link>
					<comments>https://blogs.msmvps.com/windsor/2022/10/06/this-blog-has-moved/#respond</comments>
		
		<dc:creator><![CDATA[Rob Windsor]]></dc:creator>
		<pubDate>Thu, 06 Oct 2022 16:12:20 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://blogs.msmvps.com/windsor/?p=1782</guid>

					<description><![CDATA[I&#8217;ve moved my blog to a new hosting service. You can find my new content at https://robwindsor.hashnode.dev/]]></description>
										<content:encoded><![CDATA[<p>I&#8217;ve moved my blog to a new hosting service. You can find my new content at <a href="https://robwindsor.hashnode.dev/">https://robwindsor.hashnode.dev/</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.msmvps.com/windsor/2022/10/06/this-blog-has-moved/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Building Approval Workflows with Power Automate (Microsoft Flow)</title>
		<link>https://blogs.msmvps.com/windsor/2020/06/13/building-approval-workflows-with-power-automate/</link>
					<comments>https://blogs.msmvps.com/windsor/2020/06/13/building-approval-workflows-with-power-automate/#comments</comments>
		
		<dc:creator><![CDATA[Rob Windsor]]></dc:creator>
		<pubDate>Sat, 13 Jun 2020 13:01:39 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Flow]]></category>
		<category><![CDATA[Power Automate]]></category>
		<category><![CDATA[Twitch]]></category>
		<category><![CDATA[Videos]]></category>
		<guid isPermaLink="false">https://blogs.msmvps.com/windsor/?p=1739</guid>

					<description><![CDATA[I recently started streaming on Twitch. In a recent stream I covered how to build approval workflows using Power Automate (Microsoft Flow).]]></description>
										<content:encoded><![CDATA[<p>I recently started <a href="https://www.twitch.tv/robwindsor06">streaming on Twitch</a>. In a recent stream I covered how to build approval workflows using Power Automate (Microsoft Flow).</p>
<p><iframe title="Twitch Stream 5: Building Approval Workflows with Power Automate" width="700" height="394" src="https://www.youtube.com/embed/EMQgwjkcrTQ?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.msmvps.com/windsor/2020/06/13/building-approval-workflows-with-power-automate/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Using React in SharePoint Framework Projects</title>
		<link>https://blogs.msmvps.com/windsor/2020/06/13/using-react-in-sharepoint-framework-projects/</link>
					<comments>https://blogs.msmvps.com/windsor/2020/06/13/using-react-in-sharepoint-framework-projects/#respond</comments>
		
		<dc:creator><![CDATA[Rob Windsor]]></dc:creator>
		<pubDate>Sat, 13 Jun 2020 12:59:33 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[React]]></category>
		<category><![CDATA[SharePoint Framework]]></category>
		<category><![CDATA[Twitch]]></category>
		<category><![CDATA[Videos]]></category>
		<guid isPermaLink="false">https://blogs.msmvps.com/windsor/?p=1737</guid>

					<description><![CDATA[I recently started streaming on Twitch. In a recent stream I covered the basics of using React in SharePoint Framework web part projects. I don&#8217;t have much experience with React, so this was a learning stream.]]></description>
										<content:encoded><![CDATA[<p>I recently started <a href="https://www.twitch.tv/robwindsor06">streaming on Twitch</a>. In a recent stream I covered the basics of using React in SharePoint Framework web part projects. I don&#8217;t have much experience with React, so this was a learning stream.</p>
<p><iframe title="Twitch Stream 4: Using React in SharePoint Framework Projects" width="700" height="394" src="https://www.youtube.com/embed/pjSrFYFQXtc?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.msmvps.com/windsor/2020/06/13/using-react-in-sharepoint-framework-projects/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Setting Up a SharePoint Framework Development Environment</title>
		<link>https://blogs.msmvps.com/windsor/2020/06/13/setting-up-a-sharepoint-framework-development-environment/</link>
					<comments>https://blogs.msmvps.com/windsor/2020/06/13/setting-up-a-sharepoint-framework-development-environment/#respond</comments>
		
		<dc:creator><![CDATA[Rob Windsor]]></dc:creator>
		<pubDate>Sat, 13 Jun 2020 12:56:23 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Twitch]]></category>
		<category><![CDATA[Videos]]></category>
		<guid isPermaLink="false">https://blogs.msmvps.com/windsor/?p=1735</guid>

					<description><![CDATA[I recently started streaming on Twitch. In a recent stream I covered how to setup an Office 365 developer tenant and a SharePoint Framework development environment.]]></description>
										<content:encoded><![CDATA[<p>I recently started <a href="https://www.twitch.tv/robwindsor06">streaming on Twitch</a>. In a recent stream I covered how to setup an Office 365 developer tenant and a SharePoint Framework development environment.</p>
<p><iframe title="Twitch Stream 3: Setting Up a SharePoint Framework Development Environment" width="700" height="394" src="https://www.youtube.com/embed/53ms4wKOwQo?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.msmvps.com/windsor/2020/06/13/setting-up-a-sharepoint-framework-development-environment/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>An Introduction to the SharePoint Framework</title>
		<link>https://blogs.msmvps.com/windsor/2020/01/07/an-introduction-to-the-sharepoint-framework/</link>
					<comments>https://blogs.msmvps.com/windsor/2020/01/07/an-introduction-to-the-sharepoint-framework/#respond</comments>
		
		<dc:creator><![CDATA[Rob Windsor]]></dc:creator>
		<pubDate>Tue, 07 Jan 2020 10:12:52 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[SharePoint Framework]]></category>
		<category><![CDATA[Twitch]]></category>
		<guid isPermaLink="false">https://blogs.msmvps.com/windsor/?p=1721</guid>

					<description><![CDATA[I recently started streaming on Twitch. In my most recent stream I did an extended version of my Introduction to the SharePoint Framework conference talk. <a href="https://blogs.msmvps.com/windsor/2020/01/07/an-introduction-to-the-sharepoint-framework/" class="read-more" title="An Introduction to the SharePoint Framework"><span>Continue reading <span class="screen-reader-text sr-only">An Introduction to the SharePoint Framework</span> <span class="meta-nav">&#8594;</span></span></a>]]></description>
										<content:encoded><![CDATA[<p>I recently started <a href="https://www.twitch.tv/robwindsor06">streaming on Twitch</a>. In my most recent stream I did an extended version of my Introduction to the SharePoint Framework conference talk.</p>
<p>Abstract: Microsoft recently released a new page and web part model called the SharePoint Framework (SPFx). Microsoft used this new framework to build the Modern list and library user experiences that have been rolling out to SharePoint Online. As you’ll see in the session, developing for the SharePoint Framework is nothing like “traditional” SharePoint development. There’s no File | New Project in Visual Studio; instead we’ll be using tools like Node, Yeoman, Gulp and TypeScript. We’re not in Kansas anymore Toto.</p>
<p><iframe title="Stream 2: Introduction to the SharePoint Framework" width="700" height="394" src="https://www.youtube.com/embed/-jHsXARB49c?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.msmvps.com/windsor/2020/01/07/an-introduction-to-the-sharepoint-framework/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Calling an Azure Function from the SharePoint Framework using Delegated Authentication</title>
		<link>https://blogs.msmvps.com/windsor/2020/01/07/calling-an-azure-function-from-the-sharepoint-framework-using-delegated-authentication/</link>
					<comments>https://blogs.msmvps.com/windsor/2020/01/07/calling-an-azure-function-from-the-sharepoint-framework-using-delegated-authentication/#respond</comments>
		
		<dc:creator><![CDATA[Rob Windsor]]></dc:creator>
		<pubDate>Tue, 07 Jan 2020 08:13:24 +0000</pubDate>
				<category><![CDATA[Azure Functions]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[SharePoint Framework]]></category>
		<category><![CDATA[Twitch]]></category>
		<guid isPermaLink="false">https://blogs.msmvps.com/windsor/?p=1719</guid>

					<description><![CDATA[I recently started streaming on Twitch. In my first two streams I covered how to call an Azure Function from a SharePoint Framework web part using delegated authentication. I've published the recordings of these two streams to YouTube. <a href="https://blogs.msmvps.com/windsor/2020/01/07/calling-an-azure-function-from-the-sharepoint-framework-using-delegated-authentication/" class="read-more" title="Calling an Azure Function from the SharePoint Framework using Delegated Authentication"><span>Continue reading <span class="screen-reader-text sr-only">Calling an Azure Function from the SharePoint Framework using Delegated Authentication</span> <span class="meta-nav">&#8594;</span></span></a>]]></description>
										<content:encoded><![CDATA[<p>I recently started <a href="https://www.twitch.tv/robwindsor06">streaming on Twitch</a>. In my first two streams I covered how to call an Azure Function from a SharePoint Framework web part using delegated authentication. I&#8217;ve published the recordings of these two streams to YouTube.</p>
<p>The first stream covers how to setup the Azure Function App, how to configure Azure AD authentication, how to code the Azure Function in Visual Studio, and how to build the SharePoint Framework web part that consumes the Azure Function.</p>
<p>The second stream adds some detail that was missing in the first stream. Specifically it covers how to debug the locally executing Azure Function and updates the SharePoint Framework web part to more clearly demonstrate the use of delegated authentication.</p>
<p>&nbsp;</p>
<p><iframe title="Twitch Stream 0: Azure Functions and SharePoint" width="700" height="394" src="https://www.youtube.com/embed/lHtzueua0G4?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p>
<p>&nbsp;</p>
<p><iframe title="Twitch Stream 1: Azure Functions and SharePoint" width="700" height="394" src="https://www.youtube.com/embed/SOBSemKilcY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.msmvps.com/windsor/2020/01/07/calling-an-azure-function-from-the-sharepoint-framework-using-delegated-authentication/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Integrating Azure Functions into your SharePoint Development</title>
		<link>https://blogs.msmvps.com/windsor/2019/09/17/developing-azure-functions-that-interact-with-sharepoint-using-visual-studio/</link>
					<comments>https://blogs.msmvps.com/windsor/2019/09/17/developing-azure-functions-that-interact-with-sharepoint-using-visual-studio/#respond</comments>
		
		<dc:creator><![CDATA[Rob Windsor]]></dc:creator>
		<pubDate>Tue, 17 Sep 2019 13:21:20 +0000</pubDate>
				<category><![CDATA[Azure Functions]]></category>
		<category><![CDATA[Client Object Model]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<guid isPermaLink="false">https://blogs.msmvps.com/windsor/?p=1703</guid>

					<description><![CDATA[I&#8217;ve had a couple opportunities to integrate Azure Functions into the SharePoint Development I&#8217;ve been doing lately and I&#8217;ve started sharing what I&#8217;ve learned in different places. In late July I recorded an interview with Paul Schaeflein on the topic for the Microsoft 365 Developer Podcast: Azure Functions and SharePoint with Rob Windsor. I&#8217;ve also&#8230; <a href="https://blogs.msmvps.com/windsor/2019/09/17/developing-azure-functions-that-interact-with-sharepoint-using-visual-studio/" class="read-more" title="Integrating Azure Functions into your SharePoint Development"><span>Continue reading <span class="screen-reader-text sr-only">Integrating Azure Functions into your SharePoint Development</span> <span class="meta-nav">&#8594;</span></span></a>]]></description>
										<content:encoded><![CDATA[<p>I&#8217;ve had a couple opportunities to integrate Azure Functions into the SharePoint Development I&#8217;ve been doing lately and I&#8217;ve started sharing what I&#8217;ve learned in different places.</p>
<p>In late July I recorded an interview with Paul Schaeflein on the topic for the <a href="https://twitter.com/m365devpodcast" target="_blank" rel="noopener noreferrer">Microsoft 365 Developer Podcast</a>: <a href="https://www.m365devpodcast.com/e/azure-functions-and-sharepoint-with-rob-windsor/" target="_blank" rel="noopener noreferrer">Azure Functions and SharePoint with Rob Windsor</a>.</p>
<p>I&#8217;ve also been working on a three-part blog series on how to get started building Azure functions that interact with SharePoint using the Client Object Model over on the <a href="https://twitter.com/PAITgroup" target="_blank" rel="noopener noreferrer">PAIT Group</a> blog.</p>
<p><a href="https://www.paitgroup.com/blog/sharepoint-azure-functions-and-visual-studio-part-1" target="_blank" rel="noopener noreferrer">Part 1 – Registering an application with Azure Active Directory</a><br />
<a href="https://www.paitgroup.com/blog/sharepoint-azure-functions-and-visual-studio-part-2" target="_blank" rel="noopener noreferrer">Part 2 – Developing Azure Functions in Visual Studio</a><br />
Part 3 – Creating an Deploying an Azure Function App (Coming soon)</p>
<p>I plan to do additional content on this topic in the future so look out for additional blog posts, YouTube videos, and conference talks.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.msmvps.com/windsor/2019/09/17/developing-azure-functions-that-interact-with-sharepoint-using-visual-studio/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PowerApps and Flow Licensing Changes &#8211; October 2019</title>
		<link>https://blogs.msmvps.com/windsor/2019/09/04/powerapps-and-flow-licensing-changes-october-2019/</link>
					<comments>https://blogs.msmvps.com/windsor/2019/09/04/powerapps-and-flow-licensing-changes-october-2019/#respond</comments>
		
		<dc:creator><![CDATA[Rob Windsor]]></dc:creator>
		<pubDate>Wed, 04 Sep 2019 15:29:10 +0000</pubDate>
				<category><![CDATA[Flow]]></category>
		<category><![CDATA[PowerApps]]></category>
		<guid isPermaLink="false">https://blogs.msmvps.com/windsor/?p=1699</guid>

					<description><![CDATA[Microsoft is making some pretty significant changes to PowerApps and Flow licensing starting on October 1, 2019. The details of these changes have been trickling out since the initial announcement in mid-July at the Inspire conference. July 16: The Inspire session where the licensing changes were first announced: Microsoft Power Platform business model and licensing&#8230; <a href="https://blogs.msmvps.com/windsor/2019/09/04/powerapps-and-flow-licensing-changes-october-2019/" class="read-more" title="PowerApps and Flow Licensing Changes &#8211; October 2019"><span>Continue reading <span class="screen-reader-text sr-only">PowerApps and Flow Licensing Changes &#8211; October 2019</span> <span class="meta-nav">&#8594;</span></span></a>]]></description>
										<content:encoded><![CDATA[<p>Microsoft is making some pretty significant changes to PowerApps and Flow licensing starting on October 1, 2019. The details of these changes have been trickling out since the initial announcement in mid-July at the Inspire conference.</p>
<p>July 16: The Inspire session where the licensing changes were first announced: <a href="https://myinspire.microsoft.com/sessions/8449bfde-273a-4a80-af0d-5f5e0e5deddf?source=sessions">Microsoft Power Platform business model and licensing updates</a>.</p>
<p>July 25: A post on the PowerApps blog from <a href="https://twitter.com/clamanna">Charles Lamanna</a> summarizing what what covered in the Inspire session: <a href="https://powerapps.microsoft.com/en-us/blog/new-licensing-options-for-powerapps-and-flow">New licensing options for PowerApps and Microsoft Flow standalone paid plans</a>.</p>
<p>August 29: A summary similar to the Charles&#8217; blog post on the Microsoft licensing site: <a href="https://www.microsoft.com/en-us/licensing/news/updates-to-microsoft-365-dynamics-365-powerapps-and-microsoft-flow-licensing">Updates to Microsoft 365, Dynamics 365, PowerApps and Flow Licensing</a>.</p>
<p>August 29: A FAQ with additional information about the licensing changes: <a href="https://docs.microsoft.com/en-us/power-platform/admin/powerapps-flow-licensing-faq">PowerApps and Microsoft Flow licensing FAQs for October 2019</a>.</p>
<p>There are two things to note here: 1) the official documentation on PowerApps and Flow licensing has not been updated yet, and 2) the information contained in the above resources has evolved since July. The point I&#8217;m trying to make is that there is a chance that the licensing rules may not have reached their final state.</p>
<p>If you are looking for a summary of the changes you can check out my post on the <a href="https://twitter.com/PAITgroup">PAIT Group</a> blog: <a href="https://www.paitgroup.com/blog/an-office-365-users-guide-to-powerapps-and-flow-licensing-october-2019-edition">An Office 365 Users Guide to PowerApps and Flow Licensing – October 2019 Edition</a>.</p>
<p>Finally I discussed this topic with <a href="https://twitter.com/andrewconnell">Andrew Connell</a> on episode 312 of the <a href="https://twitter.com/mscloudshow">Microsoft Cloud Show</a>: <a href="https://www.microsoftcloudshow.com/podcast/Episodes/312-inspire-tidbits-and-big-cloud-wins">Inspire Tidbits and Big Cloud Wins</a>.</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.msmvps.com/windsor/2019/09/04/powerapps-and-flow-licensing-changes-october-2019/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Power Automate (Microsoft Flow) Error Handling</title>
		<link>https://blogs.msmvps.com/windsor/2019/04/25/microsoft-flow-error-handling/</link>
					<comments>https://blogs.msmvps.com/windsor/2019/04/25/microsoft-flow-error-handling/#comments</comments>
		
		<dc:creator><![CDATA[Rob Windsor]]></dc:creator>
		<pubDate>Thu, 25 Apr 2019 21:17:55 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Flow]]></category>
		<guid isPermaLink="false">https://blogs.msmvps.com/windsor/?p=1658</guid>

					<description><![CDATA[If you search for information on Power Automate (Microsoft Flow) error handling you&#8217;ll find that the community generally recommends using a pattern like the one shown below. The actions that implement the main body of the flow go into a Scope which is followed by two parallel Scopes, one to hold the actions that complete&#8230; <a href="https://blogs.msmvps.com/windsor/2019/04/25/microsoft-flow-error-handling/" class="read-more" title="Power Automate (Microsoft Flow) Error Handling"><span>Continue reading <span class="screen-reader-text sr-only">Power Automate (Microsoft Flow) Error Handling</span> <span class="meta-nav">&#8594;</span></span></a>]]></description>
										<content:encoded><![CDATA[<p>If you search for information on Power Automate (Microsoft Flow) error handling you&#8217;ll find that the community generally recommends using a pattern like the one shown below. The actions that implement the main body of the flow go into a Scope which is followed by two parallel Scopes, one to hold the actions that complete a successful run and one to hold the actions for a run that failed or timed out.</p>
<p>&nbsp;</p>
<p><a href="https://blogs.msmvps.com/windsor/files/2019/04/Capture001.png"><img loading="lazy" class="alignnone wp-image-1660 " style="border: 1px solid #021a40" src="https://blogs.msmvps.com/windsor/files/2019/04/Capture001.png" alt="Basic error handling pattern" width="642" height="285" srcset="https://blogs.msmvps.com/windsor/files/2019/04/Capture001.png 898w, https://blogs.msmvps.com/windsor/files/2019/04/Capture001-300x133.png 300w, https://blogs.msmvps.com/windsor/files/2019/04/Capture001-768x341.png 768w" sizes="(max-width: 642px) 100vw, 642px" /></a></p>
<p>&nbsp;</p>
<p><a href="https://blogs.msmvps.com/windsor/files/2019/04/Capture002.png"><img loading="lazy" class="alignnone wp-image-1661" style="border: 1px solid #021a40" src="https://blogs.msmvps.com/windsor/files/2019/04/Capture002.png" alt="Basic error handling pattern 2" width="642" height="400" srcset="https://blogs.msmvps.com/windsor/files/2019/04/Capture002.png 883w, https://blogs.msmvps.com/windsor/files/2019/04/Capture002-300x187.png 300w, https://blogs.msmvps.com/windsor/files/2019/04/Capture002-768x478.png 768w" sizes="(max-width: 642px) 100vw, 642px" /></a></p>
<p>&nbsp;</p>
<p>If you are not familiar with Scopes, their main purpose is to act as a container for one or more actions. One of the benefits of using Scopes is that you can collapse them enabling you to get a big picture view of your flow without having to scroll all over the place. However in this case we are also using the Scopes to clearly show both the success and failure paths for the Flow.</p>
<p>I&#8217;ve used the pattern shown above in several of the flows I&#8217;ve built but I have always had one issue. If I was inside the Fail or Timeout Scope I knew something went wrong, but I didn&#8217;t think there was a way to determine exactly what that was. This issue bugged me so much that I kept searching until I finally found some Logic Apps documentation that discussed the <strong>@result()</strong> expression. Power Automate is built on top of Logic Apps so most things that apply to Logic Apps also apply to Flow.</p>
<p>The <strong>@result()</strong> expression accepts the name of a Scope as a parameter and returns a JSON array of objects that represent the results of the execution of each action within the Scope. The schema of the objects returned will vary depending on the type of action but all objects will have some common properties. The properties that are of interest in terms of error handling are: <strong>name</strong>, <strong>code</strong> and <strong>status</strong>.</p>
<p>The name property value is the name of the action, the code property value is a very terse description of the error, and the status property value indicates whether the action succeeded, failed, timed out, or was skipped.</p>
<p>Below are a couple example objects for actions that failed. You can see they both have the terse error description in the code property but they also have more detailed error information in other properties (note the error message in the second example was truncated for inclusion in this post). The issue is that the paths to the properties that contain the detailed error information are different in the two objects. It&#8217;s definitely possible to extract the detailed error information, you would just add a series of conditions that check for the existence of the different properties that could potentially hold it. However in this blog post we are going to keep things simple and just focus on how we can extract the error information that is common to all objects representing an action.</p>
<pre class="prettyprint lang-json" data-start-line="1" data-visibility="visible" data-highlight="" data-caption="">{
   "name": "Example_Action_That_Failed",
   "inputs": {
      "uri": "https://myfailedaction.azurewebsites.net",
      "method": "POST"
   },
   "outputs": {
      "statusCode": 404,
      "headers": {
         "Date": "Thu, 11 Aug 2016 03:18:18 GMT",
         "Server": "Microsoft-IIS/8.0",
         "X-Powered-By": "ASP.NET",
         "Content-Length": "68",
         "Content-Type": "application/json"
      },
      "body": {
         "code": "ResourceNotFound",
         "message": "/docs/folder-name/resource-name does not exist"
      }
   },
   "startTime": "2016-08-11T03:18:19.7755341Z",
   "endTime": "2016-08-11T03:18:20.2598835Z",
   "trackingId": "bdd82e28-ba2c-4160-a700-e3a8f1a38e22",
   "clientTrackingId": "08587307213861835591296330354",
   "code": "NotFound",
   "status": "Failed"
}</pre>
<p>&nbsp;</p>
<pre class="prettyprint lang-json" data-start-line="1" data-visibility="visible" data-highlight="" data-caption="">{
    "name": "Set_variable_2",
    "startTime": "2019-04-15T22:12:02.1199356Z",
    "endTime": "2019-04-15T22:12:02.1199356Z",
    "trackingId": "7fdf54a0-ab29-4087-affd-319864513ed9",
    "clientTrackingId": "08586462405637382345452520112CU22",
    "clientKeywords": [
        "testFlow"
    ],
    "code": "BadRequest",
    "status": "Failed",
    "error": {
        "code": "InvalidTemplate",
        "message": "Unable to process template language expressions ..."
    }
}</pre>
<p>We&#8217;ll start by adding an <strong>Initialize variable</strong> action above the Main Scope. This action will initialize a String variable named ErrorDetails to an empty string.</p>
<p><a href="https://blogs.msmvps.com/windsor/files/2019/04/Capture003.png"><img loading="lazy" class="alignnone size-full wp-image-1669" style="border: 1px solid #021a40" src="https://blogs.msmvps.com/windsor/files/2019/04/Capture003.png" alt="Initialize ErrorDetails variable" width="610" height="255" srcset="https://blogs.msmvps.com/windsor/files/2019/04/Capture003.png 610w, https://blogs.msmvps.com/windsor/files/2019/04/Capture003-300x125.png 300w" sizes="(max-width: 610px) 100vw, 610px" /></a></p>
<p>Then inside the Fail or Timeout Scope, add a <strong>Filter array</strong> action. We will use this action to get the details of the actions inside the Main Scope that either failed or timed out. To do this we&#8217;ll set the the From property value (marked as 1 in the screen capture) to the expression <strong>result(&#8216;Main&#8217;)</strong>, we&#8217;ll set the left-hand side of the filter condition (marked as 2 in the screen capture) to the expression: <strong>createArray(&#8216;Failed&#8217;, &#8216;TimedOut&#8217;)</strong>, and we&#8217;ll set the right-hand side of the filter condition (marked as 3 in the screen capture) to the expression <strong>item()[&#8216;status&#8217;]</strong>.</p>
<p><a href="https://blogs.msmvps.com/windsor/files/2019/04/Capture009.png"><img loading="lazy" class="alignnone wp-image-1678 size-full" src="https://blogs.msmvps.com/windsor/files/2019/04/Capture009.png" alt="Filter results of Main Scope" width="648" height="387" srcset="https://blogs.msmvps.com/windsor/files/2019/04/Capture009.png 648w, https://blogs.msmvps.com/windsor/files/2019/04/Capture009-300x179.png 300w" sizes="(max-width: 648px) 100vw, 648px" /></a></p>
<p>Add an <strong>Apply to each</strong> action below the Filter array action. This action should iterate over the output of the Filter array action. In most cases the output array will only contain a single object but it is possible that it could contain multiple objects.</p>
<p><a href="https://blogs.msmvps.com/windsor/files/2019/04/Capture005.png"><img loading="lazy" class="alignnone size-full wp-image-1672" style="border: 1px solid #021a40" src="https://blogs.msmvps.com/windsor/files/2019/04/Capture005.png" alt="Apply to each result" width="612" height="303" srcset="https://blogs.msmvps.com/windsor/files/2019/04/Capture005.png 612w, https://blogs.msmvps.com/windsor/files/2019/04/Capture005-300x149.png 300w" sizes="(max-width: 612px) 100vw, 612px" /></a></p>
<p>Add an <strong>Append to string variable</strong> action inside the Apply to each action. Will use this action to append the the error information for the current result to the ErrorDetails string variable. The expression marked as 1 injects the value of the name property: <strong>items(&#8216;Apply_to_each_result&#8217;)[&#8216;name&#8217;]</strong>. The expression marked as 2 injects the value of the status property: <strong>items(&#8216;Apply_to_each_result&#8217;)[&#8216;status&#8217;]</strong>. The expression marked as 3 injects the value of the code property: <strong>items(&#8216;Apply_to_each_result&#8217;)[&#8216;code&#8217;]</strong>.</p>
<p><a href="https://blogs.msmvps.com/windsor/files/2019/04/Capture006.png"><img loading="lazy" class="alignnone wp-image-1673" style="border: 1px solid #021a40" src="https://blogs.msmvps.com/windsor/files/2019/04/Capture006.png" alt="Append error details for current action" width="616" height="362" srcset="https://blogs.msmvps.com/windsor/files/2019/04/Capture006.png 647w, https://blogs.msmvps.com/windsor/files/2019/04/Capture006-300x176.png 300w" sizes="(max-width: 616px) 100vw, 616px" /></a></p>
<p>Add a <strong>Send an email</strong> action below the Apply to each action. We&#8217;ll use this action to notify one or more users that the Flow failed or timed out. Set the To property to the user(s) you wish to notify, set the Subject property to something appropriate for your situation, and set the Importance property to High.</p>
<p>In the Body, start by adding the ErrorDetails variable value. Then we&#8217;ll add a link that the Flow owners can click to see the run history for the Flow. I got the expression to build the link from the <strong>Try, Catch and Finally</strong> Flow template: <strong>concat(&#8216;https://flow.microsoft.com/manage/environments/&#8217;,</strong><br />
<strong>workflow()?[&#8216;tags&#8217;][&#8216;environmentName&#8217;], </strong><strong>&#8216;/flows/&#8217;,</strong><strong>workflow()?[&#8216;name&#8217;], </strong><strong>&#8216;/runs/&#8217;,</strong><br />
<strong>workflow()?[&#8216;run&#8217;][&#8216;name&#8217;]).</strong></p>
<p><a href="https://blogs.msmvps.com/windsor/files/2019/04/Capture007.png"><img loading="lazy" class="alignnone size-full wp-image-1676" style="border: 1px solid #021a40" src="https://blogs.msmvps.com/windsor/files/2019/04/Capture007.png" alt="Send an email" width="615" height="690" srcset="https://blogs.msmvps.com/windsor/files/2019/04/Capture007.png 615w, https://blogs.msmvps.com/windsor/files/2019/04/Capture007-267x300.png 267w" sizes="(max-width: 615px) 100vw, 615px" /></a></p>
<p>We are now ready to test the flow. To do this I am going to add an action to the Main Scope that I know will fail. I am going to add a <strong>Get item</strong> action where I&#8217;ll attempt to get an item that does not exist from a SharePoint list.</p>
<p><a href="https://blogs.msmvps.com/windsor/files/2019/04/Capture008.png"><img loading="lazy" class="alignnone wp-image-1677" style="border: 1px solid #021a40" src="https://blogs.msmvps.com/windsor/files/2019/04/Capture008.png" alt="Get item" width="616" height="405" srcset="https://blogs.msmvps.com/windsor/files/2019/04/Capture008.png 643w, https://blogs.msmvps.com/windsor/files/2019/04/Capture008-300x197.png 300w" sizes="(max-width: 616px) 100vw, 616px" /></a></p>
<p>The example flow I&#8217;m using for this blog post has a manual trigger so I can test by clicking the <strong>Test</strong> button at the top-right of the Flow designer.</p>
<p>Looking at the flow run history you&#8217;ll see that the Get item action failed which took us into the Fail or Timeout scope where all the actions ran successfully.</p>
<p><a href="https://blogs.msmvps.com/windsor/files/2019/04/Capture010.png"><img loading="lazy" class="alignnone wp-image-1679" style="border: 1px solid #021a40" src="https://blogs.msmvps.com/windsor/files/2019/04/Capture010-1024x556.png" alt="Flow run history" width="610" height="331" srcset="https://blogs.msmvps.com/windsor/files/2019/04/Capture010-1024x556.png 1024w, https://blogs.msmvps.com/windsor/files/2019/04/Capture010-300x163.png 300w, https://blogs.msmvps.com/windsor/files/2019/04/Capture010-768x417.png 768w, https://blogs.msmvps.com/windsor/files/2019/04/Capture010.png 1700w" sizes="(max-width: 610px) 100vw, 610px" /></a></p>
<p>Checking the email for the Rob Windsor account we find the email message generated by the Send an email action.</p>
<p><a href="https://blogs.msmvps.com/windsor/files/2019/04/Capture011.png"><img loading="lazy" class="alignnone wp-image-1680" style="border: 1px solid #021a40" src="https://blogs.msmvps.com/windsor/files/2019/04/Capture011-1024x412.png" alt="Flow failure notification message" width="605" height="244" srcset="https://blogs.msmvps.com/windsor/files/2019/04/Capture011-1024x412.png 1024w, https://blogs.msmvps.com/windsor/files/2019/04/Capture011-300x121.png 300w, https://blogs.msmvps.com/windsor/files/2019/04/Capture011-768x309.png 768w, https://blogs.msmvps.com/windsor/files/2019/04/Capture011.png 1025w" sizes="(max-width: 605px) 100vw, 605px" /></a></p>
<p>Being able to notify a user that a flow failed or timed out has value but being able to provide detail about what action(s) failed or timed out takes that value to the next level.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.msmvps.com/windsor/2019/04/25/microsoft-flow-error-handling/feed/</wfw:commentRss>
			<slash:comments>31</slash:comments>
		
		
			</item>
		<item>
		<title>Calling the SharePoint REST API in a Microsoft Flow</title>
		<link>https://blogs.msmvps.com/windsor/2018/06/15/calling-the-sharepoint-rest-api-in-a-microsoft-flow/</link>
					<comments>https://blogs.msmvps.com/windsor/2018/06/15/calling-the-sharepoint-rest-api-in-a-microsoft-flow/#comments</comments>
		
		<dc:creator><![CDATA[Rob Windsor]]></dc:creator>
		<pubDate>Fri, 15 Jun 2018 17:16:22 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Flow]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[SharePoint]]></category>
		<guid isPermaLink="false">https://blogs.msmvps.com/windsor/?p=1587</guid>

					<description><![CDATA[I&#8217;ve been doing a lot of work with Microsoft Flow lately and I came across a situation where I needed to make a call to the SharePoint REST API to move a list item from one folder to another. There&#8217;s currently no move action in Flow but there is a moveTo function in the REST&#8230; <a href="https://blogs.msmvps.com/windsor/2018/06/15/calling-the-sharepoint-rest-api-in-a-microsoft-flow/" class="read-more" title="Calling the SharePoint REST API in a Microsoft Flow"><span>Continue reading <span class="screen-reader-text sr-only">Calling the SharePoint REST API in a Microsoft Flow</span> <span class="meta-nav">&#8594;</span></span></a>]]></description>
										<content:encoded><![CDATA[<p>I&#8217;ve been doing a lot of work with Microsoft Flow lately and I came across a situation where I needed to make a call to the SharePoint REST API to move a list item from one folder to another. There&#8217;s currently no move action in Flow but there is a moveTo function in the REST API.</p>
<p>I did some Googling and I found several posts that showed how to register an add-in, make app-only permissions requests for the add-in, trust the add-in, and then use the HTTP action in Flow to get the bearer (access) token using the add-in Client ID and Secret so you could then use the HTTP action to make the REST API call. I followed the steps described in the posts and was able to make the REST API call to move the list item. This is one example of the posts to which I&#8217;m referring: <a href="https://www.anupams.net/sharepoint-rest-service-microsoft-flow/">How to Call the SharePoint REST Webservice from Microsoft Flow</a>.</p>
<p>A short time later I was looking for something else when I noticed the &#8216;Send an HTTP request to SharePoint&#8217; action. This action could have been named &#8216;Make a SharePoint REST API Call&#8217; because that is exactly what it enables you to do &#8211; without having to go through all the setup described above.</p>
<p>In the example below I&#8217;m using the &#8216;Send an HTTP request to SharePoint&#8217; action to execute a CAML query. Note that I am not passing the form digest in the headers. This is not required from what I&#8217;ve seen so far.</p>
<p><a href="https://blogs.msmvps.com/windsor/files/2018/06/Capture1.jpg"><img loading="lazy" class="alignnone size-full wp-image-1588" src="https://blogs.msmvps.com/windsor/files/2018/06/Capture1.jpg" alt="Send an HTTP request to SharePoint" width="610" height="509" srcset="https://blogs.msmvps.com/windsor/files/2018/06/Capture1.jpg 610w, https://blogs.msmvps.com/windsor/files/2018/06/Capture1-300x250.jpg 300w" sizes="(max-width: 610px) 100vw, 610px" /></a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.msmvps.com/windsor/2018/06/15/calling-the-sharepoint-rest-api-in-a-microsoft-flow/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
	</channel>
</rss>
