Logging custom activities through the API

Enterprise license required

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

In addition to the default activity types used by the contact management feature, you can also create custom activity types:


Only users with the global administrator privilege level can define custom activity types.

  1. Open the Contact management application.
  2. Switch to Configuration -> Activity types.
  3. Click New activity type.
  4. Fill in the display name andnote the code name of your new activity type.

New activity type

After you add a custom activity type, you can use the Xperience API to log the activity for contacts. You need to:

  1. Open your project in Visual Studio.

  2. Create an initializer class for your activity type. The class must inherit from CMS.Activities.CustomActivityInitializerBase.

    Add the class into a custom Class Library within your solution.

    Custom activity class example
     using CMS.Activities;
     public class MyActivityInitializer : CustomActivityInitializerBase
         private readonly string activityValue;
         /// <summary>
         /// Default constructor that takes activity data as parameters.
         /// </summary>
         public MyActivityInitializer(string activityValue)
             this.activityValue = activityValue;
         /// <summary>
         /// Initializes an activity with required data.
         /// </summary>
         public override void Initialize(IActivityInfo activity)
             activity.ActivityTitle = "My custom activity title";
             activity.ActivityValue = activityValue;
         /// <summary>
         /// The code name of the corresponding activity type in Xperience.
         /// </summary>
         public override string ActivityType
                 return "MyActivity";
  3. Call the Log method of the IActivityLogService service within the code where you want the activity to be logged.

    Logging the activity
     using CMS.Core;
     using CMS.Activities;
     using CMS.Helpers;
     // Gets an instance of the activity logging service
     // In real-world scenarios, we recommend using dependency injection to get service instances
     var service = Service.Resolve<IActivityLogService>();
     // Prepares an initializer for logging the activity
     var activityInitializer = new MyActivityInitializer("value");
     // Logs the activity

    Tip: If  you need to log your activity in code where the HTTP request context is not available (for example in certain types of custom scheduled tasks), call the LogWithoutModifiersAndFilters(IActivityInitializer activityInitializer) method instead of Log.

The system now logs the custom activity when your custom code is triggered.