Definition managers

Definition managers are used to get, create, search, activate, and delete marketing activities.

Get definition manager in a Sitecore context

The following example demonstrates how to retrieve the IGoalDefinitionManager in a Sitecore context:

using Sitecore.DependencyInjection;
using Sitecore.Marketing.Definitions;
using Sitecore.Marketing.Definitions.Goals;


namespace Documentation
{
    public class DefineAGoal
    {
        public void Example()
        {
            IDefinitionManager<IGoalDefinition> goalDefinitionManager = ServiceLocator.ServiceProvider.GetDefinitionManagerFactory().GetDefinitionManager<Sitecore.Marketing.Definitions.Goals.IGoalDefinition>();
        }
    }
}

Construct definition manager in a non-Sitecore context

The following example demonstrates how to construct the AutomationPlanDefinitionManager in a non-Sitecore context using the Reference Data Service as a repository.

Note

You must add a xdb.referencedata.client connection string to the application’s ConnectionStrings.config file that points to the Reference Data Service end point - for example, https://refdata/.

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Sitecore.Marketing.Definitions;
using Sitecore.Marketing.Definitions.AutomationPlans;
using Sitecore.Marketing.Definitions.AutomationPlans.Model;
using Sitecore.Marketing.Definitions.Config;
using Sitecore.Marketing.ObservableFeed.Activation;
using Sitecore.Marketing.ObservableFeed.DeleteDefinition;
using Sitecore.Marketing.Operations.Xdb.ReferenceData.Model.Definitions.AutomationPlans;
using Sitecore.Marketing.Operations.Xdb.ReferenceData.Service.Definitions.AutomationPlans;
using Sitecore.Marketing.Search;
using Sitecore.Marketing.Taxonomy;
using Sitecore.Xdb.ReferenceData.Client;
using Sitecore.Xdb.ReferenceData.Core.Converter;
using Sitecore.Xdb.ReferenceData.Core.Results;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Sitecore.Marketing.Core.ObservableFeed;
using Sitecore.Xdb.Common.Web;

namespace Documentation
{
    public class DefinitionManagerExternal
    {
        public static AutomationPlanDefinitionManager CreatePlanDefinitionManager()
        {
            var loggerFactory = new LoggerFactory();

            // Replace value of FindValue= with certificate thumbprint for your reference data service
            CertificateWebRequestHandlerModifierOptions options =
            CertificateWebRequestHandlerModifierOptions.Parse("StoreName=My;StoreLocation=LocalMachine;FindType=FindByThumbprint;FindValue=15E6693B0AECB63DE57D991EC363CA462DC52432");

            // Optional timeout modifier
            IWebRequestHandlerModifier[] handlers = { new CertificateWebRequestHandlerModifier(options) };


            var refDataClient = new ReferenceDataHttpClient(
                new DefinitionEnvelopeJsonConverter(),
                handlers,
                new Logger<ReferenceDataHttpClient>(loggerFactory)
            );

            var repo = new PlanDefinitionReferenceDataRepository(
                refDataClient,
                new PlanDataConverter(),
                new GuidMonikerConverter(),
                new DefinitionOperationResultDiagnostics()
            );

            var services = new ServiceCollection();

            services.AddSingleton<ITaxonomyManagerProvider, TaxonomyManagerProvider>();
            services.AddSingleton<ITaxonomyClassificationResolver<IAutomationPlanDefinition>, DefaultClassificationResolver<IAutomationPlanDefinition>>();
            services.AddSingleton<FieldTaxonomyMap<IAutomationPlanDefinition>>();

            IServiceProvider serviceProvider = services.BuildServiceProvider();

            var classificationResolver = serviceProvider.GetRequiredService<ITaxonomyClassificationResolver<IAutomationPlanDefinition>>();

            return new AutomationPlanDefinitionManager(
                repo,
                classificationResolver,
                new NotSupportedSearchProvider<IAutomationPlanDefinition>(),
                new ActivationRetryingObservableFeed<IAutomationPlanDefinition>(new Logger<ActivationRetryingObservableFeed<IAutomationPlanDefinition>>(loggerFactory)),
                new DummyDeleteDefinitionObservableFeed(),
                new DefaultDefinitionManagerSettings()
            );
        }

        class DummyDeleteDefinitionObservableFeed : IDeleteDefinitionObservableFeed<IAutomationPlanDefinition>
        {
            public void NotifyObservers(DeleteDefinitionArgs<IAutomationPlanDefinition> value)
            {
            }

            IList<Sitecore.Marketing.Core.ObservableFeed.IObserver<DeleteDefinitionArgs<IAutomationPlanDefinition>>> IObservableFeed<DeleteDefinitionArgs<IAutomationPlanDefinition>>.Observers
            {
                get;
            }
        }

    }
}