Create Form Submission and Event Registration Summaries in Customer Insights - Journeys
Form submissions and event registrations capture important information that is often way harder to find than it should be. This post will show you how to create a flow which:
Creates an easy to read free text summary for each form submission or event registration
Creates a JSON summary that can be used to export form submissions and event registrations, and other cool automations
NOTE: This solution is focused on Real-time marketing Forms and Events. But I did it for outbound marketing previously if you want to read some historic content for funsies.



One mighty child flow
We will first create a child flow which creates the summary for a real-time marketing form submission which can be reused as part of any other form submission automations.
Manually trigger a flow
The good old ‘Flow button for mobile’ trigger strikes again. One text input to start with:
FormSubmissionGUID
Get the Field Submissions
Each field on the marketing form creates a separate ‘field submission’, so we need to collect and process each of these one by one depending on the field type.
Dataverse: List rows - FieldSubmissions
Table Name: Field submissions
Filter rows: _msdynmkt_marketingformsubmissionid_value eq '@{triggerBody()['text']}' and not(contains(msdynmkt_name,'msdynmkt_purposeid')) and msdynmkt_localizedfieldvalue ne null and msdynmkt_name ne 'consentsubmissionvalues'
Sort By: modifiedon asc
Expand Query: msdynmkt_marketingformsubmissionid($select=_msdynmkt_marketingformid_value,msdynmkt_name,msdynmkt_pageurl,createdon,_msdynmkt_eventregistration_value;$expand=msdynmkt_createdentity($select=msdynmkt_targetentityid))
Initialize Variables
Create the following variables
Type: Object - ‘SummaryJSON’
Type: String - ‘SummaryText’
Collect the field submissions as Text and JSON
For the JSON we use addProperty() to update the object, for the string we append the values. Parallel layout optional.
Control: Apply to Each - AppendFieldSubmissions
Select an output from previous steps: outputs('FieldSubmissions')?['body/value']
Data Operations: Compose - AddProperty
Inputs: addProperty(variables('SummaryJSON'), items('AppendFieldSubmissions')?['msdynmkt_localizedfieldname'], items('AppendFieldSubmissions')?['msdynmkt_localizedfieldvalue'])
Variables: Append to string variable - AppendSummary
Name: SummaryText
Value: @{items('AppendFieldSubmissions')?['msdynmkt_localizedfieldname']}: @{items('AppendFieldSubmissions')?['msdynmkt_localizedfieldvalue']}
Variables: Set variable - UpdateSummaryJSON
Name: SummaryJSON
Value: outputs('AddProperty')
Include event details?
We need to include some event details in the summary for better context if the form submission was to register for an event
Control: Condition - EventRegBlank
first(outputs('FieldSubmissions')?['body/value'])?['msdynmkt_marketingformsubmissionid/_msdynmkt_eventregistration_value']
is not equal to
null
If No - Get the Event Registration Details
Dataverse: Get a row by ID - GetEventRegExpand
Table Name: Event Registrations
Row ID: first(outputs('FieldSubmissions')?['body/value'])?['msdynmkt_marketingformsubmissionid/_msdynmkt_eventregistration_value']
Select columns: msevtmgt_eventregistrationid
Expand Query: msevtmgt_EventId($select=msevtmgt_name,msevtmgt_eventstartdate)
Append Event Details
For the plain text summary, append the event name & start date, and any other event info you wish to add
Variables: Append to string variable - AppendEventDetails
Name: SummaryText
Value:
Event Name: @{outputs('GetEventRegExpand')?['body/msevtmgt_eventid/msevtmgt_name']}
Event Date: @{outputs('GetEventRegExpand')?['body/msevtmgt_eventid/msevtmgt_eventstartdate@OData.Community.Display.V1.FormattedValue']}
Add the Page URL
This gives better context on where the form was submitted from, especially if you have a form used in multiple places on a website. Parallel layout still optional, it’s just how my brain works best.
Variables: Append to string variable - AppendPageURL
Name: SummaryText
Value: Form Submission URL: @{first(outputs('FieldSubmissions')?['body/value'])?['msdynmkt_marketingformsubmissionid/msdynmkt_pageurl']}
Data Operations: Compose - AddPropertyPageURL
Inputs: addProperty(variables('SummaryJSON'), 'Form Submission URL', first(outputs('FieldSubmissions')?['body/value'])?['msdynmkt_marketingformsubmissionid/msdynmkt_pageurl'])
Add the summary to the form submission
You will need to create two custom columns on the form submission table to capture the summary & JSON summary text which will allow us to use this data in any future automations.
Dataverse: Update a row - UpdateFormSubmission
Table name: Form Submissions
Row ID: triggerBody()['text']
Summary: variables('SummaryText')
Summary JSON: outputs('AddPropertyPageURL')
Respond to the parent flow
Tell the parent flow you are done, so the rest of the form submission magic can continue (and use the summary if needed).
Add a note or activity to the timeline (optional)
This step is optional, but very useful to give a quick at a glance summary of the form submission details on the timeline of the relevant Lead or Contact. I prefer to use a custom activity where possible as you can mark the activity as ‘Complete’ so it is locked down read only, but Notes is easy because it’s already there ready to use. You can just pick the summary from the form submission field you just populated to add your activity of choice.
End to end flow
In case you got a little lost, this is the flow from start to finish.