cancel
Showing results for 
Search instead for 
Did you mean: 

SAP Marketing Cloud: Best way to collect event registrations with a form

former_member558862
Participant

I am currently thinking about the best way to track event registrations with the SAP Marketing Cloud forms. Ideally, I would like to connect the "Event Registered" interactions of the form with some event created in the "Marketing Events" app. However, as far as I know, this can not be configured in the content studio. Please correct me if I am wrong.

Alternativly, I set up the form as below:

If there would be one form for just one event, I guess it would be sufficient to go for the form ID only. However, in this case it is possible to select between three events in the same form. That's why I added three "Event Registered" interactions (the check boxes), followed by some hidden content subject that has a default value (name of the event) and is linked to the relevant interaction.

In segmentation, I could then identify the contacts using the content title attribute:

Next, I could build a target group for each event and send e.g. webinar links or details about the event via some email campaign. I could also create the actual event object via "Marketing Events" and add the target group members as registered. Then they would be connected to the actual event object, however, I would have two registrations for each member. The actual participants could also be added via data file load to the event.

All in all, this does not seem like the "perfect" solution since it still requires manual download of target group members in order to connect them to the actual event object from "Marketing Events".

How do you deal with cases like this? Any chance to map the registrations directly to the events?

And one additional question: The note (relevant for interaction) is by default stored to the content subject field. Is there some chance to change that?

Best
Christian

View Entire Topic
former_member558862
Participant

UPDATE: Some things still not working as expected, see additional comment...

------------------------------------------------------------------------------------------------------------------------------------------------

I was able to implement the requirement. Please find a summary below and feel free to comment if you have any idea for improvement.

1) Set up your form

After the contact information, I placed different options for events. It contains three events. Each event (e.g. "01.04.2023") uses a "Event Registered" interaction which is created if the contact checks the event.

In order to establish a link to the actual event object, I placed a input element with the folowing details right below the interaction element.

You need to make the data mapping to the interaction as shown above. Furthermore, I added the external event ID as default value and hided it.

Instead of the external event ID to identify a specific event, you can also use a different information (e.g. the internal ID) to find the event to which the interaction should be linked to. I prefered the external event ID in order to check also some naming convention.

2) Implement BadI "Revise Interaction Data Before Import"

IF interaction_data-mkt_area_id = 'YOUR_MKT_AREA' AND ( interaction_data-ia_type = 'EVENT_REGISTERED' OR interaction_data-ia_type = 'EVENT_ATTENDED' ).

* Within the form, the event ID should always be set as content title
    IF interaction_data-content_title IS NOT INITIAL AND interaction_data-content_title CP 'YOUR_NAMING_CONVENTION*'.
	DATA: event LIKE LINE OF events.

        SELECT SINGLE MktgEventStatus
    	INTO @data(lv_event_status)
    	FROM I_MKT_MktgEvent
    	WHERE MktgEventExternalId EQ @interaction_data-content_title
    	AND MarketingArea EQ @interaction_data-mkt_area_id.

* Only add participant if event is "ready" (0002) and event registration or "conducted" (0004) and attendance
        IF ( lv_event_status EQ '0002' AND interaction_data-ia_type = 'EVENT_REGISTERED' ) OR
            ( lv_event_status EQ '0004' AND interaction_data-ia_type = 'EVENT_ATTENDED' ).

        	SELECT SINGLE MktgEventUUID
        	INTO @data(lv_event_key)
        	FROM I_MKT_MktgEvent
        	WHERE MktgEventExternalId EQ @interaction_data-content_title
        	AND MarketingArea EQ @interaction_data-mkt_area_id.
        	
        	SELECT SINGLE MktgEventProvider
        	INTO @data(lv_provider)
        	FROM I_MKT_MktgEvent
        	WHERE MktgEventExternalId EQ @interaction_data-content_title
        	AND MarketingArea EQ @interaction_data-mkt_area_id.
        	
        	SELECT SINGLE MktgEventProviderAccount
        	INTO @data(lv_provider_acc)
        	FROM I_MKT_MktgEvent
        	WHERE MktgEventExternalId EQ @interaction_data-content_title
        	AND MarketingArea EQ @interaction_data-mkt_area_id.
        	
*        	SELECT SINGLE MktgEventType
*        	INTO @data(lv_event_type)
*        	FROM I_MKT_MktgEvent
*        	WHERE MktgEventExternalId EQ @interaction_data-content_title
*        	AND MarketingArea EQ @interaction_data-mkt_area_id.

        	IF lv_event_key IS NOT INITIAL.
        		event-event_key = lv_event_key.
        		event-mktgeventexternalid = interaction_data-content_title.
        		event-mktgeventprovider = lv_provider.
        		event-mktgeventprovideraccount = lv_provider_acc.
*        		event-attendance_type = lv_event_type.

        		APPEND event TO events.

* Object type and external event ID is also set when participants are uploaded by file        		
        		interaction_data-source_object_type = 'MARKETING_EVENT'.
        		interaction_data-source_object_id = interaction_data-content_title.
        	ENDIF.
        ENDIF.
   ENDIF.
ENDIF.<br>

So for event registration and participation interactions I check if the content title contains a value that matches the naming convention defined. Furthermore, I make sure to only link the event dependant on the event status. Otherwise, it will result in an error.

The external event ID is then used to read the event details from view I_MKT_MktgEvent. Those details are needed for the event object that can be filled for the interaction.

That's basically everything you need to do. The interaction is then linked to the event which is identified via the external event ID. In the example below, the contact registered for two days of the event.

You can also segment contacts by the event attributes.

This allows you to send (trigger-based) event details, e.g. the invitation with a webinar link.

former_member558862
Participant
0 Kudos

Unfortunatelly, I am facing some issues while doing more tests.

1) When embedding the form in a landing page, deploying it and submitted the form from the landing page, it seems like the custom logic is not executed. Event details are not added and trace is empty. It only works from the "Test" option in the form. What could be the reason?

2) The interactions are correct (just as shown above). They are only created for the events I ticked. Also in the interaction details, only the one event is linked.

However, the contact was added to all the events as you can see in segmentation.

I uploaded some participant via "Data File Load" and compared the interaction details. All the details/settings look identical. Also how the event is linked in the interaction.

When checking the custom logic trace only one event object (the correct one) is added. There are no further executions of the custom logic.

I removed the third event option to check how it behaves then. Still all three events are available in segmentation! They have in common that they are in status ready. It looks like the contact is just registered for all events with a specific status...

Any hint would be helpful...

Thank you