Scenario:
As a University, we have a number of Request/Approval processes that run per specific cycles (e.g.: Terms, of which we have 4 per year, 3 months each). We've been using Flow and Approvals and it has helped a lot, but we still have many cases where Approvers ignore or forget to Approve Requests, so we'd like to add reminders and also a deadline at which point a "default" outcome (Rejected) is applied.
Constants:
- All requests have one single Approver
- There is a fixed deadline per request cycle (Term 1 deadline is March 30th, Term 2 deadline is June 30th, etc.)
- Requests not acted upon by the deadline are Rejected
Process:
- User submits a request
- Approval is sent to Approver
- Approver gets a reminder every X days until 1 day before the deadline
- One day before deadline, Approver gets a "Final Reminder" message indicating that it will be Rejected if no action taken
- On deadline, request is Rejected and Flow is terminated
So, I started with this Flow of the Week as inspiration and came up with the Flow shown in THIS VIDEO.
It works, but there are a few issues (some of these are mentioned in that video, others are not):
- The Reminder emails continue even after the "Final Reminder" email is sent (more noticeable with the accelerated timeframe I'm using for testing, may not be an issue in prod since reminder cycles will be more like several days up to a week)
- The Approval is still "out there" in the Flow Approvals center, leading the Approver to believe they can still take action (ie: There is no mechanism to "recall" or "cancel" an Approval)
- Having the Flow "Fail" is not ideal from a diagnostic standpoint. That is, it would not be readily apparent which Flows just hit the deadline and which actually Failed (potentially needing intervention and/or updating of the Flow)
- The Timeout for the Approval must be set to a static duration. Ideally, having a "Deadline" option would be perfect, but, failing that, the ability to use Dynamic Data in that Timeout field would suffice (ie: the duration could be calculated at runtime as the number of days between the current date and the deadline).
I also think that my solution is overly complicated and, if it's possible to have compound conditions (e.g.: "var_ApprovalDone is False AND nowUTC() < ApprovalDeadline"), that would simplify things a bit