AI agents: the content index is at /llms.txt. Every page is also available as Markdown — send the request header Accept: text/markdown, or append .md to the page URL.
Xperience Docs

Cookie consent

We use necessary cookies (opens in a new tab) to run our website and improve your experience while browsing. Additional cookies are only used with your consent. You may revoke your consent on the Cookies Policy (opens in a new tab) page or in your browser at any time.

Configure (opens in a new tab)
  • Documentation
    InstallationUsing the Xperience interfaceDeveloping websitesConfiguring XperienceManaging usersSecuring websitesDeploying websitesManaging website contentMultilingual websitesMacro expressionsExternal utilitiesIntegrating 3rd party systemsCustom developmentE-commerce featuresOn-line marketing featuresRelease notes - Xperience 13Xperience terminology glossary
  • Tutorial
    Using the Xperience interfaceDeveloper tutorialBusiness tutorialResource hub for marketers
  • API Examples
    ConfigurationContent managementDevelopmentE-commerceOn-line marketingSocial media
  • Community Questions & Answers (opens in a new tab)
  • Contact support (opens in a new tab)
  1. Home
  2. On-line marketing features
  3. Configuring and customizing your on-line marketing features
  4. Configuring marketing automation
  5. Handling marketing automation triggers

Handling marketing automation triggers


Was this page helpful?

Send us feedback Go back to top

Enterprise license required

Features described on this page require the Kentico Xperience Enterprise license.

You can influence the triggers that start Marketing automation processes by implementing custom handlers for the ProcessTrigger global event.

For example, you can use the handler to include additional 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 to add online form submit activity data into a marketing automation trigger macro resolver.

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

A trigger starts the process whenever a user submits the ContactUs form.

Now you can improve the trigger to make it start the process only when users submit the form with the "example.com" domain in the email field.

  1. Open your Xperience solution in Visual Studio (using the WebApp.sln file).

  2. Create a custom module class.

    • Add the class into a custom Class Library project within the solution (in your Xperience administration project, not the MVC live site project)..
  3. Override the module's OnInit method and assign a handler to the AutomationEvents.ProcessTrigger.Before event.

    C#
    using CMS;
    using CMS.DataEngine;
    using CMS.Automation;
    using CMS.OnlineForms;
    using CMS.Activities;
    using CMS.MacroEngine;
    
    // Registers the custom module into the system
    [assembly: RegisterModule(typeof(ProcessTriggerHandlerModule))]
    
    public class ProcessTriggerHandlerModule : Module
    {
        // Module class constructor, the system registers the module under the name "ProcessTriggerHandlers"
        public ProcessTriggerHandlerModule()
            : base("ProcessTriggerHandlers")
        {
        }
    
        // Contains initialization code that is executed when the application starts
        protected override void OnInit()
        {
            base.OnInit();
    
            // Assigns a handler to the AutomationEvents.ProcessTrigger.Before event
            AutomationEvents.ProcessTrigger.Before += ProcessTrigger_Before;
        }
    }
  4. Define the handler method (inside the custom module class):

    C#
    void ProcessTrigger_Before(object sender, AutomationProcessTriggerEventArgs e)
    {
        // Only applies to activity-based triggers
        if (e.TriggerInfo.TriggerTargetObjectType == ActivityTypeInfo.OBJECT_TYPE)
        {
            foreach (TriggerOptions option in e.Options)
            {
                // Gets the related activity from the macro resolver
                MacroResolver resolver = option.Resolver;
                ActivityInfo activity = resolver.GetNamedSourceData("Activity") as ActivityInfo;
    
                // Checks if the activity represents the "form submit" action
                if (activity != null && activity.ActivityType.Equals("bizformsubmit"))
                {
                    int formId = activity.ActivityItemID;
                    int itemId = activity.ActivityItemDetailID;
    
                    // Gets the form
                    BizFormInfo form = BizFormInfo.Provider.Get(formId);
    
                    if (form != null)
                    {
                        // Gets the submitted form data
                        string 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);
                        }
                    }
                }
            }
        }
    }
  5. Save the class and Rebuild your solution.

You can now use FormData in the trigger condition evaluation. Change the trigger's macro condition to:

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

The trigger now automatically starts instances of the process when a visitors submits the form with the "@example.com" suffix in the value of the Email field.

Related pages

  • Setting triggers for automation processes
  • Handling global events
  • Reference - Global system events