Customizing Behavior with Extensions

Extensions are developer-defined software modules that modify the behavior of Ektron.

In versions previous to 8.0, developers used the Plug-in Extension Wizard to extend the system. In versions 8.0 and higher, Extensions are preferred over the Plug-in system.

The benefits of Extensions include:

This section also contains these topics.

Event handlers

Event Handlers

An event is a type of activity that occurs in Ektron and is exposed through the Extension Framework. An event handler is a method that executes when an event occurs.

Extensibility strategies and events
Class and Events
Ektron.Cms.Extensibility.CommunityGroupStrategy
OnAdd(Ektron.Cms.CommunityGroupData, Ektron.Cms.Extensibility.CmsEventArgs)
OnAfterUserAdd(long, long, Ektron.Cms.Extensibility.CmsEventArgs)
OnAfterUserDelete(long, long, Ektron.Cms.Extensibility.CmsEventArgs)
OnDelete(long, Ektron.Cms.Extensibility.CmsEventArgs)
OnUpdate(Ektron.Cms.CommunityGroupData, Ektron.Cms.Extensibility.CmsEventArgs)
Ektron.Cms.Extensibility.ContentStrategy
OnAfterAddContent(Ektron.Cms.ContentData, Ektron.Cms.Extensibility.CmsEventArgs)
OnAfterDeleteContent(long, Ektron.Cms.Extensibility.CmsEventArgs)
OnAfterPublishContent(Ektron.Cms.ContentData, Ektron.Cms.Extensibility.CmsEventArgs) OnAfterUpdateContent(Ektron.Cms.ContentData, Ektron.Cms.Extensibility.CmsEventArgs)
OnBeforeAddContent(Ektron.Cms.ContentData, Ektron.Cms.Extensibility.CmsEventArgs)
OnBeforeDeleteContent(long, Ektron.Cms.Extensibility.CmsEventArgs)
OnBeforePublishContent(Ektron.Cms.ContentData, Ektron.Cms.Extensibility.CmsEventArgs) OnBeforeUpdateContent(Ektron.Cms.ContentData, Ektron.Cms.Extensibility.CmsEventArgs)
Ektron.Cms.Extensibility.FolderStrategy

OnAfterAddFolder(Ektron.Cms.FolderData, Ektron.Cms.Extensibility.CmsEventArgs)
OnAfterDeleteFolder(long, Ektron.Cms.Extensibility.CmsEventArgs)
OnAfterUpdateFolder(Ektron.Cms.FolderData, Ektron.Cms.Extensibility.CmsEventArgs)
OnBeforeAddFolder(Ektron.Cms.FolderData, Ektron.Cms.Extensibility.CmsEventArgs)
OnBeforeDeleteFolder(long, Ektron.Cms.Extensibility.CmsEventArgs)
OnBeforeUpdateFolder(Ektron.Cms.FolderData, Ektron.Cms.Extensibility.CmsEventArgs)

Ektron.Cms.Extensibility.MessageBoardStrategy

OnAdd(Ektron.Cms.MessageBoardData, Ektron.Cms.Extensibility.CmsEventArgs)
OnAfterReplyAdd(Ektron.Cms.MessageBoardData, Ektron.Cms.Extensibility.CmsEventArgs)
OnDelete(long, Ektron.Cms.Extensibility.CmsEventArgs)
OnMessageApprove(Ektron.Cms.MessageBoardData, Ektron.Cms.Extensibility.CmsEventArgs)
OnUpdate(Ektron.Cms.MessageBoardData, Ektron.Cms.Extensibility.CmsEventArgs)

Ektron.Cms.Extensibility.MicroMessageStrategy
OnAfterAdd(Ektron.Cms.MicroMessageData, Ektron.Cms.Extensibility.CmsEventArgs)
OnAfterDelete(long, Ektron.Cms.Extensibility.CmsEventArgs)
OnBeforeAdd(Ektron.Cms.MicroMessageData, Ektron.Cms.Extensibility.CmsEventArgs)
OnBeforeDelete(long, Ektron.Cms.Extensibility.CmsEventArgs)
Ektron.Cms.Extensibility.TagStrategy
OnAdd(Ektron.Cms.TagData, Ektron.Cms.Extensibility.CmsEventArgs)
OnDelete(long, Ektron.Cms.Extensibility.CmsEventArgs)
OnUpdate(Ektron.Cms.TagData, Ektron.Cms.Extensibility.CmsEventArgs)
Ektron.Cms.Extensibility.TaxonomyStrategy

OnAfterAdd(Ektron.Cms.TaxonomyData, Ektron.Cms.Extensibility.CmsEventArgs)
OnAfterAssignItem(Ektron.Cms.TaxonomyRequest, Ektron.Cms.Extensibility.CmsEventArgs)
OnAfterDelete(long, Ektron.Cms.Extensibility.CmsEventArgs)
OnAfterUpdate(Ektron.Cms.TaxonomyData, Ektron.Cms.Extensibility.CmsEventArgs)
OnBeforeAdd(Ektron.Cms.TaxonomyData, Ektron.Cms.Extensibility.CmsEventArgs)
OnBeforeAssignItem(Ektron.Cms.TaxonomyRequest, Ektron.Cms.Extensibility.CmsEventArgs)
OnBeforeDelete(long, Ektron.Cms.Extensibility.CmsEventArgs)
OnBeforeUpdate(Ektron.Cms.TaxonomyData, Ektron.Cms.Extensibility.CmsEventArgs)

Ektron.Cms.Extensibility.UserStrategy
OnAfterAddColleague(long, long, Ektron.Cms.Extensibility.CmsEventArgs)
OnAfterAddUser(Ektron.Cms.UserData, Ektron.Cms.Extensibility.CmsEventArgs)
OnAfterColleagueRequest(Ektron.Cms.Community.ActionRequestData, Ektron.Cms.Extensibility.CmsEventArgs)
OnAfterDeleteUser
(long, Ektron.Cms.Extensibility.CmsEventArgs)
OnAfterLogin(Ektron.Cms.UserData, Ektron.Cms.Extensibility.CmsEventArgs)
OnAfterUpdateUser(Ektron.Cms.UserData, Ektron.Cms.Extensibility.CmsEventArgs)
OnBeforeAddUser(Ektron.Cms.UserData, Ektron.Cms.Extensibility.CmsEventArgs)
OnBeforeDeleteUser(long, Ektron.Cms.Extensibility.CmsEventArgs)
OnBeforeLogin(Ektron.Cms.UserData, Ektron.Cms.Extensibility.CmsEventArgs)
OnBeforeUpdateUser(Ektron.Cms.UserData, Ektron.Cms.Extensibility.CmsEventArgs)
Ektron.Cms.Extensibility.WebEventStrategy
OnAfterAdd(Ektron.Cms.Common.Calendar.WebEventData, Ektron.Cms.Extensibility.CmsEventArgs) OnAfterAddVariance(Ektron.Cms.Common.Calendar.WebEventData, Ektron.Cms.Extensibility.CmsEventArgs) OnAfterCancelOccurrence(Ektron.Cms.Common.Calendar.WebEventData, Ektron.Cms.Extensibility.CmsEventArgs)
OnAfterDelete
(long, Ektron.Cms.Extensibility.CmsEventArgs)
OnAfterPublish(Ektron.Cms.Common.Calendar.WebEventData, Ektron.Cms.Extensibility.CmsEventArgs) OnAfterUpdate(Ektron.Cms.Common.Calendar.WebEventData, Ektron.Cms.Extensibility.CmsEventArgs) OnBeforeAdd(Ektron.Cms.Common.Calendar.WebEventData, Ektron.Cms.Extensibility.CmsEventArgs) OnBeforeAddVariance(Ektron.Cms.Common.Calendar.WebEventData, Ektron.Cms.Extensibility.CmsEventArgs) OnBeforeCancelOccurrence(Ektron.Cms.Common.Calendar.WebEventData, Ektron.Cms.Extensibility.CmsEventArgs)
OnBeforeDelete
(long, Ektron.Cms.Extensibility.CmsEventArgs)
OnBeforePublish(Ektron.Cms.Common.Calendar.WebEventData, Ektron.Cms.Extensibility.CmsEventArgs) OnBeforeUpdate(Ektron.Cms.Common.Calendar.WebEventData, Ektron.Cms.Extensibility.CmsEventArgs)
Using Visual Studio to create a new CMS extension

Using Visual Studio to Create a New Extension

  1. In Visual Studio, open your Web site.
  2. Add a new C# class to the App_Code directory.
  3. The Class1.cs code page appears in the editor.

  4. Add references to the following assemblies if they are not already added.
    Ektron.CMS.Common
    Ektron.CMS.Contracts
    Ektron.CMS.ObjectFactory

    If the assemblies are not installed in Visual Studio, you can find them in the siteroot/bin directory.

  5. Add the following using statements to the top of the class.
    using Ektron.Cms;
    using Ektron.Cms.Common;
    using Ektron.Cms.Extensibility;
    using Ektron.Cms.Extensibility.Content;        
  6. Update the class to extend Ektron.Cms.Extensibility.ContentStrategy.
    namespace Cms.Extensions.Samples
        {
        public class ContentExtensionsSample : ContentStrategy
            {
            }
        }

    NOTE: The namespace in the code above is Cms.Extensions.Samples. This information is needed for Step 8.

  7. Override the method for the event you wish to catch. In this example, override OnBeforeAddContent(). The code to modify the Title looks like this.
    public override void OnBeforeAddContent(ContentData contentData, CmsEventArgs eventArgs)
    {
        contentData.Title += " modified";
    }        
  8. This is what the final code looks like.
    using System;
    using System.Collections.Generic;
    using System.Text;
    using Ektron.Cms;
    using Ektron.Cms.Common;
    using Ektron.Cms.Extensibility;
    using Ektron.Cms.Extensibility.Content;
    namespace Cms.Extensions.Samples
    {
    public class ContentExtensionsSample : ContentStrategy
      {
      public override void OnBeforeAddContent(ContentData contentData, CmsEventArgs eventArgs)
      {
      contentData.Title += " modifed";
      }
    }
    
Register the new extension in the ObjectFactory

Register the New Extension in the ObjectFactory

After creating the extension in the steps above, register it in the <webroot>/ObjectFactory.config file.

This file already contains GoogleGeoCoder objectStrategies, so you need to add a new Name in the Content area. In this example, the code looks like this.

<objectFactory>
  <objectStrategies>
    <add name="Content">
      <strategies>
        <add name="MyFirstExample" 
          type="Cms.Extensions.Samples.ContentExtensionsSample,ContentExtensionsSample"/>
        <add name="GoogleGeoCoder" type="Cms.Extensions.GoogleGeoCoder.ContentStrategy,
          Cms.Extensions.GoogleGeoCoder"/>
      </strategies>
    </add>
    <add name="User">
      <strategies>
        <add name="GoogleGeoCoder" type="Cms.Extensions.GoogleGeoCoder.UserStrategy,
          Cms.Extensions.GoogleGeoCoder"/>
      </strategies>
    </add>
  </objectStrategies>
</objectFactory> 
More information about ObjectFactory objectStrategies

More Information about ObjectFactory objectStrategies

  • The CMS Extension must be registered in the objectStrategies section of the siteroot/ObjectFactory.configfile.
  • The required node <add name="Content"> indicates you are defining "Content" extensions.
  • In the <strategies> section, you may add one or more extensions for content.
  • To add a strategy, you must define 2 properties: Name and Type.
    • Name is any unique name that identifies the extension. A list of valid names is in the table below.
    • Type is a fully-qualified name of the type you register as the extension. It contains type name (the NameSpace + type).
See list of valid names.

List of Valid Names

  • Inventory
  • Coupon
  • BasketCalculator
  • CouponCalculator
  • ShippingCalculator
  • TaxCalculator
  • Country
  • Region
  • Basket
  • Blog
  • Order
  • Customer
  • CatalogEntry
  • CommunityGroup
  • Tag
  • MessageBoard
  • MicroMessage
  • Content
  • Folder
  • User
  • Forum
  • WebEvent
  • Taxonomy
Test the new extension

Test the New Extension

The new extension (created in the examples above) adds "modified" to the end of a new content item's title. To test this, create new content in the Workarea. "modified" will be appended to the end of the title.

More examples of extensions

More Examples of Extensions

More examples of Extensions are found in the Ektron SDK folder. The default location for this folder is Program Files\Ektron\CMS400SDK\CMS Extensions.
Also, samples of eCommerce extensions are found in Program Files\Ektron\CMS400SDK\Commerce\Events.

Video tutorial about Extensions

To see more code samples and a video tutorial on Extensions, visit the Ektron Developer Center at this address: http://dev.ektron.com/blogs.aspx?id=29648&blogid=68.