On a Sitecore 9.1 project recently I ran into an issue relating to Federated Experience Manager due to a hidden and undocumented configuration usage.
In the project I was working on the environment was set up for multisite, and when I put the FXM javascript token on an owned, but non-sitecore site, the instance started erroring on all transactions and was completely failing at tracking users on the external site (the whole point of FXM).
Looking into the error logs I was receiving the following error:
2019-03-06T18:10:46 PID[20904] Error 21720 18:10:46 ERROR [FXM Tracking] [Error] : [TrackPageVisit] : Page = https://www.mysite.com/ : Referrer = https://www.mysite.com/ : CID = 307a8e720ff042d6b6fc5af7704a4198|True
Exception: System.NullReferenceException
Message: Object reference not set to an instance of an object.
Source: Sitecore.FXM
at Sitecore.FXM.Utilities.FxmUtility.GetWebDatabaseName(BaseSiteManager siteManager, BaseSettings settings)
at Sitecore.FXM.Pipelines.Tracking.InitializeContext.InitializeContextSiteProcessor.ResolveSiteContext(IDomainMatcher domainMatcher)
at Sitecore.FXM.Pipelines.Tracking.InitializeContext.InitializeContextSiteProcessor.Process(TrackingInitializeContextArgs args)
at (Object , Object )
at Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args)
at Sitecore.Pipelines.DefaultCorePipelineManager.Run(String pipelineName, PipelineArgs args, String pipelineDomain, Boolean failIfNotExists)
at Sitecore.Pipelines.DefaultCorePipelineManager.Run(String pipelineName, PipelineArgs args, String pipelineDomain)
at Sitecore.FXM.Pipelines.Tracking.TrackPageVisit.RunInitializeTrackingContextProcessor.Process(ITrackPageVisitArgs args)
at (Object , Object[] )
at Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args)
at Sitecore.Pipelines.DefaultCorePipelineManager.Run(String pipelineName, PipelineArgs args, String pipelineDomain, Boolean failIfNotExists)
at Sitecore.Pipelines.DefaultCorePipelineManager.Run(String pipelineName, PipelineArgs args, String pipelineDomain)
at Sitecore.FXM.Tracking.TrackingManager.<>c__DisplayClass6_0.<TrackPageVisit>b__0(FxmRequestContext fxmContext, TrackingResult result)
at Sitecore.FXM.Tracking.TrackingManager.GenericServeTrackingRequest(SpoofedHttpRequestBase spoofedRequest, String contactId, Action`2 implementation)
at Sitecore.FXM.Service.Controllers.BeaconController.<>c__DisplayClass10_0.<TrackPageVisit>b__0()
at Sitecore.FXM.Service.Controllers.BeaconController.ExecuteTrackingRequest(String requestInfo, Func`1 implementation)
What I found out (with the help of Sitecore Support), is that FXM uses the configuration setting “Preview.DefaultSite” to determine what website is its default.
<setting name=”Preview.DefaultSite” value=”website” />
This is not documented by Sitecore, and seems like an oversight from development. In my multi-site application, I removed the “website” site configuration, so a null reference was created on the default site for preview. Updating Preview.DefaultSite to any of the sites defined in the configurations caused FXM to begin working as expected.
A very small change to correct what was a game breaking bug.



