Recently, I’ve been working on Sitecore commerce project. In the post below, I’m going to share the experience about how I troubleshoot the issue and get it solved eventually.


The issue I encountered in creating a commerce user.  customerServiceProvider “createUser” throws an exception

An element with the specified key already exists., however the commerce user and sitecore user were successfully created. So WHY?



The initial suspicion was there are some duplications in the database. so I double checked UserObject table, the Addresses table (because I also add billing address and shipping address for the user), as well as the aspnet_Users table in Core database.   Unfortunately they all looks clean and right, no duplications.

Then I thought that maybe there are some other tables gets updated while creating a new user, so I opened the “SQL Server Profiler” tool trying to track all the database queries.  NO luck.



Ultimately, I found the issue. it was because when delete a user in Sitecore, it does delete both commerce user and Sitecore user, BUT not contacts in xDB.  Just for the proof of concept, I removed the contact and identifier from xDB. Bingo! It fixed the issue.


Today while doing self-testing, I found that OTB facet filter component doesn't work as expected. After digging into the code, it is surely a Sitecore SXA bug.  Therefore,  I decided to share this and hope this can help you to understand the issue and quickly solve it.   

What’s the issue?

The screenshot below, it has 3 properties, and I assigned different property type for each of them (for testing purpose).  The expected result would be Apartment(1), House and Land(1) and Townhouse (1). However, it is indicating (2) items per type?  Why?!


My first question was that is this because of multi-languages? After looking into the code, I found the answer, it’s because the facet component ONLY takes the search scope as its search criteria, which means the results contains multiple items with different language.


Here is the screenshot for the index,  As you can see It has two items with the lottype equals to “House and Land”, one is Chinese version and the other is English version.  That’s why the facet indicates (2) items per type in the example above. This bug could cause the discrepancy between search results and facet filtering, if you are implementing multi-language website.


Fortunately, This bug has been fixed in SXA 1.6, for all previous version please create a ticket in support portal for  requesting the patch for your SXA version.


Creating a static 500 error page is not something new. SXA provides this feature out of the box.  However, when the first time seeing the settings in SXA, I was thinking why SXA 500 page is configured in CMS. 500 error could be caused by an server error, or database error which means CMS may not be accessible.  Why?  Today,  one of the colleagues asked me the same question, and

Unfortunately, Rare information can be found on the Sitecore documentation site.  After spending an hour looking into the code, we totally understand how it was designed. 


Here are the steps to make 500 error page working in SXA:

  1. Configure the Server Error Page – Linking to error page item
  2. Select the “Site Definition” item
  3. Once you click on the Site definition item, the “Error handling” menu will appear in the ribbon
  4. Click on “Generate static error page” button (as shown above)
  5. It will popup an confirmation dialog
  6. Click “Ok” then going to the root of your website in which you can find “ErrorPages”, and the static error page is automatically generated in this folder.


When an error occurs, user will be redirected to this static error page. This magic can be found the ErrorHandling pipelines.


Overall, I will say it is well designed, although there is a bit of flaw in the above code -  it doesn’t handle the response status.  The Server.TransferRequests does not change the status code, it passes control of the request on to another page without telling the client.  However you can always manually set the status code to 500 by overriding the flaw Process method.


SXA provides the ability for optimizing CSS styles and JavaScript via SXA Asset Optimizer. If you want to know more about what the Asset Optimizer is you can check out here.

However,  we found a bug in the Asset Optimizer, which stripes out the key/reserved words i.e. (switch, for, imports etc..) in CSS styles during minifying in all the versions of SXA, apart from SXA 1.6.

Given the complexity for fixing this issue, Stiecore support suggested to either disable the optimizer or upgrade to SXA 1.6, if you are facing the same issue.



Finally Sitecore commerce 9 (SXC9) is released! Like everyone else, I’m getting excited about the new release.



It’s not a secret that the previous Sitecore commerce is super hard to use, as it relies on a legacy system – the RIP commerce server.No more Commerce Server!Thisis one of the most exciting news for Sitecore commerce. I believe everyone is happy that we no longer needs to deal with the commerce server. Secondly, it supports SXA, which should really speed up the implementation of the commerce site from the ground up.


Getting started

Now, let’s start to spin up a Sitecore 9 commerce site together.

Before starting to install SXC 9, please make sure you have Sitecore 9(XP0) update-1 installed. If you don’t know how to install Sitecore 9, you can read my previous post here.


Once Sitecore XP0 installed, the next step is to check the environments includes system requirements, framework requirements etc. I wrote PowerShell script for checking all the required bits and pieces that listed in the Sitecore commerce 9 installation guideline.  you can just simply follow the official documentation.


Installing commerce 9

In this section, I’m going to explain the steps for installing Commerce 9 as well as the issues you may encounter during this process.

Ready? Okay, let’s get stared.

[Step One]

Download package from Here.  The package I'm using for this demo is the On Premises  version.  Please feel free to use the azure version, if you are more comfortable with Azure environment.

Once you downloaded the package, unzip the package.


[Step Two]

Create a deploy Folder, and copy the above files into the “deploy” folder you just created.  Then unzip the the zip files as listed below:

  • SIF.Sitecore.Commerce.1.0.1748
  • Sitecore.BizFX.1.0.572
  • Sitecore.Commerce.Engine.2.0.1922
  • Sitecore.Commerce.Engine.SDK.2.0.1922
  • Sitecore.IdentityServer.1.0.65

If you read the Stiecore official installation guideline, you will probably notice that Sitecore.Commerce.Engine.2.0.1922  and Sitecore.IdentityServer.1.0.65are not listed in the list, why here I’m asking you to unzip those two?


This is because the default connection string for both Sitecore Identity Server and Commerce Engine are using “.”. Therefore, If your SQL server instance name is different from the default value, you most likely get these errors.



Update the server in the connection string in both the “appsettings.json” and the environments *.json files as well as global.json.

The global.json connection string is used to tell that engine role how to access the Global database that contains the environment information.
All of the environment data is declared in json files on disk, which are then read into the Global DB when you execute the BootStrap command.

Once you’ve done above, replace the vanilla zip files with the ones you updated.

[Step Three]

Open “Deploy-Sitecore-Commerce.ps1” in “SIF.Sitecore.Commerce.1.0.1748” Folder, and update the configuration as per your environment.

Here is an example


There are a few issues in the default script, for avoiding the runtime error, please change the value as highlighted in the screenshot below.


Otherwise, you may encounter an error as below


[Step Four]

Finally, let’s run the script.  The whole installation takes about 30-40 mins.



[Step Five]

After it is successfully installed. you will need to follow the post installation steps in Chapter 4 of the installation guide.  

Finish? Congas! your Sitecore commerce SXA site is successfully installed.


Thanks to Rob Earlam for explaining the concept, so that I’m able to troubleshoot the issues.  I hope this post can ultimately help you as well with the installation.