My Kentico EMS API Deep Dive Presentation
Introduction
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
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; [CustomMacroRuleMetadataLoader] 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); } } }