I have many requirements over the years to send email reminders based on date fields in SharePoint lists. One way of accomplishing this task when using a SharePoint Designer workflow was to use a series of "wait until" actions. This technique is not well suited for Flow - a Flow will not "run" for more than 30 days. Any Flow that is still running after 30 days will be cancelled. In many cases that I have encountered, the reminder will need to be sent more than 30 days after an item has been created or modified.
If you have been creating SharePoint Designer workflows and are now using Flow, you'll find that Flow often requires you to think differently about how you approach issues - this is no exception. On way of attacking this issue in Flow is by running a Flow on a schedule which looks for items in your list that meet the conditions for sending a reminder email. When it finds them, send the appropriate email.
Here is my scenario - you have a SharePoint list where your company keeps track of service contracts on equipment used in the business. At 30 days before the contract expiration, you want to send an email to the POC in your company reminding them that the contract is expiring. One week before expiration, you want to send a second more urgent email to the POC.
My SharePoint list contains the following columns:
Now for the Flow...
My Flow starts with a Recurrence trigger that runs once a day. The Flow starts and stops once a day and is not subject to the 30 day limitation on Flow durations.
Next, I retrieve items from my Contracts list but I don't want to retrieve all the items - just the ones that meet my criteria. Technically, I could retrieve all items in the list and use a condition to see if an email should be sent. One big reason not to do this is that if you have a large list, Get Items may not return all of your list items.
To filter what I that I get back from Get Items, I used an OData filter. More information on OData filters can be found here.
My Odata filter looks like this:
Translated, it means that I only want items where the expiration date is 30 days from today. Also, please note the date formatting (the last paramter). The reason for the formating is so that the dates I am using are in the same format. Unless they are formatted in the same manner, my filter condition will never be true. The format I am using matches the SharePoint date format.
Once I retrive the items, I loop through them sending each a reminder email.
I finish out my Flow with another Get items action and another send email action. The primary difference between the two Get Items actionsis that I now only want items that expire 7 days out.
Here is a screen shot of my Flow - start to finish:
Thats it!