<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jake Mannion</title>
    <description>The latest articles on DEV Community by Jake Mannion (@jakemannion).</description>
    <link>https://dev.to/jakemannion</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1140001%2Fd25dce1e-1e0a-4cac-9f3b-04ded120a25f.jpeg</url>
      <title>DEV Community: Jake Mannion</title>
      <link>https://dev.to/jakemannion</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jakemannion"/>
    <language>en</language>
    <item>
      <title>Advanced SharePoint Permission Actions with Power Automate</title>
      <dc:creator>Jake Mannion</dc:creator>
      <pubDate>Tue, 20 Jan 2026 18:00:00 +0000</pubDate>
      <link>https://dev.to/jakemannion/managing-sharepoint-permissions-with-power-automate-41b3</link>
      <guid>https://dev.to/jakemannion/managing-sharepoint-permissions-with-power-automate-41b3</guid>
      <description>&lt;h4&gt;
  
  
  &lt;em&gt;Setting and creating permissions with precision using HTTP flow actions&lt;/em&gt;
&lt;/h4&gt;

&lt;h6&gt;
  
  
  📅 Originally published May 26, 2022 - &lt;a href="https://hamsandwich.dev/managing-permissions-in-sharepoint-online-with-power-automate" rel="noopener noreferrer"&gt;hamsandwich.dev&lt;/a&gt;
&lt;/h6&gt;




&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;SharePoint is known for its highly customizable permissions. That flexibility can have its perils, of course, but with the right approach (and for the right scenarios) it can be very effective.&lt;/p&gt;

&lt;p&gt;Power Automate provides a few basic connector actions for working with SharePoint permissions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Revoke access&lt;/em&gt; to an item
&lt;/li&gt;
&lt;li&gt;Create access &lt;em&gt;links&lt;/em&gt; for an item&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Not much for now, but fortunately the &lt;a href="https://learn.microsoft.com/en-us/connectors/sharepointonline/#send-an-http-request-to-sharepoint" rel="noopener noreferrer"&gt;HTTP to SharePoint action&lt;/a&gt; opens up numerous other possibilities.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr4ux5a2nc5uw3i87j4qa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr4ux5a2nc5uw3i87j4qa.png" alt="http to sharepoint action" width="535" height="49"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Familiar Methods, New Approach
&lt;/h2&gt;

&lt;p&gt;SharePoint's REST API has a number of endpoints for managing permissions. Most methods can be re-used across different entities like sites, lists, items, etc.&lt;/p&gt;

&lt;p&gt;If you've done on-premises SharePoint development, you may already be familiar &lt;a href="https://www.c-sharpcorner.com/UploadFile/fc34aa/break-inheritance-and-add-role-permissions-using-rest-api-in/" rel="noopener noreferrer"&gt;with some of them&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The calls are simple - no payloads, headers or returns to process for most scenarios. The only tricky part can be finding the exact syntax, and there may be some data peculiarities to manage, depending on your scenario.&lt;/p&gt;




&lt;h2&gt;
  
  
  HTTP Action Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔷 Getting the Principal ID of a Group
&lt;/h3&gt;

&lt;p&gt;Type: &lt;strong&gt;GET&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F35fhqikx3g1v8leu0li3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F35fhqikx3g1v8leu0li3.png" alt="flow http action" width="605" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ℹ️ &lt;strong&gt;Note:&lt;/strong&gt; Replace &lt;em&gt;GROUP NAME&lt;/em&gt; with your target group name&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;_api/web/sitegroups/getbyname('GROUP NAME')/Id
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  🔷 Getting Principal IDs for &lt;em&gt;All&lt;/em&gt; Groups
&lt;/h3&gt;

&lt;p&gt;Type: &lt;strong&gt;GET&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgan03c2nmlc1pohu2992.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgan03c2nmlc1pohu2992.png" alt="flow http action" width="602" height="256"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;_api/web/sitegroups?$select=Title,ID
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Results will be an array of all groups available on the site.&lt;/p&gt;

&lt;p&gt;ℹ️ &lt;strong&gt;Note:&lt;/strong&gt; You can find group IDs manually by clicking individual groups within Site Settings -&amp;gt; People and Groups and checking the address bar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1324qvv9zk248pe44syd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1324qvv9zk248pe44syd.png" alt="People and Groups" width="527" height="26"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cutting this corner won't save you much time, however. For most scenarios, it's better to fetch the value(s) at runtime.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔷 Getting Principal ID for Specific User
&lt;/h3&gt;

&lt;p&gt;Type: &lt;strong&gt;GET&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4iy8y1o6qpleb5q57nix.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4iy8y1o6qpleb5q57nix.png" alt="exploring data structure with SP Insider" width="800" height="219"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are a couple ways to do this. First, you might want to use a tool like &lt;a href="https://chrome.google.com/webstore/detail/sp-insider/gjckpigahcbffmeofjfedlffddhfidhj?hl=en" rel="noopener noreferrer"&gt;SP Insider&lt;/a&gt; (pictured above) to get familiar with the SiteUsers data structure within your site.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnhqvn7oe5eqj7eb44fmo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnhqvn7oe5eqj7eb44fmo.png" alt="flow action http" width="605" height="278"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here are two sample queries - one for email, one for user name:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;_api/Web/SiteUsers?$filter=Email eq 'Sample.Person@samplesite.com'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ℹ️ &lt;strong&gt;Note:&lt;/strong&gt; The search terms are case sensitive!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;_api/Web/SiteUsers?$filter=Title eq 'Sample Person'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fieiqzax0atx7569ekols.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fieiqzax0atx7569ekols.png" alt="http result array" width="800" height="258"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You'll get a single-node array in the return, containing the user's ID value for that site.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔷 Getting Principal IDs for &lt;em&gt;All&lt;/em&gt; Users
&lt;/h3&gt;

&lt;p&gt;Type: &lt;strong&gt;GET&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh5sgihbv3secj93fhiou.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh5sgihbv3secj93fhiou.png" alt="flow http action" width="605" height="255"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ℹ️ You'll be getting a lot of data back with this one, potentially, so consider using &lt;em&gt;select&lt;/em&gt; to narrow the return down to just the fields you need.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;_api/Web/SiteUsers?$select=ID,Title,Email
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There are some important limitations to consider here:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;SiteUsers&lt;/strong&gt; data is &lt;em&gt;site-specific&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;A user's &lt;em&gt;Principal ID&lt;/em&gt; on one site will be different from their &lt;em&gt;Principal ID&lt;/em&gt; on another
&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;SiteUsers&lt;/strong&gt; list will only contain records for &lt;em&gt;users who have visited the site&lt;/em&gt; (or have been added via a few other methods).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There is an &lt;a href="https://docs.microsoft.com/en-us/previous-versions/office/sharepoint-visio/jj245233(v=office.15)" rel="noopener noreferrer"&gt;ensureUser method&lt;/a&gt; to explore, if you want to pursue this approach further.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔷 Getting All List/Library GUIDs
&lt;/h3&gt;

&lt;p&gt;Type: &lt;strong&gt;GET&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I tend to work with GUIDs more than &lt;em&gt;GetByTitle&lt;/em&gt; endpoints, so the examples on this page are tailored to that approach. Here's a quick way to get all list GUIDs on a site, in case you need it:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fui2pk1un6x43ju9hmadd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fui2pk1un6x43ju9hmadd.png" alt="flow action GUIDs" width="606" height="257"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/_api/Web/Lists?&amp;amp;$select=Title, ID
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  🔷 Getting All Role Definitions
&lt;/h3&gt;

&lt;p&gt;Type: &lt;strong&gt;GET&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Each permission role in SharePoint (Full Control, Edit, etc.) has a specific ID associated with it. You'll need this value for some of the example calls below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl00spjprmgqyjh8ko8en.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl00spjprmgqyjh8ko8en.png" alt="image.png" width="606" height="255"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;_api/web/roledefinitions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Results will be an array containing objects for each role definition.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔷 Get Current Permissions on Item/Document
&lt;/h3&gt;

&lt;p&gt;Type: &lt;strong&gt;GET&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqcjmdcxkbadxxj6llgkd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqcjmdcxkbadxxj6llgkd.png" alt="image" width="608" height="298"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;_api/web/lists/getbytitle('LIST NAME')/items(ITEM ID)/roleassignments
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Will return an array of objects. Each &lt;em&gt;PrincipalId&lt;/em&gt; will tell you &lt;em&gt;who&lt;/em&gt; has permission to the item, but not the permission type.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fajngxjwwqrzx3hiry1qn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fajngxjwwqrzx3hiry1qn.png" alt="image" width="800" height="656"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use an &lt;strong&gt;Apply to Each&lt;/strong&gt; step to loop through the results and perform further actions.&lt;/p&gt;




&lt;h3&gt;
  
  
  🟩 Break Permission Inheritance on an Item or Document
&lt;/h3&gt;

&lt;p&gt;Type: &lt;strong&gt;POST&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpaabdeifqq4iipgtlytk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpaabdeifqq4iipgtlytk.png" alt="flow action" width="604" height="304"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;_api/Web/Lists(guid'LIST GUID')/Items(12)/breakroleinheritance(copyRoleAssignments=true, clearSubscopes=true)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  🟩 Restore Permission Inheritance on Item/Document
&lt;/h3&gt;

&lt;p&gt;*&lt;em&gt;Added August, 2024&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Type: &lt;strong&gt;POST&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;💡 Tip of the cap to &lt;a href="https://tomriha.com/how-to-restore-sharepoint-item-file-permissions-with-power-automate/" rel="noopener noreferrer"&gt;Tom Riha&lt;/a&gt; on this one, which I neglected to include when I first slapped this page together. Saved me a few minutes of head scratching tonight.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa7n4n7vybosibpd80d3q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa7n4n7vybosibpd80d3q.png" alt="image" width="614" height="296"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;_api/Web/lists/getByTitle('YOUR-LIST-OR-LIBRARY-HERE')/items(ITEM-ID-HERE)/ResetRoleInheritance()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  🔶 Remove Permissions from a List/Library
&lt;/h3&gt;

&lt;p&gt;Type: &lt;strong&gt;DELETE&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftfe7psq5698z0kqffj25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftfe7psq5698z0kqffj25.png" alt="flow http action" width="607" height="283"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;_api/Web/Lists(guid'LIST GUID')/RoleAssignments/GetByPrincipalId(5)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ℹ️ &lt;strong&gt;Note:&lt;/strong&gt; Replace the principal ID value for the user/group you are targeting, and the GUID for your list or library.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔶 Remove Permissions from an Item/Document
&lt;/h3&gt;

&lt;p&gt;Type: &lt;strong&gt;DELETE&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fer15pvl0tyatmxs76xo6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fer15pvl0tyatmxs76xo6.png" alt="image.png" width="604" height="280"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;_api/Web/Lists(guid'LIST GUID')/Items(12)/RoleAssignments/GetByPrincipalId(5)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ℹ️ &lt;strong&gt;Note:&lt;/strong&gt; Replace the the principal ID and list GUID values to suit your specific scenario&lt;/p&gt;

&lt;p&gt;You don't need a specific role definition for this one - it will simply remove the target entity's permissions (whatever those may be) for the item.&lt;/p&gt;




&lt;h3&gt;
  
  
  🟩 Add Permissions to a List/Library
&lt;/h3&gt;

&lt;p&gt;Type: &lt;strong&gt;POST&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhg6it0y2eh842tuw3xsj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhg6it0y2eh842tuw3xsj.png" alt="flow http action" width="607" height="307"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;_api/Web/Lists(guid'LIST GUID')/RoleAssignments/addroleassignment(principalid=5,roledefid=1073741827)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ℹ️ &lt;strong&gt;Note:&lt;/strong&gt; Replace the the principal ID, role definition and list GUID values to suit your specific scenario&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;That covers many of the more common permission management activities in SharePoint. You can extend this approach to cover lots of other scenarios, as well. 👍&lt;/p&gt;

</description>
      <category>powerplatform</category>
      <category>powerautomate</category>
      <category>sharepoint</category>
      <category>api</category>
    </item>
    <item>
      <title>Custom Logging in Power Automate</title>
      <dc:creator>Jake Mannion</dc:creator>
      <pubDate>Mon, 19 Jan 2026 19:58:54 +0000</pubDate>
      <link>https://dev.to/jakemannion/custom-logging-in-power-automate-5294</link>
      <guid>https://dev.to/jakemannion/custom-logging-in-power-automate-5294</guid>
      <description>&lt;h4&gt;
  
  
  &lt;em&gt;Easy, practical DIY approach using SharePoint Online lists&lt;/em&gt;
&lt;/h4&gt;

&lt;h6&gt;
  
  
  📅 Originally published January 1, 2025 - &lt;a href="https://hamsandwich.dev/custom-logging-in-power-automate" rel="noopener noreferrer"&gt;hamsandwich.dev&lt;/a&gt;
&lt;/h6&gt;




&lt;h2&gt;
  
  
  Examining Events, Errors and Outcomes
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Handling&lt;/em&gt; errors gracefully within your flow logic is important. Fortunately, there is plenty of guidance to be found on the subject:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.flyingpolymath.com/post/error-handling-in-power-automate-for-the-business-user" rel="noopener noreferrer"&gt;Error Handling - THE FLYING POLYMATH&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://d365demystified.com/2022/01/20/try-catch-error-handling-using-scope-in-power-automate/" rel="noopener noreferrer"&gt;Try Catch - D365 Demystified&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.matthewdevaney.com/power-automate-coding-standards-for-cloud-flows/power-automate-standards-error-handling/" rel="noopener noreferrer"&gt;Error Handling Standards - Matthew Devaney&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;How can we investigate exceptions without wading through countless pages of flow run history?&lt;/p&gt;

&lt;p&gt;If integrating with &lt;a href="https://learn.microsoft.com/en-us/power-platform/admin/app-insights-cloud-flow" rel="noopener noreferrer"&gt;Azure Application Insights&lt;/a&gt; is not in scope and the information available within the &lt;a href="https://learn.microsoft.com/en-us/power-platform/release-plan/2024wave1/power-automate/automation-center-monitor-manage-all-automations-related-assets" rel="noopener noreferrer"&gt;Automation Center&lt;/a&gt; is not granular or specific enough, consider custom event logging.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Scenarios / Use Cases
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🏭 Performing bulk content operations and a certain percentage of failures is expected&lt;/li&gt;
&lt;li&gt;📆 Building a solution that involves chronological activities and events&lt;/li&gt;
&lt;li&gt;🧺 Collecting flow errors in a centralized location, instead of relying on “push” notifications&lt;/li&gt;
&lt;li&gt;🤖 Providing visibility to runs from higher environments or from a service account context&lt;/li&gt;
&lt;li&gt;🖥 Displaying flow outcome data adjacent to the automation context (for SPO scenarios)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Log List Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Approval Event History
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmd6sac18ktwxaanpn31w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmd6sac18ktwxaanpn31w.png" alt="Approval Event History" width="800" height="342"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Scheduled Automation
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5a80v342cqne20n1nurx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5a80v342cqne20n1nurx.png" alt="Scheduled Automation" width="800" height="282"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Bulk Content Sync
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx9u1qzspo7laiwbltle4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx9u1qzspo7laiwbltle4.png" alt="Bulk Content Sync" width="800" height="222"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;h2&gt;
  
  
  Creating a Log or Event List
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Columns
&lt;/h3&gt;

&lt;p&gt;There’s no perfect recipe, but I usually include a column for each of these values:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Run outcome (success, error, warning, etc.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Outcome details&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Associated item title&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Associated item ID&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Flow run ID&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then, add additional columns &lt;strong&gt;for your specific logging scenario&lt;/strong&gt;, as needed.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 Keep in mind, simplicity is the goal here. Use single-line text columns whenever possible - avoid choice fields or complex data types (lookup columns, etc.)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For ALM scenarios, you may find adding these helpful:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Flow name
&lt;/li&gt;
&lt;li&gt;Solution name&lt;/li&gt;
&lt;li&gt;Environment&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Configuration Tips
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Disable search on the list (advanced settings) or restrict list permissions to only the relevant individuals/audiences&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsuopo38uq5w3pwh9it17.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsuopo38uq5w3pwh9it17.png" alt="Disable search on the list" width="554" height="150"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Index any columns that might be needed for sorting/filtering&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Include a multi-line plain text column, if you’d like to store JSON output&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx0bzh9p88g10cly03ark.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx0bzh9p88g10cly03ark.png" alt="multi-line plain text column" width="666" height="796"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create view(s) and add &lt;a href="https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/column-formatting" rel="noopener noreferrer"&gt;custom column formatting&lt;/a&gt;, if that helps readability&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Examine the list after log entries start to populate - you may think of another field or two worth capturing&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Cloning an Existing List
&lt;/h3&gt;

&lt;p&gt;Assuming custom logging proves useful, you may want to create more lists in the future. You can use an existing list as a template, to speed creation. Some options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://sharegate.com/microsoft-migration" rel="noopener noreferrer"&gt;ShareGate&lt;/a&gt; migration tool&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;Use an existing list&lt;/em&gt; option in the SharePoint UI (under site contents)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9fv330wb15dgbcxcasen.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9fv330wb15dgbcxcasen.png" alt="SharePoint UI" width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Microsoft Lists&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Adding Logging Actions
&lt;/h2&gt;

&lt;p&gt;Once your list is ready, it’s time to add some flow logic. New log entries will be added using a &lt;a href="https://learn.microsoft.com/en-us/connectors/sharepointonline/#create-item" rel="noopener noreferrer"&gt;&lt;em&gt;Create Item&lt;/em&gt;&lt;/a&gt; action.&lt;/p&gt;

&lt;p&gt;There are two general approaches for adding logging steps - both achieve the same result, but have different considerations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Add to Existing Flow(s)
&lt;/h3&gt;

&lt;p&gt;You can sprinkle logging actions within your &lt;strong&gt;existing&lt;/strong&gt; flow logic, utilizing copy/paste.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdq0aubl2694gyzk50yj9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdq0aubl2694gyzk50yj9.png" alt="logging actions" width="800" height="485"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Simple, fast approach&lt;/td&gt;
&lt;td&gt;If the list schema changes, you may need to update (and find) all previously-added actions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No additional licensing cost&lt;/td&gt;
&lt;td&gt;Cannot add additional actions later (like sending notifications) unless done manually&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Can store complex data types, JSON&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Uses existing SharePoint Online connection / reference (if present)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Create Standalone Logging Flow&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Alternatively, you can create a separate flow (HTTP trigger or &lt;a href="https://learn.microsoft.com/en-us/power-automate/create-child-flows" rel="noopener noreferrer"&gt;child solution flow&lt;/a&gt;) to store your logging steps:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk87wf7e01jlcqh1oe80i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk87wf7e01jlcqh1oe80i.png" alt="create a separate flow" width="800" height="526"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once created, invoke it from existing flow(s) as needed:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fepntbaawkc7xlvmznh0e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fepntbaawkc7xlvmznh0e.png" alt=" invoke it from existing flow" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Much easier to extend later, if needed&lt;/td&gt;
&lt;td&gt;Additional setup time and complexity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Can handle complex data types (HTTP trigger only)&lt;/td&gt;
&lt;td&gt;Requires premium licensing (HTTP trigger only)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One logging flow can be shared by multiple solutions / flows&lt;/td&gt;
&lt;td&gt;Need to collect and send parent workflow context&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Option to run asynchronously - won’t hold up parent flow&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 Don’t forget a &lt;strong&gt;Response&lt;/strong&gt; action (for HTTP trigger flows) or &lt;strong&gt;Respond to Power Apps or Flow&lt;/strong&gt; action (for child solution flows)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Other Notes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Consider disabling retry policies whenever a standalone logging flow gets invoked or a Create Item log action is called. You don’t want to hold up a parent flow run in the unlikely event that logging hits a snag.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For logging hierarchical flow outcomes, consider creating an entry for when the parent begins, ends, and every child iteration in between. Store a shared identifier (like parent flow run ID) to help group entries later.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmcihncze8zno8kb0gvxq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmcihncze8zno8kb0gvxq.png" alt="logging hierarchical flow outcomes" width="800" height="281"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Calculating overall flow run duration, error and success totals, etc. can add additional value to the last log entry for a given flow run. Don’t spend the time adding that logic unless the extra insight is worth it, however.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can use the logging technique described on this page to store errors / exceptions only, or you can include successful outcomes and other event types, depending on the situation.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>powerplatform</category>
      <category>powerautomate</category>
      <category>sharepoint</category>
      <category>automation</category>
    </item>
  </channel>
</rss>
