*** NOTE: ALL INFORMATION IS ACCURATE AT DATE OF PUBLISHING ***
In previous posts we’ve looked at how to distribute a survey using Microsoft Flow, and using the Send Survey action. This allows you to generate an email sent using an email template you’ve created in Forms Pro. The email comes from a forms pro email address and is only customised to a certain extent. In this post we will look at how to create an invitation link which you can then use in an email you create in Gmail, Outlook or other Flow Connectors with email functionality.
First we have a survey that has some personalisation on it. We are using the First Name, then have two custom parameters. One is to show a case number, and the other to show a case title. These will be used to be populated from a case that is closed in Dynamics 365 Customer Engagement.
We now need to create a Microsoft Flow. The first step is the trigger using the Common Data Services connector, and the When a record is updated option. Set your environment, cases as the entity, and scope as organisation. Our first action step is a condition to check and make sure the Status Reason value of the case is equal to 5, which is Resolved.
If false (No), we do nothing. If true (Yes), we move on to the next action which is another Common Data Service step, to get a record. In this case, we want to get the contact from the case, using the Customer value from the initial trigger step. If you wanted to have a flow that works and checks if the customer is an Account or a Contact, you can view this post.
Our next action step is from the Forms Pro connector. Choose the create an invitation action. From here, we pick which survey we want to send out a link for. Now we can populate the fields we want to pass through to the invitation. You will notice any of the parameters you created on the survey. So we can populate them all with the fields from the Get Contact step. Note that the Regarding and Recipient details values must include the entity name followed by a comma, then the record id.
Now we create the email we want to send. You can see below, it’s got a customised subject using the case number, and the body uses various fields from the Contact or the Case. The previous create invitation step gives us an Invitation link variable. We want to make it a hyper link, so you can add <a href=” first, then add the variable. Then close that with a “>. Next, put the text you want to use as the hyperlink (Complete Feedback Survey) in this example. Finally, put </a> after that.
Here is what the email looks like. The email has the Contact’s first name, the case number and the case title. The link to the survey looks nice and clean and when clicked on opens up the survey in a browser.
Reviewing the survey shows us the Contact first name, case number and case title. Excellent! 🙂
Want to just watch how to do this? Check out the video below:
Check out the latest post:
Auto Assign Leads Without Code Using Lead Scoring & Work Assignment
This is just 1 of 477 articles. You can browse through all of them by going to the main blog page, or navigate through different categories to find more content you are interested in. You can also subscribe and get new blog posts emailed to you directly.
Hi Megan,
Your articles are great. This one in particular provides the “missing link”…passing personalization parameters through to the survey…finally the reason to drop JotForm. Thank you!
The final challenge, since you’re pulling from Dynamics365 CE/CDS, would be linking the invitation to the case to show the history. Normally, this is done by generating the email in Dynamics365. However – and this is according to Microsoft – using the CDS connector to create a new email record is not possible, even following the normal email workflow rules (creating in “draft”, then updating status to “pending”.)
Thanks again for your valuable contributions.
Jim
Hi Jim, thanks for the compliment, glad you are enjoying the articles. So in the example I gave, look at the screenshot that shows the ‘Create an invitation’ step. You will see that there is a Regarding field, and a Recipient details field. You will see that the Regarding has the incident value in there, with the incident being the case. That will then link the survey invite to the case for you.
Hi Megan, great article, and Video. It have been massively helpful thank you:-) I wondered if you had any success linking either the invite or the response to a record in D365. I’m passing through (for example) a case id as per your example above, but the issue as far as i can tell is that the form (and therefore the associated response records) is created in the default environment and not my CRM Environment, therefore when i’m passing a case id, it isnt stored against the regarding of the response, as the case doesnt exist in the default environment. I’ve tried switching in Forms to the CRM environment but it just errors. Have you experienced anything like this?
Many thanks
Hi Carl, thanks for the compliments! I’m actually working on a blog post for next week that covers this kind of head scratching scenario. Forms Pro gives you the default environment, and then one environment for each Dynamics 365 Customer Engagement environment you have… So a production and a sandbox for example.
Microsoft Flow will do the same. So if you run your Flow in default it won’t find the case entity as it’s not one of the CDS entities, it’s a D365 CE entity. So make sure your Forms Pro survey and your Flow both exist under the same environment.
Hope that helps!
Hi Megan,
Thanks for all your helpful posts about Forms Pro. I was exploring the capabilities of Forms Pro, especially now that MS has made official their plans to deprecate Voice of Customer next year.
Something that seems to be still missing in Forms Pro is the possibility to create individual invitation links without having the dependency on email address. The flow action “Create an Invitation” requires an email address. And it will will unless this email address value is provided. In some scenarios contact will not necessarily have an email address. With Voice of Customer we can do that.
Have you also come across this limitation from your end? Have you by any chance been able to find a workaround?
Thanks in advance.
Rafael
Hi Rafael, thanks for the compliment and for reading my blogs! It does indicate that the email is not required, but in testing it seems to fail without anything in that field. I am doing some digging and will get back to you once I have more info on this specifically. I can certainly see scenarios of needing to generate an invitation but not for email purposes, such as sending out a text message perhaps. What is your business case for this? I am curious to know so maybe I can factor that in to a future video/blog post to share.
That is right Megan. Even though it does not show as a mandatory field in the flow step, it fails when no email address value is specified.
The particular use case I am currently working on is for an organization that would like to send surveys printed out in paper via direct mail. 30% of their contact database does not use email so they do not have one, mostly due to their demographic characteristics.
The objective here is to allow data entry resources to submit the survey responses on behalf of the customer once their paper based survey response, is received. As you said, there are other scenarios where you would want to send the invitation via other channel like for example SMS.
Having the ability to create individual invitation links associated to a Survey (or survey invite) and Contact using the record ID (GUID) instead of email, sounds much more logical and flexible to me. This is currently available in Voice of the Customer.
Of course I can build logic in a flow to try and match the response to existing contact based on certain criteria (unique ids) but having the ability to create individual invitations upfront, would be much simpler and a feature many organizations will expect to be available out of the box.
Thanks again for taking the time.
Hi Megan,
Thanks for all your helpful posts, I am happy that I found your website, it’s amazing what you are doing and sharing here!
I have a question and hope that maybe you can help me. regarding the “Get record” step.
In my case, instead of the customer(item identifier), I have to use another field, that lists multiple contacts as project members. (Please see the screenshot: https://ibb.co/JQ6ZwZJ). There is a small window (on the right side) where you can assign multiple contacts as project team members. I would like to send all of them the survey. However, when I go to the “Get contact” window in Microsoft Flow and want to set the item identifier, I can’t find the “project team members”.
Would you have any idea how to achieve this?
Thank you!
Best,
Csaba
Hi Csaba, thank you for the comment and kind words. For your scenario, what is the trigger? is it a case being closed, or something different? If it is indeed a case, you would need to add a List step and get all of the Contacts that are linked as Project Members. Then for each Contact returned, you would create an invitation for them and send it out. Have a look at this for the Apply to Each step: https://meganvwalker.com/send-survey-request-to-appointment-required-attendees/
Hi Megan,
Thank you for your hint with the List step, it was very useful!
Yes, it is a case and when it is closed it should trigger the survey.
I just realized that the “project member” is a separate entity, and I am not sure how to build up the bridge between the case and the contact, because, they are not directly related to each other (Please see the screenshot: https://ibb.co/7tzVx3Z ):
– the case has a window in the bottom right corner, that lists the project members (which is another entity)
– when I click on the name of a project member a new window opens up. Here we can see the name (lookup field to the contact), the role, and other information.
– when I click here on the name of the project member, then I am directed to the contact itself.
As you can see in the screenshot, I tried to create the flow based on your recommendation. However, I have to deal with this “project member” entity between the case and the contact.
Do I need to have 2x List steps after each other? What do you think?
I really appreciate your help!
Thank you!
Best,
Csaba
Hi again, your Flow looks like it is almost there. You have your list step to get the Project Members, then you have your Get record step to get the Contact using the Project Member id. That should then give you the Contact you want to send the survey invite to. You would then do your Create Survey Invitation step from Forms Pro. Because you are doing that all within the Apply To Each section, this will do it for each Project Member that was found in the List step. Does that make sense?
Hi Megan,
Thank you for your reply. Yes, it totally makes sense.
I tried to run the flow accordingly, however, I got an error message (BadRequest) at the List step:
{
“status”: 400,
“message”: “Syntax error at position 36 in ‘_parentcustomerid_value eq ORD-01379-V0X9Z4’.”,
“source”: “….crm4.dynamics.com”,
“errors”: [],
“debugInfo”: “clientRequestId: ecf3bb64-b81d-4dad-9553-0bbcae8ef734”
}
The Filter Query seems to be wrong:
_parentcustomerid_value eq @{triggerBody()?[‘ordernumber’]}
Do you have any idea?
Thank you in advance,
Csaba
Hi Csaba, hmmm…. not sure how your Parent Customer ID could equal a customer number. What are you trying to achieve with that filter?
Hi Megan,
In the List Records step, I would like to list the Project members that are connected to the particular project(case).
However, I am not sure how to formulate the filter query correctly. Somehow I need to tell the system not to list all project members from the entire database, but only those who are connected to that particular case, (the case that triggered the flow). Does it make sense?
Thank you,
Csaba
Hi Megan, THANK YOU! Your posts are really valuable and helpful!
I am trying to create a survey invitation when a record is created. The survey to be sent is dinamycally set, and it is passed by the entity record that triggers the flow. It works great when the owner of the flow runs the flow and try to send a survey he owns. If the survey to be used is created by someone else the flow fails with error:
[
{“ErrorMessage”:”System.Exception: CreateInviteRequestHandler::RetrieveAndUpdateFormDetails:: expection while fetching form and cds url —> System.Exception: CreateInviteRequestHandler::RetrieveAndUpdateFormDetails:: form not found
]
so, the owner using the connection to Forms Pro doesn’t have access to the Survey. The connection is made by a O365 global admin, sys admin in CRM. The survey has been shared with him (collaborate). I tried to set the flow in a solution and outside a solution with the same result. Why is that happening? Can you help me please? Thank you in advance!!! Kind regards Billy
Hi Billy, thanks for the comment, glad my posts are helpful! Unfortunately at the moment there are definitely challenges with ownership of surveys and using them in Power Automate. Hopefully a change will come which will remove all issues like this. For now, the only suggestion I can think of is to have a service user account that you use to log in and create all of your surveys, and also the flows in Power Automate, then there shouldn’t be issues. It’s not ideal, but all that I can suggest for now!
Hi Megan,
Really great tips and trix regarding Forms Pro. Thumbs up!
A question – do you know if there is any way to dynamically set which survey that´s going to be sent?
I am triggering a power automate flow based on conditions in Dyn365.
I have tried to create a lookup in Dyn365 to the survey entity from my triggering entity. So that I can choose which survey to send.
And then I tried to have power automate use the lookup value and populate the survey field in the “create invitation step”.
But I get an error message unfortunately.
Thanks again Megan!
Best Regards
Stefan
Hi Stefan. When you are trying to dynamically set the survey in Power Automate, you will have challenges. You can’t get access to all of the additional fields (regarding, recipient and variables) until you select the survey…. so yes, likely you would get errors.
this is probably way too late for you Stefan, but notwithstanding what Megan has said (about not getting access to any form parameters at design-time in Flow until you manually select an *actual* survey), you can use a variable to set the Survey in the “create an invitation” step of Flow by passing an expression that is just the internal form ID. For example: “M5kUKz24lUKRsTuXmRupGZ0xOUAnrXYZvmIu8LNqSelabcdefgh1NlVaTVVUS005UU84Mk85SE1JTy4u” (you can find this as the FormId URL parameter in the Form Pro editor).
This may be helpful if you have several forms with no custom variables but you wish to present a different form to the recipient under different circumstances.
Hi Megan,
Great article. Please can I ask how you would put a GUID or a survey that has not been created by yu in the *survey field?
Thanks
Roudy
Hi Roudy, unfortunately at the moment, there is no way to use surveys that others have created in your flow in Power Automate. It’s a limitation, and hopefully, one that Microsoft will address soon!
Below is the scenario for my project looking for suggestions
1. Power automate cannot be used due to data residency
So I need to send survey link in the CRM Workflow like how we use to do for Voice of customer .
How is it possible with customer voice.
Hi Santhi. It’s not possible to generate the link in the same way you did for Voice of the Customer. Your options are to send the survey to someone directly from within Customer Voice, or to use Power Automate and generate a link and send it that way. As you have stated you cannot use Power Automate, your option is to send the survey from Customer Voice.
Hi Megan,
Thank you But in my case on button click survey need to be send, could you suggest.
I don’t know of any other way than with Power Automate. Sorry, if you are looking for another answer, I would suggest contacting Microsoft. Good luck!