Recreating Date Based Alerts with Flow.

With the release of D365 for Operations one of the most often requested missing features was alerts.  Flow is often mentioned as a replacement and triggers for D365 for Operations – coming in the near future – will provide a wealth of functionality compared to the alerts of Ax 2012.

That said, they can take a bit more work to get things going, like a past due date alert for a purchase order line.

Let’s take an example – I want to send an email message to my team for every purchase order line that is more than 5 days late per our requested receipt date.

First things first – you’ll need to sign up for Flow

Once you’ve done that, click on ‘My flows’ and ‘Create from blank’

In the flow designer, give the flow a name –

Then from the services and triggers list, select Schedule. This will allow us to run our flow on a recurring basis – nightly for example.

Specify the frequency and interval, and use the advanced options to pick a specific start time if necessary.

Next, we will get records from D365. Click on ‘New step’ and select ‘Dynamics 365 for Operations- Get records’

You’ll  be asked to sign in if you have not used this action before. Once signed in, select the D365 instance you want to connect to, and then select the entity ‘PurchaseOrderLines’

Click ‘Show advanced options’. We will be entering a filter.

Our filter will have two parts – selecting only open lines, and then filtering on the requested delivery date.

The purchase order status field is an enum and requires a little extra work to filter on. The format required is

FieldName eq Microsoft.Dyanmics.DataEntities.Enum’Value’

Which equates to

PurchaseOrderLineStatus eq Microsoft.Dynamics.DataEntities.PurchStatus’Backorder’

‘eq’ is the  expression for equality (see the full list here – )

The date field is a little tricky. Something not immediately obvious with Flow is that you can use a lot of the same functionality as LogicApps even though it is not exposed on the designer. So to calculate our date (today – 5) we can make two LogicApp API calls.

The utcnow function will return the date & time as of when the Flow is executed.  We pass one parameter – the format of the date we want returned to us.

We pass the result of the utcnow function call to adddays, which will add – or subtract – the specified number of days to the date it is give. And again, we pass a date format.

RequestedDeliveryDate lt @{adddays(utcnow(‘yyyy-MM-dd’), -5, ‘yyyy-MM-dd’)}

The ‘lt’ expression gives us ‘less than’ condition.

Enclosing the above in @{ …} tells flow that these are function calls to be executed.

So our complete filter expression looks like –

PurchaseOrderLineStatus eq Microsoft.Dynamics.DataEntities.PurchStatus’Backorder’ and RequestedDeliveryDate lt @{adddays(utcnow(‘yyyy-MM-dd’), -5, ‘yyyy-MM-dd’)}

Next, we add an email action. I’m using o365, but there a multiple methods to send an email. You could also send a text message using Twillio, tweet, etc.

Click in one of the fields and notice the dynamic content displayed on the right-hand side. Click ‘See more’ to reveal all fields from our entity.

Note what happens when you click on a field. Our send action is automatically embedded within a ‘Apply to each’ loop – this will iterate over all the records we select from D365, and send one email for per past due purchase order line.

Compose you subject and body using the dynamics content, mixed with plain text, save & run!

When you run the flow manually, or from the info icon on the ‘My flows’ page, you can view the execution history and trouble shoot any errors.

Useful references –

OData Filter Expressions

LogicApp API reference

Date Time Formatting

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s