Publicize your next event(s) and allow users to sign up via Microsoft Forms. Power Automate can be used to send attendees their invite to the event and allow you to gauge event uptake. Whilst Forms will not allow you to manage a limit on numbers, it is quick and easy to establish for an event with unlimited numbers. The event can be virtual or of course in person, using an Outlook Calendar event.
**Update** Sept 2022 – looking to automatically disable your form or maybe trying to prevent attendees from receiving duplicate emails and anonomise attendees? Check out those links and see how it is done.
The Microsoft Form
When configuring your form, make sure that all of your answers for the event names are unique. You will learn why this is important later on when building the flow. If you must have two events with a similar name, maybe consider using a prefix for an Event ID. I made the mistake whilst building this proof of concept and have two events called PowerAutomate which will make finding this event in Outlook a lot more complicated.
Attendees are encouraged to select the event(s) that they wish to attend. My example above is an internal form and I will rely on the email address of the logged-on user. Equally this form could be made public and the user requested to supply a valid email address via one of the questions, in order for the invite to be sent.
The Events in Outlook
It’s imperative that you ensure that the event(s) cannot be forwarded. You may wish to request a response and in order to ensure attendees are anonymous, you might want to hide the attendee list. This is all configured via the response options of the event in Outlook. Just like the form answers, it’s also a good idea to make all of your calendar subjects unique so that they match your answers on the Microsoft Form. You might want to check out the Just for Info select action below before setting up your events in Outlook.
The Flow
The initial stages of the flow are not unfamiliar – when a new response is submitted and get the response details. Please ensure that concurrency is turned OFF on the trigger as you do not want this flow running concurrently as you will be overwriting (and not adding) the attendees each time it runs.
I have included a compose to display the answers as an array. You might want to read this article in order to understand how you can access multiple choice answers from a form. This compose action is very useful for establishing your events in outlook and seeing how the form responses are returned to Power Automate.
Then finally I get events from the calendar (and you may want to include an OData Filter). You can limit the events after today’s date using: start/DateTime gt ‘formatDateTime(Utcnow(),’yyyy-MM-dd’)’
The next stage of the flow is to loop through all of the selected events. In order to do this, you must convert the form response to JSON so that it is accessible as an Array. Then we can use filter array, using the value from get events where the current item (i.e. the form response) contains the event subject. This is why it is important to have the event subject and form answer unique and potentially even as identical pairs. Otherwise, you need to somehow match them using an array and a filter or via a switch. I have an article on simplifying complex conditions using arrays here if you really want to go that way.
You will also see that I have included a get event, even when I should have the event details from the earlier get events action. During testing of the update event action, I discovered that the teams meeting invite was being lost. The get events action doesn’t return the event body, get event does. You need to consider updating the whole event with all parameters in order to keep it current. Please see the forum post here.
The get event action is simply returning the first result of the filter array. This is to avoid unnecessary loops and is based on unique event subjects. You will always see my expressions in the comments of an action.
Updating the Event
Using the first event ID, we are then able to use the dynamic content from the get event action to populate both the required fields and the optional advanced options (which aren’t actually optional if you have configured them on outlook). You need to ensure that you include any of the parameters like Body, Location, Reminder, Is Reminder On or Response requested. If you fail to set these, they will be overwritten with the default option and may give you unexpected results despite you setting up your original event in a particular way.
When it comes to required attendees, remember that you are appending to the list. You must therefore include both the new attendee’s email from your Microsoft Form, but also the existing Required Attendees based on the get event action. This is why this flow must not trigger concurrently as two simultaneous submissions may result in an email being overwritten and lost. Separate your email with a semi-colon.
If you want to send your attendee an email, you have two options. By enabling the response requested to yes, they will automatically get an email. If you have asked for confirmation, the email will also give them the familiar yes, no, maybe response form.
Alternatively, using a separate action, you can send a confirmation email using any of the dynamic content from the various actions previously used.
This is very much a proof of concept but I look forward to hearing your feedback. In order to manage attendees, a PowerApps could be utilized to update a running total of available spaces. Rather than adding attendees on the fly, a PowerApp solution could include a flow that builds the event and adds all attendees once registration has closed. Something that I may explore in the future.
I was able to use this in a functional response flow, and it was very helpful. I had to tweak some things in the queries, of course, to get it to a successful running sequence for my purposes, but your infrastructure allowed me to get to the end without too much pain.
Thanks for the effort and write up.
Thanks for this useful tutorial video! Much appreciated! I followed your steps and successfully had the same result as yours. However, I have one question and wonder whether you can help me with it. As new people fill in the form, people who have filled in the form previously will receive one updating email again, which is a bit annoying for them because the first person filling the form will end up receiving maybe 100 same email. Do you know how to solve this issue? Many thanks!
Hi Kevin, appreciate you were in contact via YouTube too – how did you get on? Is this still happening for external users only?
Hello, Amazing video and great explanation. I am facing the issue that the MS Teams link isn’t been displayed on the requestor email and no option for accepting or rejecting the invite. any tips over here or maybe if you could export the flow and make it available?
Hi, thank you very much for this video. I’ve tried to follow each of the steps. But, I wonder why, when I’ve put the “apply to each” step, I cannot see the “get_response_details” among the previous steps. I only see the “compose” step and the “get events (V4)” step. Do you have any clue for me?
You might need to create the expression by hand. I avoid using parse json but this would create dynamic values if they are not showing for you.
thank yoy for yoyr heip. If you don’t mind, I’ll ask a liitle more help. I did the expressin by hand, but I’ve got this answer. “Unexpected character encountered while parsing value: R. Path”
Do you know how to fix this?
thank you again.
Not sure without troubleshooting. I would need to see your flow. You could try the MS forum https://powerusers.microsoft.com/ or drop it on my blog forum and I will look when I can. Screenshots of the flow and error would help greatly.
Hi, thanks again for your help. I’m afraid I’m not good enough with all those coding thing, so I had to give up the workflow, I was trying to do. But, I have been able to reach my goal another way,
But, I wanted to thank you anyway for your help.
No probs. What did you go with to solve your problem?
Hi, thanks again for your help. I’m afraid I’m not good enough with all those coding thing, so I had to give up the workflow, I was trying to do. But, I have been able to reach my goal another way,
But, I wanted to thank you anyway for your help.
Hello DamoBird365!
Is there any way to convert ‘requiredAttendees’ under Get Event into an integer of how many has signed up? I am trying to limit the number of person signing up, and sending a different email if the event is fully registered.
I was using length(body(…))?[‘requiredAttendees’] but it returns me the length of the character instead of the number of emails. Do you have any solution?
Thanks in advance!
Hi there, it looks like a string, so you can split on ; to create an array, but note that the string ends in ; so you might also need to sub 1.
sub(Length(split(outputs(‘Get_event_(V3)’)?[‘body’]?[‘RequiredAttendees’],’;’)),1)
Hello and thank you very much for your post !
I follow all the steps, it rocks 😉 but I have two problems.
1- The first answer changes the schedule of the meeting (minus 2 hours)
I think I will have to add 2 hours with an action. Do you know why ?
2- When a second answer arrives, all the previous attendees receive a notification (update)
So this flow will notify every people each time a new answer arrives.
Do you know with ? Do you have a solution ?
Thank you in advance for your advice or help !
🙂
Flows are based on UTC, so I suspect you’re in a different time zone? You can change the timezone with an expression or an action. Regarding the subsequent emails, I was using internal emails and it wasn’t an issue but I have seen some folk report the problem with external addresses? The comments on the video highlight a workaround by forwarding the invite email – I believe. I haven’t had time to look back at this though. If you do make a break through, please report back.
Thanks, I’ll try with your email workaround
OK for the Timezone
I progress a lot with your tutorial
Thanks for everything !
🙂
it is possible to get full solution as a template or app?
Hi there, do you know how to remove the 25 email / sign up limit when using power automate to send cal invites based on a selection of dates in Forms?
We set it up and it works but I think MS has a 25 email/sign up limit per event?
This seems like a great solution to something that I was looking for. Quite a newbie to Power Automate so I did follow your steps as it was with the exception of the last action re: Send Email. However, not really sure what I have done wrong but when I tried to test it, I have come across a failed run and it stated “Unable to process template language expressions for action ‘Apply_to_each’ at line ‘0’ and column ‘0’. The template language function ‘json’ expects its parameter to be a string or an XML. The provided value is of type ‘Null’. Not really sure what this means so I am hoping that you can kindly point me in the right direction so I can try and resolve it.
Hi Joan, it would suggest that the expression or dynamic value supplied to the json expression is empty. Could be a typo?
Great resource, this is the exact thing I am trying to accomplish. In the Apply to each step I am getting an Action failed error. The “Get event (V3)” is falling and the error messages says: “WorkflowOperationParametersRuntimeMissingValue. The ‘inputs.parameters’ of workflow operation ‘Get_event_(V3)’ of type ‘OpenApiConnection’ is not valid. Error details: The resolved string values for the following parameters are invalid, they may not be null or empty: ‘id'” any suggestions on this world be greatly appreciated.
have followed all of your instructions as well as I can and am having issues with the Get Event V3. As I test the flow I get the following error message:
Unable to process template language expressions in action ‘Get_event_(V3)’ inputs at line ‘0’ and column ‘0’: ‘The template language expression ‘first(body(‘Filter_array’))?[‘ID’]’ cannot be evaluated because property ‘ID’ cannot be selected. Array elements can only be selected using an integer index.
The expressions looks correct. Presumably you have an action called filter array? And a column in the data called id. Do you see anything in the output of the filter array in the flow history?
I am completely lost. I do have an action named Filter Array. Where again is the ID column supposed to be?
I am sorry. I should explain that I am a total newbie to Power Automate. I have followed the steps as best to my ability. I am still getting the same error where ID is not able to be selected as above. I have worked though each step one at a time and tested as I go. All green lights until I get to the steps immediately following the Filter Array step. Is it possible that i do not have the correct reference in the Just Info step? How do I know what the string is to be in the Just info Step?
I am building up a similar scenario on RSVP Calendar invite by follow your approach. However, I stuff up at Get Events (V4) with the error details: Unable to process template language expressions in action ‘Get_events_(V4)’ inputs at line ‘0’ and column ‘0’: ‘The template language function ‘formatDateTime’ expects a timestamp as the first parameter, an optional format string as the second parameter and an optional locale as the third parameter. The function was invoked with ‘0’ parameter(s). Please see https://aka.ms/logicexpressions#formatdatetime for usage details.’.
Sounds like you’ve done something odd with formatdatetime. I’ve a video on dates 👉👉 Effortlessly Format Dates & Get Specific Days: Power Automate Solution
https://youtu.be/ybPWtu1i1j0
thank you for your prompt reply however, i am facing return error details by following the format to input expression as according to your guide
Invalid filter clause: Syntax error at position 21 in ‘start/DateTime gt2024-03-13’.
clientRequestId: 603db578-025c-4266-92e3-9c5a7e12e2c1
serviceRequestId: c89cdfa1-dd7a-4188-b72d-24c581314934
thank you for your prompt reply however, i am facing return error details by following the format to input expression as according to your guide
Invalid filter clause: Syntax error at position 21 in ‘start/DateTime gt2024-03-13’.
clientRequestId: 603db578-025c-4266-92e3-9c5a7e12e2c1
serviceRequestId: c89cdfa1-dd7a-4188-b72d-24c581314934
Are you missing a space after gt? And possibly single quotes around the date?
sorry I am not good at coding, however, returning error again when I add a space and single quotes around
Invalid filter clause: Syntax error: character ‘‘’ is not valid at position 17 in ‘start/DateTime gt‘ 2024-03-13”.
clientRequestId: 9d7505ff-c8cf-4315-9ff4-4b48b507373f
serviceRequestId: 34f8a174-8602-43b2-99f7-be0421a9b48c
start/DateTime gt ‘formatDateTime(Utcnow(),’yyyy-MM-dd’)’
nope, did not miss a space and also applied single quotes onto it, yet still returning similar error
Invalid filter clause: Syntax error: character ‘‘’ is not valid at position 17 in ‘start/DateTime gt‘ 2024-03-13”.
clientRequestId: 9d7505ff-c8cf-4315-9ff4-4b48b507373f
serviceRequestId: 34f8a174-8602-43b2-99f7-be0421a9b48c
You need this start/DateTime gt ‘2024-03-13’ but you have this start/DateTime gt‘ 2024-03-13
I am receiving below error by following the video you shared, are you able to point me to the cause?
Invalid filter clause: Syntax error at position 21 in ‘start/DateTime gt2024-03-13’.
clientRequestId: 603db578-025c-4266-92e3-9c5a7e12e2c1
serviceRequestId: c89cdfa1-dd7a-4188-b72d-24c581314934
Thank you this is much resourceful. I am working on similar scenario when I mirror the process flow exactly to yours however receiving below error under Get Event v4
InvalidTemplate. Unable to process template language expressions in action ‘Get_events_(V4)’ inputs at line ‘0’ and column ‘0’: ‘The template language function ‘formatDateTime’ expects a timestamp as the first parameter, an optional format string as the second parameter and an optional locale as the third parameter. The function was invoked with ‘0’ parameter(s). Please see https://aka.ms/logicexpressions#formatdatetime for usage details.’.
Thank you much appreciated. Get events (V4) ran successfully with the codes you shared however, without output
For Apply to each I am facing an error Unable to process template language expressions for action ‘Apply_to_each’ at line ‘0’ and column ‘0’: ‘The template language function ‘json’ expects its parameter to be a string or an XML. The provided value is of type ‘Object’. Please see https://aka.ms/logicexpressions#json for usage details.’.
i managed to go through get events yet facing error apply to each with below, are you able to point to the direction, cheers
Unable to process template language expressions for action ‘Apply_to_each’ at line ‘0’ and column ‘0’: ‘The template language function ‘json’ expects its parameter to be a string or an XML. The provided value is of type ‘Object’. Please see https://aka.ms/logicexpressions#json for usage details.’.
Hi, I received the same exact error. Please advise the possible solution to this, much appreciated 🙂
@DamoBird365
Good day!
If possible, I’m hoping that you could create a series of YouTube videos for us. These videos should show a step-by-step process on how to create a volunteering request submission from an entity or community, and a volunteering registration from students, using Microsoft Forms, Microsoft Power Automate, and SharePoint List.
Below is the sample requirement I received from our Student Life department:
Student Life is requesting the creation of a project to develop an application (business tool) aimed at automating the management of volunteering requests within our community, using the available tools or technology that we have. This project aligns with the business requirements outlined by the Student Life department and seeks to enhance our community engagement processes.
Project Details:
Project Name: Automation of Community Volunteering Requests
Objective: Streamline the process of managing and responding to volunteering requests, fostering efficient communication between requesting entities and potential student volunteers.
Key Features:
1) Volunteering Request Submission
2) Automated Email Notifications
3) Student Registration Module
4) Status Tracking and Dashboards
5) Security and Privacy Measures
Business Requirements from Student Life:
During discussions with the Student Life department, the following key business requirements were identified:
1) Efficient handling of volunteering requests from entities.
2) Timely and automated communication with registered students about available volunteering opportunities.
3) A user-friendly portal for students to apply or register for volunteer opportunities.
4) Real-time status tracking for both entities and students.
5) Robust security measures to protect sensitive information.
Benefits:
– Increased efficiency in managing volunteer requests.
– Enhanced transparency and accountability in the community engagement process.
– Improved user experience for both entities and students.
Hi, follows all the steps … I think, but get this error message:
The ‘inputs.parameters’ of workflow operation ‘Get_event_(V3)’ of type ‘OpenApiConnection’ is not valid. Error details: The resolved string values for the following parameters are invalid, they may not be null or empty: ‘id’
Any help would be massively appreciated
Hi there, I received the same exact error. Please advise the possible solution to this, much appreciated 🙂
Stuck on the Apply to each “json()’ – try multiple ways – get error ‘The expression is invalid’