SOLVED

Sharepoint Library notify when there are items expiring within the next 7 days

Copper Contributor

Hi all, 

 

I've search everywhere and I cannot seem to find an answer to my question.  

 

I have a document library (Not a list) on my sharepoint site and I'd like to set up a flow to notify me if there are items Expiring at any point in the next 7 days.

 

I've got the flow to remind me x days before an item expires, but I want to extend this to search all items and if there are any items that will be expiring in the next 7 days(so if it expires on Days, 1,2,3,4,5,6 or 7) to email me a list of those items. 

 

I know the solution will be very simple, but it has eluded me so far.  

 

For reference, my Document library has a column called (Expiry Date) and using a list to store the documents is not is not suitable for our use case. 

 

Any help would be enormously appreciated.  

20 Replies
best response confirmed by Tom_By (Copper Contributor)
Solution

@Tom_By yes you can do this using an array variable as shown in the screenshots below. In my Documents library there are 4 documents that are due for review in the next 7 days:

0-SP-Library.png

 

The flow runs at 13.00 every day and the first action is to initialize an array variable. When doing date comparisons you need to have the date format as yyyy-MM-dd. So next we add 2 compose controls, one for today's date and one for the date 7 days ahead and format them a shown:

 

1-Flow.png

 

Next, add a get files (properties only) action. But we only want to bring those items back from the library where the NextReview date is greater than or equal to the ComposeToday and less than or equal to the Compose7Days. So in the Filter Query field add NextReview ge '{output of the ComposeToday}' and NextReview le '{output of the Compose7days}'

 

So that we can have them in order in the email we add NextReview into the Order By field:

 

2-Flow.png

 

Next, add an Apply to each and select value from the dynamic content. I want to convert the NextReview date back to UK format but you might not need these next steps:  inside the apply to each add a compose control and add the NextReview column. Then add another compose and format it as shown.

 

Next add an append to array variable and add the name and review date - I've used the output from the ComposeFormatDate compose for this:

 

3-Flow.png

 

Next, - outside the apply to each - if you want to you can add a create html table action and add the array.

 

Finally send the email and use the output from the create html table action.

 

4-Flow.png

 

The email looks as shown below. It is possible to add another compose action to add formatting to the table but I've not done that on this occasion.

 

5-Email.png

 

Rob
Los Gallardos
Microsoft Power Automate Community Super User

@RobElliott 

 

I think this suggestion will work,  however I am encountering an error when inputting my details into the filter Query - "Column 'NextReviewDate' does not exist. It may have been deleted by another user..."

 

I've tried Inserting _x0020_ between words with no success.  Also tried copying the column title exactly as it appears in column editor, with no joy either.  

 

I cant check if everything else works as its getting stuck and failing early on.  

 

Any ideas? 

@Tom_By go to library settings and select the column. Then in the address bar look at the end at what the Field= is, that's what you need to have in the flow.

 

Rob
Los Gallardos
Microsoft Power Automate Community Super User

Wow, that was a quick reply.

Sadly this has not worked either. I still get the same behaviour.

You'll need to post screenshots of your flow. However the issue appears to b e with the column name. If you have renamed the column that doesn't rename the internal name. That's why I suggested going to the column settings and copying the internal name of the column after Field=

 

 

I've managed to get this to work now. I deleted the flow and rebuilt it and it works perfectly.

thank you so much for all of your help.
Sharepoint newbie here....

I have used this to successfully create an alert when files are out of date, thanks for the guide. You mention that it's possile to format the email by adding another compose action. Sorry for what is probably a stupid question, but could you explain how to do this please?

Thanks in advance!

@oroberts55 you can format the html table by adding the following CSS inside a compose action, changing it to taste:


formattesTable.png

 

You can copy the CSS from the spoiler below:

Spoiler
<style>
table {
border: 1px solid #1C6EA4;
background-color: #EEEEEE;
width: 80%;
text-align: left;
border-collapse: collapse;
}
table td, table th {
border: 1px solid #AAAAAA;
padding: 3px 2px;
}
table tbody td {
font-size: 13px;
}
table thead {
background: #1C6EA4;
border-bottom: 2px solid #444444;
}
table thead th {
font-size: 15px;
font-weight: bold;
color: #FFFFFF;
border-left: 2px solid #D0E4F5;
}
table thead th:first-child {
border-left: none;
}
</style>
@{body('Create_HTML_table')}

Then use the outputs of that compose in your email. Becauase I've also included a company logo in the email I have turned on the code view </> button and added html tags to the email

 

 

formattesTable2.png

 

Rob
Los Gallardos
Intranet, SharePoint and Power Platform Manager (and classic 1967 Morris Traveller driver)

Wow, thanks for the quick reply, particularly to such an old thread! I'll give that a try now and let you know how I get on!

Worked a treat, thanks! I'm only testing at the moment, I get this:

 

oroberts55_0-1689780875468.png

Is there a way to format the dates so that they show as dd/mm/yyyy?

And how do I change the font?

 

Thanks again 🙂

@oroberts55 you'll see in my earlier post that I have the compose renamed to ComposeFormatDate which puts the date into dd/MM/yyyy format which is used in the append to array variable.

@Rob_Elliott 

Sorry, my bad, turns out I hadn't followed the instructoins properly and was just pulling through Expiry Date from the file properties - I've changed it now and it works perfectly.

 

Final question (for now) - how can I change the font of the table so that it matches the rest of the email please? Again, probably very simple for someone who knows what they're doing!

Don't worry, I've got it sorted.
Thanks again for all your help 🙂

@Rob_Elliott 

 

I have everything working as it should, thanks again for your help so far.

I am getting a daily email, but often this is blank as there are no files that are due to expire - I was wondering if there is a way of only sending the email if necessary? i.e. if there are no items that are due to expire then no email is sent?

You can use a Condition for this check. However, I'll offer 2 ways to make it work.
1. Depending on how you have the Array Variable setup, you can check the length of the variable. Use a Compose action with the expression "length(variables('arrayName')). Then in the Condition, If outputs(compose) is greater than 0 | Yes = Send Email, No = do nothing.
2. Add a counter Integer variable that increments inside the Apply to Each. Then in the Condition, If intVariable is greater than 0 | Yes = Send Email, No = do nothing.
email address removed for privacy reasons
We are sorry, the page you requested cannot be found. The URL may be misspelled or the page you're looking for is no longer available.
Sorry for the delay, just tried option 1 and it works a treat, thanks! 🙂

@RobElliott 

Hello, for me the array is not bring all documents inside the due date window only one of them, I reviewed all the workflow and found nothing.... 

1 best response

Accepted Solutions
best response confirmed by Tom_By (Copper Contributor)
Solution

@Tom_By yes you can do this using an array variable as shown in the screenshots below. In my Documents library there are 4 documents that are due for review in the next 7 days:

0-SP-Library.png

 

The flow runs at 13.00 every day and the first action is to initialize an array variable. When doing date comparisons you need to have the date format as yyyy-MM-dd. So next we add 2 compose controls, one for today's date and one for the date 7 days ahead and format them a shown:

 

1-Flow.png

 

Next, add a get files (properties only) action. But we only want to bring those items back from the library where the NextReview date is greater than or equal to the ComposeToday and less than or equal to the Compose7Days. So in the Filter Query field add NextReview ge '{output of the ComposeToday}' and NextReview le '{output of the Compose7days}'

 

So that we can have them in order in the email we add NextReview into the Order By field:

 

2-Flow.png

 

Next, add an Apply to each and select value from the dynamic content. I want to convert the NextReview date back to UK format but you might not need these next steps:  inside the apply to each add a compose control and add the NextReview column. Then add another compose and format it as shown.

 

Next add an append to array variable and add the name and review date - I've used the output from the ComposeFormatDate compose for this:

 

3-Flow.png

 

Next, - outside the apply to each - if you want to you can add a create html table action and add the array.

 

Finally send the email and use the output from the create html table action.

 

4-Flow.png

 

The email looks as shown below. It is possible to add another compose action to add formatting to the table but I've not done that on this occasion.

 

5-Email.png

 

Rob
Los Gallardos
Microsoft Power Automate Community Super User

View solution in original post