Sunday, 4 October 2026

Add an Unknown Number of Email Attachments to a Planner task


A common way to  triage a shared inbox is to create Planner tasks for each email that comes in, using a Power Automate flow.

The method for doing that is straightforward because there is a Create a task step for Planner:

A screenshot of the Create a task step in Power Automate

There is no option to add an attachment using the Create a task step so if the email has an attachment you need to add to your Planner task how do you do it? 

Planner doesn't allow you to upload attachments to a task directly, you need to provide a URL for it, which means first storing it to SharePoint or OneDrive.

Now, if there is a single attachment this is quite simple to do in Power Automate once you know how.  You can run an Apply to each loop using the Attachments from the trigger as the value, then use a Get Attachment and a Create file step inside the loop to save the file:

A screenshot of the Apply to each step in Power Automate

The Get Attachment step:

A screenshot of the Get attachment step in Power Automate

The Create file step:

A screenshot of the Create file step in Power Automate

Then, to add that URL to the Planner task, use an Update task details step which allows you to add attachments or checklists elements:

A screenshot of the Update task details step in Power Automate

(This is not the same as an Update a task step which - somewhat confusingly - allows you to update other elements of the task but not attachments or checklists. No, I've got no idea why they're separate steps either. Just make sure you use the Update task details step for this.)

You need to provide a name for the attachment (the Reference Alias, which you can take from the name of the attachment if you want), a URL for the attachment (the References Resources link, which is a link to the file you created in Create a file) and select a file type (from the Reference Type dropdown, which you can infer from the name of the attachment). 

But what happens if there is more than one attachment? 

The Update task details step allows you to add multiple attachments but that only works if you know how many there are. 

If you don't know how many attachments might be in an email, you need to create an array of attachments and add that array to the task as one item instead.

Adding an array of attachments

The good news is that we already have most of what we need for this solution. We just need to create an array variable at the top of the flow:

A screenshot of the Initialize Planner Attachment variable step in Power Automate

And then add the attachments to that variable in the Apply to each loop:

A screenshot of the Apply to each step in Power Automate with the Append to Planner Attachments variable step added to it

As usual with arrays we need to append the attachment in JSON notation. That takes the form:

{
  "alias": "[attachment name]"
  "resourceLink": "[URL]"
}

We will use the Name of the attachment for the alias and the Path of the file from the Create file step for the resourceLink in our Append step:

A screenshot of the Append to Planner Attachments variable step in Power Automate

Every loop of the Apply to each loop will add an additional attachment to the array. 

After the loop has finished, we create the Planner task as before and then in the Update task details step we click the Switch to input entire array option:

A screenshot of the Update task details step in Power Automate with the Switch to input entire array option highlighted

And use the Planner Attachments variable as the value:

A screenshot of the Update task details step in Power Automate showing the alternative array option for references

Now your Planner task will have multiple attachments, regardless of whether the email has 1, 3, 5, or more attachments.


Note that at the time of writing the Planner limits state that the "Maximum references on a task" - i.e. attachments, for the purposes of this discussion - is 15, so if you try to add more than that you'll get an error of some sort. 

If that might be a realistic problem you'll need to implement a different strategy such as storing files in a SharePoint folder and referencing that folder, or alerting you to deal with the problem, or whatever solution is right for you.

Sunday, 20 September 2026

Add a button to a SharePoint list item to start a Power Automate workflow

 

Triggering a Power Automate workflow from a SharePoint list item is a common requirement.

It's easy enough to trigger a workflow when an item is modified using a trigger condition so it only fires when a specific field changes - we'll cover that below - but adding a button makes the process more user friendly and gives you the button text to tell the user what the button does. This is preferable to just a column header that may not make it clear to the user that changing the value will trigger a flow. 

We're going to create a button which will change the value of a Yes/No column, and that will trigger a workflow. In my use case I want the workflow to generate a document so that's what the column header and button refer to, but you can modify it for your needs.

  1. Create a Yes/No field called Run Flow.
  2. Create a single line text field called Generate. This will become the button.
  3. Click the arrow next to the Generate column header, go to Column settings > Format this column and set the JSON to:

    {
      "$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json", 
      "elmType": "button",
      "txtContent": "Generate document",
      "customRowAction": {
        "action": "setValue",
        "actionInput": {
          "RunFlow": 1
        }
      }
    }


    This JSON sets the element type to button, gives the button a label of "Generate document", and when the button is clicked it changes the Run Flow Yes/No column to Yes.

    To change the:
     - button text, modify the txtContent value from "Generate document"
     - column, modify the actionInput value from "RunFlow"

    Note that the column I created was called "Run Flow" but the actionInput is changing "RunFlow". That's because in line with best practise I removed the space when I created the column and added it back in afterwards so the column header is more human readable. The JSON needs the original column name (RunFlow) not the name that was modified after the column was created (Run Flow).

  4. Create a flow which triggers when an item is modified. Set the trigger condition to be:

    @equals(triggerOutputs()?['body/RunFlow'], true)

  5. This workflow will now only trigger when the RunFlow field is set to 1. When you click the Generate document button, RunFlow field is set to 1 so the workflow will run. 
That's all there is to it. 

If you don't want the workflow to run every time someone changes the item from now on, make sure your workflow changes the value of RunFlow back to 0.

For workflows that might take a little time to run, such as a document generation or approval flow, I like to add a "Flow Running" Yes/No column that is switched on by the workflow and then switched off once the work is compete. Combined with some colour formatting of the row for a nice visual cue, this provides an easy way for the user to see when the flow has finished.

Sunday, 5 July 2026

Pull attributes from a People column into another SharePoint column


(This post was inspired by this deep dive on Annabel Treshansky's excellent blog)

Sometimes in a SharePoint list you want to display a person's title, department, email address, or other attribute which you can find in their Entra record.

If you want to be able to filter, group or sort using these attributes then you'll need to use a Power Automate flow to pull the data from their user record and populate another column.

But if you just need a read-only field with the data you can extract the attributes and render them in a text field using JSON.

Here is an example list with a Person column (My Colleague) and a single line text field (Department). We want to automatically show the Department information for whoever is selected in the My Colleague column:


Click the arrow next to the Department column header and select Column settings > Format this column:


In the Format view click Advanced mode:

In the JSON text box paste the following JSON and click Save:

{

   "$schema": https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json,

   "elmType": "div",

   "txtContent": "[$MyColleague.department]"

}

The Department value will now be shown in the column:


The key part in the JSON is this line:

"txtContent": "[$MyColleague.department]"

Note the $ sign at the start of the "MyColleague" column name - without that the JSON won't find the right column and therefore won't find the attribute. You can pull out a lot of data using this, including email, title, department, and lots more. 

Because this information is displayed when the screen is rendered it's effectively formatting rather than data, so it can't be downloaded as part of an export, but it's very useful for display purposes and you can also show these attributes in the SharePoint form if you're formatting the header or body with JSON.