Hello there.
I'd like to create a flow that creates an event for each entry in a sharepoint list.
I think it would be easy to create this for only one calender/user, but I'd like to create this event for all users and they should not get an invitation, it only has to be in their calender.
Unfortunately, I didn't get that far in my flow. Hope you have an idea how to solve this
Jonas
Solved! Go to Solution.
Hi, @jonbu , thanks to @VictorIvanidze for spurring me on, I got there in the end.
This will accomplish what you need, as long as you have the requisit permissions, and that you've told whomever's in charge that you're doing it ;-).
What this does is find all the users in your company (more after the flow on that) then for each of them it sends a request to Microsoft to add the event into their calendar:
You can leave the number blank if your firm has under 1000 employees, otherwise it's wise to overshoot the amount of users here by a fair bit. So I did that as an example, just in case, as I have 9.
If you really want to future proof it make a userLimitVAR integer variable with an initial setting of 1000, a Do until action (with the Users action inside) that runs until the length() of the Users action is not equal to the userLimitVAR, and at the end of each loop inside that, add 1000 to the userLimitVAR. If you wish to count the users you can also populate a userCountVAR that contains that length(). Then pipe the Users result into a set variable for a usersARR array variable also at the end of the loop. All this does is ensure that you'll always get all the users.
This is the meat of what you wanted to do, this HTTP request creates an event for whichever User Id you enter in the URI field, but it needs the JSON data to make it with.
It essentially performs the same action for any user that you would accomplish using the Office 365 Outlook connector's Create Event action. If you wanted to use this method to do that, you would replace the "users/id/" part with "me/" instead.
The URI field here is:
https://graph.microsoft.com/v1.0/users/%7B@{items('Apply_to_each')?['Id']}%7D/calendar/events
The "@{items('Apply_to_each')?['Id']}" bit is representative of the graphical 'User id' that you see in the above image. If you have your Apply to each action named the same, then you might be able to paste that straight into the field without issue, but no guaruntees.
The Body field is:
{
"subject": "Eliot's Test Event",
"body": {
"contentType": "HTML",
"content": "Call link: https://aka.ms/mmkv1b Submit a question: https://aka.ms/ybuw2i"
},
"start": {
"dateTime": "2022-05-15T17:00:00",
"timeZone": "UTC"
},
"end": {
"dateTime": "2022-05-15T17:05:00",
"timeZone": "UTC"
},
"location": {
"displayName": "Skype for Business"
}
}
This is taken from the example given on the Graph Explorer page (when you can try things like this out), but there are further examples on the documentation pages, here.
If you have extra information that you wish to include, or retrieve dates/subjects/information from a list or something, just subsume this into your logic.
If you need something more complex, then you'll need to show us your flow as it is. But I reckon you can slide this in where-ever you need it.
Don't worry about these. Anyone that has a calendar will get the event.
You will almost definitely get failures if you are in a company of more than a few employees. This is because some users in M365 do not have licences for the functions you're accessing here.
A more appropriate way to do this and illicit less errors in the loop would be to use an "All Staff" group to run this on. That way it will add it for all the staff, and they are almost 100% likely to have a full office licence, or at least Outlook. 😉
Or you could list all users, then check their licences, then use the ones with ... (you don't need to, though)
Hi, @jonbu , let's start with getting a look at what you have. Can you please edit in what you've got so far into your question, above?
That'll help folks here potentially get a grip on what you're trying, show you what you're doing well, or to steer you around some more problematic parts.
Secondly, are all the entries already in the list? Or will this need to run every time an event is added to the list?
You can accomplish both with the same flow, but it'll help to get you sorted out swiftly.
---
Just some generally good advice for this kind of thing, firstly ensure that there is a yes/no column to confirm the event has been created. Then the following columns are optional, but will be so useful in creating any events elsewhere, and possibly even linking to them:
I assume that you have most of these (and the URL one is SUPER optional) but they'll all come in to play when you make the event. Look at what you'd need when making the event in Outlook.
I thought I'd found a way to do this, but it won't work with the Power Automate Graph HTTP connector's permissions. Even with my account that is a global administrator.
So, there's not an even slightly difficult way to do this without creating an Azure App with the right permissions to post requests under with a bearer token.
If that was in place, then:
So ... Essentially, I would say that you cannot do this in Power Automate easily.
If you wish to use Azure Apps, though, we can move on with that. Just bare in mind that any Azure App permissions will need to be approved within your company if you're not able to do that yourself.
Hi @eliotcole,
thanks for your comment. I've done a quick test and all looks OK.
In fact you do not need to use Azure app if you will execute the GRAPH requests using the action "Send an HTTP request (preview)" of the "Office 365 Groups" connector.
That's what I'd thought, @VictorIvanidze , however either;
... the connector doesn't have the right permissions in terms of executing the request.
... something else is amiss with how the connector works opposed to full perms requesting.
Every time I tried to perform the actions it would just loop the request, see here:
However if I put the request through in exactly the same fashion on the Graph Explorer, it worked like a dream.
I tried the connector method with just users/{id}/calendar/event (or with a slash at the start), too, and that's apparently invalid.
Give step #3 a test ... that's the one that kept failing for me (as the Global Administrator, running in the right environment) on the apply to each stage (after looking up the list of user IDs to apply it to).
All of this is why I offered to help with an Azure approval method, but only if the user really wants to go that deep.
Aha!
I've resolved it, I think. You need to URL encode the curly brackets. 🤦♀️
Hi @eliotcole,
I see you have dimmed the user ID, but why did you place { there?
Here is my test URL:
https://graph.microsoft.com/v1.0/users/eafb5262-2b92-4420-a970-c7fc51977974/calendar/events
Wow, you just do not need to use them at all! 😉
I'd tried that, and it just didn't work, same looping.
Either way, it's working now, about to post the solution.
Hi, @jonbu , thanks to @VictorIvanidze for spurring me on, I got there in the end.
This will accomplish what you need, as long as you have the requisit permissions, and that you've told whomever's in charge that you're doing it ;-).
What this does is find all the users in your company (more after the flow on that) then for each of them it sends a request to Microsoft to add the event into their calendar:
You can leave the number blank if your firm has under 1000 employees, otherwise it's wise to overshoot the amount of users here by a fair bit. So I did that as an example, just in case, as I have 9.
If you really want to future proof it make a userLimitVAR integer variable with an initial setting of 1000, a Do until action (with the Users action inside) that runs until the length() of the Users action is not equal to the userLimitVAR, and at the end of each loop inside that, add 1000 to the userLimitVAR. If you wish to count the users you can also populate a userCountVAR that contains that length(). Then pipe the Users result into a set variable for a usersARR array variable also at the end of the loop. All this does is ensure that you'll always get all the users.
This is the meat of what you wanted to do, this HTTP request creates an event for whichever User Id you enter in the URI field, but it needs the JSON data to make it with.
It essentially performs the same action for any user that you would accomplish using the Office 365 Outlook connector's Create Event action. If you wanted to use this method to do that, you would replace the "users/id/" part with "me/" instead.
The URI field here is:
https://graph.microsoft.com/v1.0/users/%7B@{items('Apply_to_each')?['Id']}%7D/calendar/events
The "@{items('Apply_to_each')?['Id']}" bit is representative of the graphical 'User id' that you see in the above image. If you have your Apply to each action named the same, then you might be able to paste that straight into the field without issue, but no guaruntees.
The Body field is:
{
"subject": "Eliot's Test Event",
"body": {
"contentType": "HTML",
"content": "Call link: https://aka.ms/mmkv1b Submit a question: https://aka.ms/ybuw2i"
},
"start": {
"dateTime": "2022-05-15T17:00:00",
"timeZone": "UTC"
},
"end": {
"dateTime": "2022-05-15T17:05:00",
"timeZone": "UTC"
},
"location": {
"displayName": "Skype for Business"
}
}
This is taken from the example given on the Graph Explorer page (when you can try things like this out), but there are further examples on the documentation pages, here.
If you have extra information that you wish to include, or retrieve dates/subjects/information from a list or something, just subsume this into your logic.
If you need something more complex, then you'll need to show us your flow as it is. But I reckon you can slide this in where-ever you need it.
Don't worry about these. Anyone that has a calendar will get the event.
You will almost definitely get failures if you are in a company of more than a few employees. This is because some users in M365 do not have licences for the functions you're accessing here.
A more appropriate way to do this and illicit less errors in the loop would be to use an "All Staff" group to run this on. That way it will add it for all the staff, and they are almost 100% likely to have a full office licence, or at least Outlook. 😉
Or you could list all users, then check their licences, then use the ones with ... (you don't need to, though)
@eliotcole & @VictorIvanidze, you're absolutely great!!
Thank you very much for your qualified help. I think this helped me a lot, so I'll try to implement your solution in my company.
If there will be any problems or needed help, i'll tell you and hope for further help 😉
Thanks a lot!
I'm sure you'll be absolutely fine, mate. Don't fret it. 👍
The first Microsoft-sponsored Power Platform Conference is coming in September. 100+ speakers, 150+ sessions, and what's new and next for Power Platform.
Learn to digitize and optimize business processes and connect all your applications to share data in real time.
User | Count |
---|---|
27 | |
26 | |
23 | |
14 | |
10 |
User | Count |
---|---|
62 | |
55 | |
29 | |
28 | |
24 |