Delivery has already been changed in the database

We have a scheduled task that updates order delivery state based on information from the ERP. On some orders, but not all, we get the following error:

Task throw exception: Delivery (<guid>) has already been changed in the database. Get a new copy of the object and submit your changes again.

Litium.Foundation.Modules.ECommerce.Data.ConcurrencyException: Delivery (<guid>) has already been changed in the database. Get a new copy of the object and submit your changes again.
   at Litium.Foundation.Modules.ECommerce.Data.DeliveryDataProvider.Update(DeliveryCarrier carrier, SqlCommand openCommand)
   at Litium.Foundation.Modules.ECommerce.Data.DeliveryDataProvider.Update(DeliveryCarrier carrier)
   at Litium.Foundation.Modules.ECommerce.Deliveries.Delivery.UpdateFromCarrier(DeliveryCarrier carrier, SecurityToken token)
   at Litium.Foundation.Modules.ECommerce.StateTransitionSystem.FiniteStateMachine`1.UpdateDatabase(CarrierType carrier, UpdateFromCarrierHandler updateFromCarrier, SecurityToken token)
   at Litium.Foundation.Modules.ECommerce.StateTransitionSystem.FiniteStateMachine`1.TransitionAction(StateTransition`1 stateTransition, CarrierType carrier, UpdateFromCarrierHandler updateFromCarrier, SecurityToken token)
   at Litium.Foundation.Modules.ECommerce.StateTransitionSystem.FiniteStateMachine`1.TransitionAction(Int16 nextStateId, CarrierType carrier, UpdateFromCarrierHandler updateFromCarrier, SecurityToken token)
   at Litium.Foundation.Modules.ECommerce.Deliveries.Delivery.SetDeliveryStatus(Int16 state, SecurityToken token)
   at Litium.Accelerator.Tasks.OrderStatusSyncTask.ExecuteTask(SecurityToken token, String parameters) in C:\projects\customer\Src\Litium.Accelerator\Tasks\OrderStatusSyncTask.cs:line 72
   at Litium.Foundation.Tasks.ScheduledTaskManager.TaskExecutionContext`1.ExecuteTask(SecurityToken token, String parameters)
   at Litium.Foundation.Tasks.ScheduledTaskManager.TimerEvent(Object arg)

The code that updates the delivery state is rather simple:

_logger.LogTrace($"Setting delivery for order {order.ExternalOrderNo} to delivered");
var lOrder = _moduleEcommerce.Orders.GetOrder(order.ExternalOrderNo, _moduleEcommerce.AdminToken);
var shipment = lOrder.Deliveries.FirstOrDefault(); // Only expect one delivery
shipment.SetDeliveryStatus((short)DeliveryState.Delivered, _moduleEcommerce.AdminToken);

What could be the cause for this?

Litium version: 7.6.1

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.