Is this really the version you are looking for? Kentico 8 documentation is no longer updated. Use the switch in the header to choose your Kentico version.

Handling marketing automation triggers

You can influence trigger processing when a Marketing automation process is starting using the ProcessTrigger handler. For example, you can use the handler to penetrate activity data into the trigger macro resolver. This then allows you to create macro conditions that start a Marketing automation process, for example, based on the data submitted by a contact in a column of an online form.

Example

The following example demonstrates how you can penetrate online form submit activity data into a Marketing automation trigger macro resolver.

You have a Marketing automation process that subscribes contacts to a newsletter.

Marketing automation process that subscribers contacts to newsletters

A triggers starts the process whenever a user submits the ContactUs form, as displayed in the following picture.

Trigger starts the marketing automation process when users submits a form

Now, you can improve the trigger to make it start the process only when users who use the "example.com" domain in the e-mail they submit to the form.

  1. Assign a handler to the AutomationEvents.ProcessTrigger.Before event. The example uses a custom class in the App_Code folder:

    using CMS.Base;
    using CMS.Automation;
    using CMS.DataEngine;
    using CMS.OnlineForms;
    using CMS.OnlineMarketing;
    
    [TriggerHandler]
    public partial class CMSModuleLoader
    {
        /// <summary>
        /// Custom attribute class
        /// </summary>
        private class TriggerHandler : CMSLoaderAttribute
        {
    	    /// <summary>
            /// Called automatically when the application starts
            /// </summary>
            public override void Init()
            {
    			// Assigns a handler to the AutomationEvents.ProcessTrigger.Before event
                AutomationEvents.ProcessTrigger.Before += ProcessTrigger_Before;
            }
        } 
    }
  2. Define the handler method (inside the custom CMSLoaderAttribute class):

    void ProcessTrigger_Before(object sender, AutomationProcessTriggerEventArgs e)
    {
        // Processes trigger based on activity
        if (e.TriggerInfo.TriggerTargetObjectType == PredefinedObjectType.ACTIVITY)
        {
            // Gets activity from resolver
            var resolver = e.Options.Resolver;
            ActivityInfo activity = resolver.GetNamedSourceData("Activity") as ActivityInfo;
            if (activity != null)
            {
                // Checks if the activity represents form submit
                if (activity.ActivityType.EqualsCSafe("bizformsubmit"))
                {
                    int formId = activity.ActivityItemID;
                    int itemId = activity.ActivityItemDetailID;
    
                    // Gets form
                    BizFormInfo form = BizFormInfoProvider.GetBizFormInfo(formId);
    
                    if (form != null)
                    {
                        // Gets the submitted form data
                        var className = DataClassInfoProvider.GetClassName(form.FormClassID);
                        BizFormItem item = BizFormItemProvider.GetItem(itemId, className);
                        if (item != null)
                        {
                            // Makes FormData available in the trigger condition evaluation
                            resolver.SetNamedSourceData("FormData", item);
                        }
                    }
                }
            }
        }
    }
  3. Save the class. You can now use FormData in the trigger condition evaluation.
  4. Change the trigger condition to:

    FormData["Email"].EndsWith("@example.com")

  5. Submit the form using "@example.com" in the E-mail field.

The trigger automatically starts the process.