Cart has ObjectState Deleted after purchase



We are using Quicksilver and are having some problems with our cart.

After a purchase we use the _checkoutService.DeleteCart() but what happens is that the Cart.ObjectState set to Deleted, the cart doesn't seem to be removed. So when the user tries to add a new item to the cart a DeletedObjectInaccessibleException is thrown. How can I do to be sure that the cart is deleted and new one initiated?



Mar 31, 2016 14:36

If I clear the browser cache it works. How do I clear the cart cache?

Mar 31, 2016 15:09

Where are you calling this method.  Calling DeleteCart should delete the cart and invalidate the cache with out any additional steps needed.   

Mar 31, 2016 15:22

Thanks for your reply Mark!
Using the Quicksilver, it is called in the CheckoutController and method Finish. Just before the confirmation email is sent.

I think it has worked before but it suddenly stopped working. What could cause the cache to not invalidate?

The cart is delete from the Commerce Manager, so that is working.

Edited, Mar 31, 2016 15:46
public void DeleteCart()
            var cart = CartHelper.Cart;


Can you try changing to this I dont think the other calls are needed and there was a recent bug fix when deleting addresss it might be trying to delete the shipment that was just deleted before.

Mar 31, 2016 15:52

I actually found me doing this:

CartHelper.Cart.CustomerId = customerId;
CartHelper.Cart.CustomerName = customerName;

And after looking into the CartHelper code it looks lite the CustomerId is used for caching. I guess manipulating the CustomerId could be the problem.

Mar 31, 2016 16:07

So that was the problem!

During checkout I create a new contact and customer if it is an anonymous user and I want that customer connected to the cart. To do this I add the newly created customer to the cart by using:

CartHelper.Cart.CustomerId = customerId;

It works just fine and the purchase order is created with the new customer connected. BUT, since I changed the CustomerId the cart cache is not invalid because the CustomerId is used in the cache key.

The work around is to create the purchase order first and then connect new customer to the purchase order instead of the cart.

purchaseOrder.CustomerId = Guid.Parse(customerContact.PrimaryKeyId.ToString());
purchaseOrder.CustomerName = organization.Name;


Edited, Mar 31, 2016 16:53
* You are NOT allowed to include any hyperlinks in the post because your account hasn't associated to your company. User profile should be updated.