We needed to update EPiServer.Find to correct a bug and made an full update of CMS and Commerce. Now we have a few problems with the cart. We are running a Quciksilver based solution.
The first error we got was that we were unable to put things in the cart because the items was lacking a price. We are using an integration towards Jeeves to get prices based on the logged in user so we do not have any prices in EPiServer. This has not caused any issues before.
We solved that by implementing a custom PriceService which returns 0 kr prices.
But now we have the next problem. We update the prices in the CartService so when the cart is requested we send a simulated order to Jeeves and gets the prices back for the given items and the given customer.
When doing this and running the CartValidate workflow the prices are now reset to 0 kr again and we get a warning message about it in the workflow result. Is there any workaround to this or is there any new better way to handle prices from an external source since the base functionality that has worked before has stopped working?
I'm not sure which version you were on and which version you upgraded to - but I think the most suitable solution in your case is to implement your custom implementation of IPriceService, which will get the prices from Jeeves. Many parts of Episerver Commerce relies on IPriceService to return something.
We upgraded from Commerce 9.8.1 to 9.13. The problem with the IPriceProvider is that it is very hard to control how prices are fetched. When using this approch it is very apparent that it is querying for single prices very often and alo used when the indexer for Find is run for example. In most of these situation we do not want to have to query the Jeeves service for prices and therefor the implementation as it worked before seemed much better. We queried for prices for the given customer and only those SKU's that were in the current cart, the current listing or variants on a product page.
All other things works as usual but the cart handling seems to have changed and now resets the price when running Validate cart.
But a workaround for it could perhaps be if we in the AddToCart method could use the Jeevesservice and set the price on the given entry and skip the use of a custom PriceService. Not sure though if the same error would still remain since the CartValidate still needs to run.
Yes that sounds like a viable solution.
Btw the change you see was from this bug: http://world.episerver.com/support/Bug-list/bug/COM-911 in Commerce 9.9. Again, the workflow project is open sourced and if you want to - you can revert the change from ValidateLineItemActivity.
No same issue comes up even if we try to manually add a price to the enrty at AddToCart
Item "xxx" has been removed from the cart. The line item doesn't have price associated.
So we are back at square one. Funny how some bugs can be working out well in other situations...
Feels like we have to try to implement a smart PriceService which can separate price queries from when coming from the frontend site and when called upon from internal listings och indexing procedures.
Or as you said revert the ValidateLineItemActivity, but that feels a bit to risky and diverting to much from the standard way of handling things which can lead to other consequences in the future.
Workflows are supposed to be modified to fit with your business - so many customers have done it that way.
However, if you are shy away from that solution - then make a simple implementation of IPriceService to return 0kr price. I just checked the code and ValidateLineItem will call to IPriceService to get the price, so overriding AddToCart would not help 0 my bad.
Perhaps should put this in another thread but looking at the workflows and trying to implement those but get the following errors after following the instructions on the download page: http://world.episerver.com/download/Items/Episerver-Commerce/episerver-commerce-9-tools-and-code-samples/
SeverityCodeDescriptionProjectFileLineSuppression StateErrorCS1061'IOrderGroup' does not contain a definition for 'GetTotals' and no extension method 'GetTotals' accepting a first argument of type 'IOrderGroup' could be found (are you missing a using directive or an assembly reference?)Mediachase.Commerce.WorkflowC:\Projekt\Customer\Sources\Mediachase.Commerce.Workflow\Activities\OrderGroupActivities\UpdateTotalsVNextActivity.cs61Active
SeverityCodeDescriptionProjectFileLineSuppression StateErrorCS1061'PromotionInformation' does not contain a definition for 'PromotionInformationEntries' and no extension method 'PromotionInformationEntries' accepting a first argument of type 'PromotionInformation' could be found (are you missing a using directive or an assembly reference?)Mediachase.Commerce.WorkflowC:\Projekt\Customer\Sources\Mediachase.Commerce.Workflow\Activities\OrderGroupActivities\CalculateDiscountsVNextActivity.cs31Active
Are those workflows updated to work with the 9.13 version of Commerce?
The workflow in that link is for Commerce 9.11.1 - we made some changes in Commerce 9.13. We'll put the version for Commerce 9.13 shortly. If you want, drop me an email and I send it to you right away.