Brian McKeiver's Blog

My Kentico EMS API Deep Dive Presentation


A few people asked me to provide my presentation from the Kentico User Group webinar that I presented at this past week. I have attached the presentation to this blog post.  I think it went really well considering the amount of people that attended and the feedback that I received from it.

Remember there is a great tip in there for how to use the new Kentico 8.2 MacroRuleInstanceTranslator class to optimize your contact group rebuild time and lead scoring calculation time for when you have a large volume of contacts in your Kentico instance.

The deck is embedded and can be downloaded from this post after the jump. 



Kentico 8.2 EMS API Deep Dive 

Kentico 8 EMS API Deep Dive from Mcbeev


MacroRuleInstanceTranslator Source Code


using System;
using CMS.DataEngine;
using CMS.Membership;
using CMS.OnlineMarketing;

internal class ContactIsDetroitLionsFanInstanceTranslator : IMacroRuleInstanceTranslator
/// Translates ContactIsDetroitsLionFanMacro rule. ///


public ObjectQuery Translate(MacroRuleInstance macroRuleInstance) { if (macroRuleInstance == null) { throw new ArgumentNullException("macroRuleInstance"); } if (macroRuleInstance.MacroRuleName != "ContactIsDetroitLionsFan") { throw new ArgumentException("[ContactIsDetroitLionsFanTranslator.Translate]: Only macro rule instances of type ContactIsDetroitLionsFan can be translated"); } var ruleParameters = macroRuleInstance.Parameters; // ruleParameters contains the data user enters in macro fields string paramIs = ruleParameters["_is"].Value; QueryOperator queryOperator = paramIs == "!" ? QueryOperator.NotEquals : QueryOperator.Equals; return ContactInfoProvider.GetContacts().Where("ContactIsDetroitLionsFan", queryOperator, true); } }






MacroRuleMetadataLoader Source Code








using System;
using System.Collections.Generic;
using CMS.Base;
using CMS.DocumentEngine;
using CMS.OnlineMarketing;

public partial class CMSModuleLoader


/// Attribute class that ensures the loading of custom macro rule translator. ///


private class CustomMacroRuleMetadataLoaderAttribute : CMSLoaderAttribute { ///


/// The system executes the Init method of the CMSModuleLoader attributes when the application starts. ///


public override void Init() { MacroRuleMetadata metadata = new MacroRuleMetadata( "ContactIsDetroitLionsFan", new ContactIsDetroitLionsFanInstanceTranslator(), affectingActivities: new List(0), affectingAttributes: new List { // Recalculate when specific attributes change "contactisdetroitlionsfan", "contactisgreenbaypackersfan" }); MacroRuleMetadataContainer.RegisterMetadata(metadata); } } }