My previous post just now was on the topic of Microsoft Flow, the workflow-style application that allows you to perform “if this, than that” type logic linking different applications together. Basically, Flow provides you a way of automating actions by having a set of triggers, some logic and using API’s to perform actions. It wraps all of this in a nice and easy to use user interface, making this functionality that pretty much everyone can leverage. Power to the business!
In this post I want to show how I created a real-life flow to automate a process for expense declarations. The process is a really simple one:
- We’ve created an Expense Declarations library on SharePoint.
- We added a new Expense Declaration content type which has an Excel template for the declaration.
- We also added a boolean field “Ready” which signals the expense form is ready for processing.
- The form should now be sent to the person handling the declarations. Of course it would be even better to send it directly into an API, but unfortunately that’s not available for us.
As said, the basic elements of a flow are a trigger, some logic (conditions) and actions. Let’s go!
Defining the trigger
To create the flow, we head over to flow.microsoft.com and after signing in (or up), we begin with a blank flow. The first action we add is “When an existing item is modified”. This is because:
- The “created” action will fire off immediately after the form was created and is probably still empty.
- The action for a modified document will not contain the correct information, our Ready field will not be present. This is supposed to be changed in the future though.
So we set up the existing item modified trigger:
Note: because your library is a library, it might not show up in the suggestions. That doesn’t mean you cannot use it though, just type in the name and you should be good to go.
Creating a condition
Next, we need to set-up the condition. We want the declaration to be sent only when the Ready field is set to Yes. Because the value is stored as a boolean, the field value sent to flow will be “true”. You can check that by running your flow (trigger it from SharePoint after saving) and clicking the trigger to inspect the values coming in:
Check out the value for Ready:
So now the most straightforward thing to do would be to set up the condition like this:
But this does not work. I suspect the engine will handle “true” as a string which would give a comparison of “true == ‘true'” which is false. To fix this, put the editor in advanced mode and use the following expression: @equals(triggerBody()?[‘Ready’], bool(1)).
bool(1) will convert to ‘true’ so our comparison should now be “true == true” whenever the Ready field is set to Yes in SharePoint.
Setting up the action
Lastly, I created a simple e-mail action to send out a notification to the correct user. Ideally I wanted to add the file contents to that e-mail but that isn’t possible (yet) due to the “item modified” trigger which is not aware of a file. I tried several ways to get around this but didn’t succeed. You can probably get there with something customized like an Azure Function, but for now the plain old e-mail will do. Simply set-up an Office365 e-mail action to send out a mail to inform the correct user a new declaration has been added, paste in the link to the library and you’re set.
When I find a way to attach the file to the e-mail or send a direct link to the file, I’ll update this post!