<?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: Ashwin Ganesh Kumar</title>
    <description>The latest articles on DEV Community by Ashwin Ganesh Kumar (@ashes2076).</description>
    <link>https://dev.to/ashes2076</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%2F1042540%2Fa40bd2b0-f762-4f23-a12c-2845de097244.jpeg</url>
      <title>DEV Community: Ashwin Ganesh Kumar</title>
      <link>https://dev.to/ashes2076</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ashes2076"/>
    <language>en</language>
    <item>
      <title>Enabling Pipelines: Easier than ever</title>
      <dc:creator>Ashwin Ganesh Kumar</dc:creator>
      <pubDate>Wed, 20 Mar 2024 12:01:55 +0000</pubDate>
      <link>https://dev.to/ashes2076/enabling-pipelines-easier-than-ever-2k7m</link>
      <guid>https://dev.to/ashes2076/enabling-pipelines-easier-than-ever-2k7m</guid>
      <description>&lt;p&gt;Application Lifecycle Management (ALM)strategy is a topic that you keep encountering more if you are building applications/automations in Power Platform.&lt;/p&gt;

&lt;p&gt;There are multiple ways to implement ALM for power platform. But I want to focus on &lt;a href="https://learn.microsoft.com/en-us/power-platform/alm/pipelines"&gt;deploying solutions using pipelines&lt;/a&gt;. So far, you must be an admin to set up and manage a pipeline. This process requires the admin to install the power platform pipelines and setup pipelines for the end user to implement them.&lt;/p&gt;

&lt;p&gt;But now we can create &lt;a href="https://learn.microsoft.com/en-us/power-platform/alm/set-up-pipelines#create-a-personal-pipeline-using-the-platform-host-preview"&gt;personal pipelines&lt;/a&gt; using the platform host. At the time of writing this piece, it is still a &lt;strong&gt;preview feature&lt;/strong&gt;, so please &lt;strong&gt;don't&lt;/strong&gt; do this in your production environment. This feature stimulates you to skip the manual export/import process, and that is a good step in enabling citizen developers to implement ALM practices.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to implement it?
&lt;/h2&gt;

&lt;p&gt;For my test use case, I have two environments, one being Dev, and the other being Test. I have a solution that contains a demo app.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc97q9wilcsxfckv124mg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc97q9wilcsxfckv124mg.png" alt="Simple Solution" width="800" height="262"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you select the export solution button, I see a card about the deployment process &lt;strong&gt;(preview)&lt;/strong&gt;..&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwb1rr7b9of3mwo44w5yr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwb1rr7b9of3mwo44w5yr.png" alt="Deployment Process" width="323" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you are doing it for the first time it takes a few seconds for the setup to be completed. Once the setup is complete, you see a screen which you might already be familiar with (if you have used power platform pipelines before).&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdbw0gligr1zu7t4kke4y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdbw0gligr1zu7t4kke4y.png" alt="Screen Pipeline" width="800" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we are ready to create a new pipeline for our use case. Here you can select your target environment, for now you can only select &lt;strong&gt;one target environment&lt;/strong&gt;. You can filter the target environments in terms of Your role, Data platform, and Environment type.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmgyma8b04ghowihklfnh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmgyma8b04ghowihklfnh.png" alt="Create pipeline" width="314" height="580"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After creating a pipeline, the next step is to then deploy it to our target environment.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F94cl9wn79eaq14v8c1or.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F94cl9wn79eaq14v8c1or.png" alt="Test pipeline" width="800" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can also schedule our deployment if needed. After this step it first validates the solution and gives us a summary in which you can add some deployment notes for future references.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhp6ywep0mbh6891cc6wo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhp6ywep0mbh6891cc6wo.png" alt="Summary" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the deployment is succesfull, you can find your solution(managed) in the target environment. You can also manage your own pipelines, which is a model driven app. It contains essential information like the setup, run history, artifacts etc.&lt;/p&gt;

&lt;p&gt;But this preview feature does come with some limitations (at least for now):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We cannot extend the personal pipelines.&lt;/li&gt;
&lt;li&gt;We can select only one target environment.&lt;/li&gt;
&lt;li&gt;Pipelines remain personal to you and can't be shared.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Personal pipelines do enable citizen developers to move away from the manual export/export process. Even though it's a preview feature, it has enormous potential.&lt;/p&gt;

</description>
      <category>powerplatform</category>
      <category>pipelines</category>
      <category>powerapps</category>
      <category>powerfuldevs</category>
    </item>
    <item>
      <title>Bulk Deletion: Sharepoint Items</title>
      <dc:creator>Ashwin Ganesh Kumar</dc:creator>
      <pubDate>Wed, 10 Jan 2024 11:52:12 +0000</pubDate>
      <link>https://dev.to/ashes2076/bulk-deletion-sharepoint-items-5f0n</link>
      <guid>https://dev.to/ashes2076/bulk-deletion-sharepoint-items-5f0n</guid>
      <description>&lt;p&gt;Recently, I encountered a daunting challenge: clearing thousands of records from an existing Sharepoint list. The typical UI deletion method was impractical for such a massive task, sparking my quest for a more efficient solution. In this blog, I'll share the three methods I experimented with in my test environment, offering an insight into the pros and cons of each. Whether you're facing a similar hurdle or just looking to enhance your Sharepoint management skills, these strategies might pave the way for smoother, more effective list handling. Let's explore these solutions together.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Power Automate: Delete Item&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;This method is very simple and staright forward. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vNMskM2U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0gft03eia5ff0z0xlswl.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vNMskM2U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0gft03eia5ff0z0xlswl.jpeg" alt="Delete Item" width="715" height="883"&gt;&lt;/a&gt;&lt;br&gt;
This method should work just fine, but  it's important to be aware of its limitations and potential impacts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Limited Retrieval Capacity:&lt;/strong&gt;
The &lt;strong&gt;Get Items&lt;/strong&gt; action can only get 5000 items at a time. So then you might want to run the flow multiple times or place the &lt;strong&gt;Get Items&lt;/strong&gt; in a loop to get more items.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Call Consumption:&lt;/strong&gt; 
As stated in the &lt;a href="https://learn.microsoft.com/en-us/power-platform/admin/api-request-limits-allocations"&gt;documentation&lt;/a&gt;, this will consume a lot of API calls and might hamper your other processes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speed:&lt;/strong&gt;
It deletes items individually, and the flow takes a long time to run.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  &lt;em&gt;Power Automate: Sharepoint Rest API&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;This method is a bit complex and involves a lot of steps. We are going to make use of &lt;a href="https://learn.microsoft.com/en-us/sharepoint/dev/sp-add-ins/get-to-know-the-sharepoint-rest-service?tabs=csom"&gt;Sharepoint Rest API&lt;/a&gt;. With the help of google I was able to find an &lt;a href="https://www.codesharepoint.com/sharepoint-tutorial/batch-crud-operation-using-sharepoint-rest-api#delete-list-items-using-$batch"&gt;informative blog on batch calls&lt;/a&gt;. There you will find loads of information about &lt;strong&gt;CRUD&lt;/strong&gt; operations using &lt;strong&gt;$Batch&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;From the &lt;a href="https://learn.microsoft.com/en-us/sharepoint/dev/sp-add-ins/make-batch-requests-with-the-rest-apis"&gt;docs&lt;/a&gt;, we can get code snippet of how a batch DELETE request could look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST https://fabrikam.sharepoint.com/_api/$batch HTTP/1.1
Authorization: Bearer &amp;lt;access token omitted&amp;gt;
Content-Type: multipart/mixed; boundary=batch_7ba8d60b-efce-4a2f-b719-60c27cc0e70e
Host: fabrikam.sharepoint.com
Content-Length: 647
Expect: 100-continue

--batch_7ba8d60b-efce-4a2f-b719-60c27cc0e70e
Content-Type: multipart/mixed; boundary=changeset_efb6b37c-a5cd-45cb-8f5f-4d648006e65d

--changeset_efb6b37c-a5cd-45cb-8f5f-4d648006e65d
Content-Type: application/http
Content-Transfer-Encoding: binary

DELETE https://fabrikam.sharepoint.com/_api/Web/lists/getbytitle('OldList') HTTP/1.1
If-Match: "1"

--changeset_efb6b37c-a5cd-45cb-8f5f-4d648006e65d--
--batch_7ba8d60b-efce-4a2f-b719-60c27cc0e70e
Content-Type: application/http
Content-Transfer-Encoding: binary

GET https://fabrikam.sharepoint.com/_api/Web/lists HTTP/1.1

--batch_7ba8d60b-efce-4a2f-b719-60c27cc0e70e--
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now let's try to replicate this in our flow.&lt;/p&gt;

&lt;p&gt;I first want to store the values of the site address and listname in a variable. And I also intialize varItemCount which we will use later in the flow to loop through the lists and perform the delete action till the list is empty.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CCuhZxAC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/toh9v1qd8z6oxayr0s9x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CCuhZxAC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/toh9v1qd8z6oxayr0s9x.png" alt="Essential Variables" width="740" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we want to split the code snippet into chunks to formulate our request to the sharepoint API. Firstly, let's make a changset request.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--q9qK1W2L--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g76iwl8hbrvvryijel2a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--q9qK1W2L--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g76iwl8hbrvvryijel2a.png" alt="Changeset Request" width="670" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After which we will use the &lt;strong&gt;Get items&lt;/strong&gt; action to retrieve the top 1000 items from our list. Now we will replace the &lt;strong&gt;Id&lt;/strong&gt; in the changeset request to the &lt;strong&gt;Id&lt;/strong&gt; from the &lt;strong&gt;Get items&lt;/strong&gt; action.&lt;/p&gt;

&lt;p&gt;Now we could use the &lt;strong&gt;Send an HTTP request to Sharepoint&lt;/strong&gt; to perform our batch &lt;strong&gt;DELETE&lt;/strong&gt; operation using the &lt;strong&gt;POST&lt;/strong&gt; method&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ab1WSL9R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/czm5584xevy95ny70mi4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ab1WSL9R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/czm5584xevy95ny70mi4.png" alt="HTTP Request" width="741" height="675"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I tested this method with a sharepoint list which had around 2350 records and the time it took finish the operation was around 3 minutes. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Efficiency:&lt;/strong&gt; We can handle larger batches of deletions more effeciently than individual item deletion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control:&lt;/strong&gt; We have more control and flexibility.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Complexity:&lt;/strong&gt; Requires the understanding of Sharepoint REST API and JSON. It costs me some digging to understand the logic.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Power Automate: Graph API&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;I explored this method more out of curiosity. Recently I came across multiple GraphAPI contents, and I wanted to see if I could also do some &lt;strong&gt;POST&lt;/strong&gt; operations with Graph. The simple answer is &lt;strong&gt;YES&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;To perform an operation using Graph we need to understand how to work with Graph API. &lt;a href="https://learn.microsoft.com/en-us/graph/api/resources/sharepoint?view=graph-rest-1.0"&gt;Microsoft documentation&lt;/a&gt; was a good starting point and also this &lt;a href="https://www.lewisdoes.dev/blog/taking-a-look-at-graph-explorer/"&gt;blog&lt;/a&gt; from &lt;a href="https://www.linkedin.com/in/lewis-baybutt-8628171bb/"&gt;Lewis&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To get your own hands with Graph, go to &lt;a href="https://developer.microsoft.com/en-us/graph/graph-explorer"&gt;Graph Explorer&lt;/a&gt;. Here we are able to play with sample data provided by Microsoft or authenticate with our tenant(provided we have rights) to run queries.&lt;/p&gt;

&lt;p&gt;In our case, we need to have permission to access the tenant, the sharepoint site and the list, and also perform delete operation via the Graph API.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Register an application with azure AD: &lt;br&gt;
First we create a new app registration from Azure portal. In the &lt;br&gt;
API permissions tab, we add delegated permissions for the Microsoft Graph API(&lt;strong&gt;Sites.ReadWrite.All&lt;/strong&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Flow Steps&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Now we create an instant flow with manual trigger.&lt;/li&gt;
&lt;li&gt;Initialize Variable for the token URL. (&lt;a href="https://login.microsoftonline.com/%7BTenantId%7D/oauth2/v2.0/token"&gt;https://login.microsoftonline.com/{TenantId}/oauth2/v2.0/token&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;HTTP action to receive the token.
For the body part of the HTTP action.
&lt;code&gt;client_id=your_app_client_id&amp;amp;scope=https%3A%2F%2Fgraph.microsoft.com%2F.default&amp;amp;client_secret=your_app_secret&amp;amp;grant_type=client_credentials&lt;/code&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GMIptfCJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m8ft5497a5zcoeuvm06s.png" alt="HTTP - Get Token" width="603" height="619"&gt;
A secure way to use the app credentials would be to store them in a key vault and use the Azure key vault action in the flow to retrieve them.&lt;/li&gt;
&lt;li&gt;After getting the token we add another HTTP action to retrieve the items from the list that we want to delete.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LPKtj-EK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kwzl5k2bxvowly6j5oc6.png" alt="Retrieve items" width="590" height="601"&gt;
For the URL (getting the first 500 items) 
&lt;code&gt;https://graph.microsoft.com/v1.0/sites/{site-id}/lists/{list-id}/items?top=500&lt;/code&gt;
For the headers we need to fill the key as &lt;strong&gt;Authorization&lt;/strong&gt; and the value as &lt;strong&gt;Bearer {your_access_token}&lt;/strong&gt;. You can retrieve the token from the output of the previous step.&lt;/li&gt;
&lt;li&gt;We now add &lt;strong&gt;Parse JSON&lt;/strong&gt; action to parse the outputs from our previous step to get all the retrieved items.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--owMs8-ef--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vru05dxtmdv4dgi8nizu.png" alt="Parse Json" width="611" height="617"&gt;
&lt;/li&gt;
&lt;li&gt;Now we want to run through every individual item to do the delete operation, for which we create an apply to each action and pass the id output from the Parse Json step. &lt;/li&gt;
&lt;li&gt;Within the apply to each we add a HTTP action to perform the &lt;strong&gt;DELETE&lt;/strong&gt; method to our retrieved items from the list.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--evz2W_M8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4d6pxja887a13wqah5gr.png" alt="HTTP Delete" width="592" height="589"&gt;
URL: &lt;code&gt;https://graph.microsoft.com/v1.0/sites/{site-id}/lists/{list-id}/items/@{items('Apply_to_each')?['id']}&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Even though this method works we still have to keep certain things in mind:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Premium:&lt;/strong&gt; We are using the HTTP connector which is a premium connector in Power Platform.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graph API access:&lt;/strong&gt; We need to get access to our tenant to perform queries and operations with Graph API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;App Registration:&lt;/strong&gt; We need appropriate rights in azure to create app registrations and setting the right API permissions for Graph.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate limits:&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/en-us/graph/throttling-limits"&gt;Graph API&lt;/a&gt; has rate limiting, that might slow down or interrupt deletion for large batches.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In this method I haven't tried batching using graph API, but this is something I would like to explore.&lt;/p&gt;

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

&lt;p&gt;In conclusion, managing large-scale deletions in Sharepoint can be a complex task, but with the right tools and knowledge, it can be simplified and made more efficient. In this blog, we explored three distinct power automate methods: Power Automate Delete Item, Sharepoint REST API, and Power Automate Graph API. Each method has its strengths and limitations.&lt;/p&gt;

&lt;p&gt;The Power Automate Delete Item is straightforward and user-friendly but is limited by its retrieval capacity and speed. The Sharepoint REST API offers more efficiency and control, especially for larger batches, but requires a deeper understanding of Sharepoint's inner workings. Lastly, the Power Automate Graph API provides a modern approach, albeit with considerations such as premium connector usage and API rate limits.&lt;/p&gt;

&lt;p&gt;Your choice of method will depend on your specific needs, the size of the data, and your comfort level with Sharepoint and API interactions. Remember, efficient Sharepoint management is not just about knowing what tools are available but also understanding the nuances of each to make an informed decision.&lt;/p&gt;

&lt;p&gt;Feel free to experiment with these methods in your environment and see which works best for your situation.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
