Views: 4177
Number of votes: 0
Average rating:

Programing changes required while Upgrading Episerver Commerce R2 to R2SP1 and R2SP2 - Part 1

Below is summary of issue that we have faced in upgrading different sites from R2 to R2SP1 and R2SP2.

Basic steps




Breaking changes:

1 - Issue:
If you try to import the business foundation object / meta-class but you get Access Denied exception. Please check the access to the path
%CommerceManager%\\app_data\\ImportExport\\Commerce Manager\\metadata'.

If this folder doesn’t exist, please create it.

2 - IShippingGateway:

Backward compatability Issue. In Commerce R2SP1, IShippingGateway required implement ShippingRate GetRate(Guid methodId, Shipment shipment, ref string message), not ShippingRate GetRate(Guid methodId, LineItem[] items, ref string message).

Therefore you need to add the new implementation for GetRate in your custom ShippingGateway and change all the call to GetRate function. Then rebuild the solution.

3 - Browsing the site and see the error:
The Type 'EPiServer.Business.Commerce.CommerceSettings' needs to be remapped in the Dynamic Data Store, see the Errors collection for more information.

Remapping can be done by applying the EPiServer.Data.Dynamic.EPiServerDataStoreAttribute attribute to the type,
setting its AutomaticallyRemapStore property to true and ensuring the <episerver.dataStore><dataStore> autoRemapStores attribute in web.config is set to true (or is not defined).
Alternatively call the Upgrade-EPiRemapDDSTypes cmdlet from Powershell.

Please run these commands in PowerShell:
Add-PSSnapin EPiServer.Framework.Install.
Upgrade-EPiRemapDDSTypes -ApplicationPath $applicationPath -Type "EPiServer.Business.Commerce.CommerceSettings"
$appllicationPath is the path to root folder of cms site.

4 - Changes in index data and searching for catalognode:

If we want to search for the entries/products in a catalognode, we need to use the _outline field. The code should look like this:
    if (String.IsNullOrEmpty(categoryCode))
                var productRootNode = CatalogContext.Current.GetCatalogNodes(CommerceSettings.Default.MainCatalogName, CommerceSettings.Default.ProductNodeCode);
                if (productRootNode.CatalogNode.Count() <= 0)
                    return new List<Entry>();
                foreach (var node in productRootNode.CatalogNode)
                criteria.Outlines = SearchFilterHelper.GetOutlinesForNode(categoryCode);
            criteria.StartingRecord = 0;
            criteria.RecordsToRetrieve = 1000;

            var entries = SearchFilterHelper.Current.SearchEntries(criteria, out count,
                                                                   entryResponseGroup, false,
                                                                   new TimeSpan(0, 0, 0));
            if (entries.TotalResults == 0)

5 - After rebuilding and building the index, you can get the exception when searching on the site, you can get exception:

System.IndexOutOfRangeException was unhandled by user code
  Message=Index was outside the bounds of the array.
       at Lucene.Net.Index.DocumentsWriter.Abort(AbortException ae)
       at Lucene.Net.Index.DocumentsWriter.UpdateDocument(Document doc, Analyzer analyzer, Term delTerm)

The can be fixed by applying the CustomSearchProvider.

6 - Add the AuthorizedPaymentTotal by code when you see the error below:

Cannot insert the value NULL into column 'AuthorizedPaymentTotal', table 'dbEPiServerCommerce.dbo.OrderForm'; column does not allow nulls. UPDATE fails.
The statement has been terminated.
Exception Details: System.Data.SqlClient.SqlException: Cannot insert the value NULL into column 'AuthorizedPaymentTotal', table ‘dbEPiServerCommerce.dbo.OrderForm'; column does not allow nulls. UPDATE fails.
The statement has been terminated.

//workaround for these fields not accepting nulls
cart.Cart.OrderForms[0].AuthorizedPaymentTotal = 0;
cart.Cart.OrderForms[0].CapturedPaymentTotal = 0;

May 02, 2013

K Khan
( By K Khan, 5/3/2013 10:21:15 AM)

Part 2:

Please login to comment.