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


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.

Sunday, 14 June 2026

Reliably embed an image from SharePoint into a Power Automate email


If you're sending out emails using Power Automate and you want to embed an image from SharePoint, you need a clean link.

The basic HTML to embed the image is nice and simple:

<img src="image-url">

But getting a link from SharePoint can be tricky. You can't just copy the URL or click Copy Link because that comes with a whole bunch of possible tokens which can make the URL very long and unwieldy. 

More than that though, the tokens can include permissions and that can prevent your workflow from accessing the file. What you want is a simple URL that points directly to the file so that Power Automate can use it. 

It turns out there is a simple way to get that URL, it's just slightly hidden away. 

Select your image file in the library and click ... > Details to open up the Details side bar on the right hand side. Scroll all the way down to the bottom to find the Path information.

Click the Copy icon to get a clean URL directly to the file::


Use that URL in your HTML. Remember the basic HTML from earlier?

<img src="image-url">

That was taken from the Microsoft Learn page on this subject and they have forgotten something very important: Adding ALT text.

Making your emails accessible for people with sight issues should be something you do as standard. It's a tiny tweak that looks like this:

<img src="image-url" alt="ALT TEXT">

It's also worth adding in sizing if you need to make sure that an an image always renders as you want it to, and that is equally simple:

<img src="image-url" width="x" height="y" alt="ALT TEXT">

And there you go: a simple method for getting a simple URL for embedding images in emails.