We’re having an issue where free gift campaigns sometimes are being “temporary suspended” and the free gift isn’t added to the customer’s cart even though the conditions are met.
The following is logged by the Litium.Foundation.Modules.ECommerce.Plugins.Campaigns.ICampaignProcessor
:
Message Campaign 'foo' temporary suspended, reason: Exception has been thrown by the target of an invocation.
The reason seems to be an error in the Loop54 push processor via the TargetGroupSessionEngineImpl which is invoked when the free gift is added to the cart by the campaign action.
In Litium.AddOns.Loop54.PushProcessor.Process(TargetGroupContext context, ITargetGroupEvent targetGroupEvent))
there is an attempt to fetch the current channel (see code below). However this fails sometimes which causes a NullReferenceException.
public void Process(TargetGroupContext context, ITargetGroupEvent targetGroupEvent)
{
var currentChannel = ((RouteRequestLookupInfoAccessor)context
.GetType()
.GetField("_routeRequestLookupInfoAccessor", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)
.GetValue(context))?
.RouteRequestLookupInfo?
.Channel;
Full stack trace:
System.Reflection.TargetInvocationException:
at System.RuntimeMethodHandle.InvokeMethod (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)
at System.Reflection.RuntimeMethodInfo.Invoke (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)
at Litium.Foundation.Modules.Relations.Plugins.TargetGroups.TargetGroupEngineWrapper.Process (Litium.Studio, Version=7.4.3.0, Culture=neutral, PublicKeyToken=093d4a638630e7c5)
at Litium.Foundation.Modules.ECommerce.Plugins.Checkout.CheckoutFlow.AddOrderRow (Litium.Studio, Version=7.4.3.0, Culture=neutral, PublicKeyToken=093d4a638630e7c5)
at Litium.Foundation.Modules.ECommerce.Plugins.Campaigns.Actions.FreeGiftAction.Process (Litium.Studio, Version=7.4.3.0, Culture=neutral, PublicKeyToken=093d4a638630e7c5)
at Litium.Foundation.Modules.ECommerce.Plugins.Campaigns.CampaignProcessor.Process (Litium.Studio, Version=7.4.3.0, Culture=neutral, PublicKeyToken=093d4a638630e7c5)
at Litium.Foundation.Modules.ECommerce.Plugins.Campaigns.CampaignProcessor.Process (Litium.Studio, Version=7.4.3.0, Culture=neutral, PublicKeyToken=093d4a638630e7c5)
Inner exception System.NullReferenceException handled at System.RuntimeMethodHandle.InvokeMethod:
at Litium.AddOns.Loop54.PushProcessor.Process (Litium.AddOns.Loop54, Version=7.4.100.0, Culture=neutral, PublicKeyToken=nullLitium.AddOns.Loop54, Version=7.4.100.0, Culture=neutral, PublicKeyToken=null: D:\a\1\s\Litium.AddOns.Loop54\PushProcessor.csLitium.AddOns.Loop54, Version=7.4.100.0, Culture=neutral, PublicKeyToken=null: 48)
at Litium.Web.Customers.TargetGroups.TargetGroupSessionEngineImpl.Process (Litium.Web.Application, Version=7.4.3.0, Culture=neutral, PublicKeyToken=093d4a638630e7c5)
We’ve added a null check for now in the Litium.AddOns.Loop54.PushProcessor.Process()
but this means that the event won’t be registered.
Any ideas on how to fix this?
Litium version: 7.4.3