9

In performing an audit of Sitecore logs, I came across a slew of Aggregation Errors on the Processing Server all complaining about a definition not found.

1172 11:08:41 ERROR Aggregation Error
Exception: System.Exception
Message: Definition not found: itemId: '{28A4B856-37C1-446C-B0C1-E56F78252AA0}' culture: 'Invariant Language (Invariant Country)' type: 'Sitecore.Marketing.Definitions.Campaigns.ICampaignActivityDefinition'
Source: Sitecore.ExperienceAnalytics
   at Sitecore.ExperienceAnalytics.Aggregation.Pipeline.SegmentProcessor.ProcessSegments(AggregationPipelineArgs args, IEnumerable`1 segments)
   at Sitecore.ExperienceAnalytics.Aggregation.Pipeline.SegmentProcessor.OnProcess(AggregationPipelineArgs args)
   at Sitecore.Analytics.Aggregation.Pipeline.AggregationProcessor.Process(AggregationPipelineArgs args)

Nested Exception

Exception: System.InvalidOperationException
Message: Definition not found: itemId: '{28A4B856-37C1-446C-B0C1-E56F78252AA0}' culture: 'Invariant Language (Invariant Country)' type: 'Sitecore.Marketing.Definitions.Campaigns.ICampaignActivityDefinition'
Source: Sitecore.ExperienceAnalytics
   at Sitecore.ExperienceAnalytics.Core.Repositories.ClassificationResolver`1.GetClassificationUris(ID itemId)
   at Sitecore.ExperienceAnalytics.Aggregation.Dimensions.CampaignFacetBase.HasDimensionKey(IVisitAggregationContext context)
   at Sitecore.ExperienceAnalytics.Aggregation.Dimensions.CampaignFacetBase.<GetData>d__3.MoveNext()
   at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
   at Sitecore.ExperienceAnalytics.Aggregation.Pipeline.SegmentProcessor.ProcessSegments(AggregationPipelineArgs args, IEnumerable`1 segments)

The Item Guid in Question points to a Campaign Item:

enter image description here

Every error in the log seems to point just to this item.

Has anyone seen this before?

  • Might seem to be an obvious question but is it published for particular target / language version? – Akshay Mahajan Oct 28 '16 at 15:24
15

Hot to fix

  1. In Sitecore, go to Control Panel -> Deploy Marketing Definitions.
  2. Select "Campaigns".
  3. Click "Deploy".

Deploy marketing definitions

See this official documentation page for detailed instructions on deploying marketing definitions:

https://doc.sitecore.net/sitecore_experience_platform/developing/marketing_operations/deploy_marketing_definitions

Explanation

Based on the error you're getting, xDB can't seem to find a definition of a particular campaign activity. Campaign activities are one of many types of marketing definitions; goals and outcomes are other examples. Marketing definitions are stored and retrieved by using repositories which may use different storage types. There are two default repository types that are shipped with Sitecore:

  • item repositories—these work with definition items directly. The default database used is master.
  • rdb repositories use the Reporting database. The reason for this is that some server roles (like the Processing server in your case) may not have direct access to the Master database.
  • remote repositories are used in environments where the Sitecore instance doesn't have direct access to the Reporting database. To access marketing definitions, remote repositories will query web services hosted on a remote reporting server.

In Sitecore configuration files, all repository references have the repository path parameterized.

<param
    desc="repository"
    ref="marketingDefinitions/campaign/repositories/$(marketingDefinitions.repository)" />

The value of the $(marketingDefinitions.repository) parameter is defined in Sitecore.Analytics.config as a variable and defaults to using item repositories:

<sc.variable name="marketingDefinitions.repository" value="item" />

This means that by default all marketing definitions will be read directly from items in the Master database.

Server role specific configs will override this setting. For example, here's an excerpt from Sitecore.MarketingProcessingRole.config in Sitecore 8.2:

<sc.variable name="marketingDefinitions.repository">
  <patch:attribute name="value">rdb</patch:attribute>
</sc.variable>

In order for an RDB repository to have up-to-date data, the data needs to be deployed there. Normally, when you create or update a marketing definition in the Master database, it will also be automatically deployed to RDB. But, in case the RDB was unavailable at the time, you will need to redeploy marketing definitions manually. This is exactly what the "Deploy Marketing Definitions" app does—it takes the selected types of marketing definitions from their item repositories and saves them to all the other repositories.

  • this is a great answer. I would like one edit. Can you add in a little burb about the remote repository? It's important to denote that it exists. – Pete Navarra Oct 30 '16 at 22:52
  • 2
    @PeteNavarra Thanks for the suggestion! Updated the answer. – Dmytro Shevchenko Oct 31 '16 at 19:05
0

I guess it's better to run all definitions.

  1. In Sitecore, go to Control Panel -> Deploy Marketing Definitions.
  2. Select all.
  3. Click "Deploy".

See official documentation:

https://doc.sitecore.net/sitecore_experience_platform/82/digital_marketing/marketing_operations/deploy_marketing_definitions

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.