Sitecore Experience Commerce – XC9 – Creating a product landing page within 5 minutes!

This is going to be a fun post and will show the real power of Sitecore Experience Commerce 9 combined with SxA Storefront components in “powerful ways”.

We are going to create a landing page for our brand new model of a laptop. If you manage a commerce website, this is a very common scenario. As a company, you would be interested in creating a special landing page for promotional purposes. The blog is based on Sitecore Experience Commerce 9 initial release and the default Storefront, so lets start!

Step 1 – Create a ‘Default Commerce Page’

Open content editor, right-click on the Home item and create a new ‘Default Commerce Page’

Step 2 – Open up ‘Experience Editor’

Right-click the newly created page and open up ‘Experience Editor’

Step 3- Drag and Drop Catalog Item Container’ component

In the middle part of the page, drag and drop ‘Catalog Item Container’ component. This is a special type of component which will serve as a ‘current context’ for all of the child components within this component.

Set the data source for the product:

Step 4- Drag and Drop ‘Column Splitter’

Drag and drop ‘Column Splitter’ inside ‘Catalog Item Container’. Column splitter is a powerful component which can create bootstrap like columns for any given placeholder. Right now we are only interested in 2 columns so we will leave it at as is:

Step 5- Drag and Drop ‘Product Images’

Drag and drop ‘Product Images’ component. This will take the context of the product from ‘Catalog Item Container’ component and the images will show up.

Step 6- Drag and Drop ‘Product Information’

Drag and drop ‘Product Information’ component. This will take the context of the product from ‘Catalog Item Container’ component and information will show up.

Set associated content item (there is one predefined)

Step 7- Drag and Drop ‘Product Inventory’ component

Drag and drop ‘Product Inventory’ component. This will take the context of the product from ‘Catalog Item Container’ component.

Set associated content item (there is one predefined)

 

Step 8- Drag and Drop ‘Product Price’ component

Drag and drop ‘Product Price’ component. This will take the context of the product from ‘Catalog Item Container’ component.

Step 9-Drag and Drop ‘Product Variant’ component

Drag and drop ‘product variant’ component and select pre-defined associated content.

Step 10- Drag and Drop ‘Add to Cart’ component

Drag and drop ‘Add to Cart’ component.

Save and Preview the page.

That’s it, all done. Click save and preview the page. It should look something like this:

Final output the page

Publish the page and you are all set to rock the world!

Summary:

As you see, within 5 minutes I was able to setup a landing page for one of the product with help of some powerful components. I had the full flexibility over the page structure and design. Now that is the real power of Sitecore Experience Commerce with SxA Storefront components. Go check it out!

Thanks
Naveed

Updated March 5, 2018 with Video

The video actually takes 3 minutes! There is no voice as it is self explanatory.

Reference: https://doc.sitecore.net/sxa_storefront/commerce_renderings_for_sxa/commerce_catalog_renderings

Advertisements

Sitecore Experience Commerce 9 – A public action method ‘ShoppingCartLines’ was not found on controller

This is quick post about an error that I encountered during the checkout process using Sitecore Experience Commerce 9 storefront. The error happened as I entered incorrect Braintree sandbox account values during the installation process. The installation was successful but the checkout process didn’t work as expected.

After installation, I added some products to the cart and tried to checkout using the standard process. On the Billing Page, when I clicked on ‘Validate Payment‘ button, I received this error:

“A public action method ‘ShoppingCartLines’ was not found on controller ‘Sitecore.Commerce.XA.Feature.Cart.Controllers.CartController’.

The Billing Page:

The Error Page:

Sitecore Slack community came to help and thanks to Kautilya Prasad who suggested to check the Braintree account values. Also, Sitecore support team came back with the same answer pointing towards incorrect Braintree sandbox values. If you are seeing this error as well then it means that either you have not entered the sandbox values for Braintree account or have entered them incorrectly during the installation process.

In order to fix the issue, please:

  1. Make sure that you use valid parameters for braintree policy in the PlugIn.Payments.Braintree.PolicySet-1.0.0 config file.
  2. Make sure that valid parameters for braintree policy are bootstrapped to Global database.

Confirm values are present and correct in the config file:

Bootstrap the values to global database:

 

If your Braintree account is configured correctly, you will see ‘Credit Card‘ form next to the validate payment button like this: (which I was not seeing it during the checkout process earlier)

The Billing Page with Credit Card Info:

Hope this helps!

Thanks

Naveed

Sitecore Experience Commerce – XC9 – Troubleshooting your installation

The installation of Sitecore Experience Commerce is a fairly easy process, but if you are new to it, you may end up with few installation issues. This blog aims to provide some workarounds and fixes if you encounter these errors.

This post assumes that you are installing Sitecore Experience Commerce 9 initial release on Sitecore 9 update 1

Error: The service cannot accept control messages at this time.

If you see this error message, you can either wait few minutes or do and ‘iisreset’  and start the installation process again. This error message happens temporarily from time to time if IIS is busy in starting or stopping operations.

Error: Get Token From Sitecore.IdentityServer – The remote server returned an error 500

If during the installation process you get the ‘Get Token From Sitecore.IdentityServer’ failed 500 error like below, then this error means that Server Identity has not been able to contact the SQL server and is throwing a 500 error exception. The most probable reason is that you will have multiple SQL server instances running on your machine and the correct value for the “Server:MACHINE-NAME\SQLEXPRESS” has not been passed through the scripts.

Install-SitecoreConfiguration : The remote server returned an error: (500) Internal Server Error.
At C:\Program Files\WindowsPowerShell\Modules\SitecoreInstallFramework\1.1.0\Public\Install-SitecoreConfiguration.ps1:253 char:21
+                     & $entry.Task.Command @paramSet | Out-Default
+                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
   + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Install-SitecoreConfiguration

 

There are 2 options to fix this:

Option 1 (During installation process)

To fix it if you have already started the installation process, open the following configuration JSON files and update the connection string SQL Server instance name manually to Server:”MACHINE\\SQLEXPRESS2016″, in some files you have to do it at 2 places:

1-\SitecoreIdentityServer\wwwroot\appsettings.json
2-\CommerceShops_Sc9\wwwroot\bootstrap\Global.json
3-\CommerceOps_Sc9\wwwroot\bootstrap\Global.json
4-\CommerceMinions_Sc9\wwwroot\bootstrap\Global.json
5-\CommerceAuthoring_Sc9\wwwroot\bootstrap\Global.json
6-\CommerceShops_Sc9\wwwroot\data\Environments\Plugin.SQL.PolicySet-1.0.0.json
7-\CommerceShops_Sc9\wwwroot\data\Environments\PlugIn.Habitat.CommerceAuthoring-1.0.0.json
8-\CommerceShops_Sc9\wwwroot\data\Environments\PlugIn.AdventureWorks.CommerceAuthoring-1.0.0.json

Once you have made these changes, please do an iisreset before running the script again from PowerShell.

If you have already come to this step you may want to update the

SIF.Sitecore.Commerce.1.0.1748\Configuration\Commerce\Master_SingleServer.json

file by removing the Tasks that have already been installed. For example you may want to remove the tasks till ImportRootCertificate and run the script again to just initialize commerce and bootstrap your environment.

Option 2 (Before starting the installation process)

If you are planning to install XC9 with multiple instances of SQL servers running locally on your machine, then you may want to do this prior to the installation: (assuming the SQL server you are referring to can be accessed at “MACHINE\\SQLEXPRESS2016” or something similar

1- Unzip the Sitecore.Commerce.Engine.2.0.1922.zip file

2-Navigate to \Sitecore.Commerce.Engine.2.0.1922\wwwroot\bootstrap\Global.json

3-Update the Server value on line 48 and line 97 to match your SQL server instance name

4-Zip the folder again in a way that it doesn’t create any sub-folder and path \Sitecore.Commerce.Engine.2.0.1922.zip\wwwroot\bootstrap\Global.json exists, otherwise you will get an error again.

5-Place it back in the deploy folder

6-Unzip the Sitecore.IdentityServer.1.0.65.zip file

7-Navigate to Sitecore.IdentityServer.1.0.65\wwwroot\appsettings.json file

8-Update the value of SQL Server to match your SQL server instance name

9-Zip the folder contents again ensuring that it doesn’t create any sub-folders and path to Sitecore.IdentityServer.1.0.65.zip\wwwroot\appsettings.json exists

10-Place it back in the deploy folder

Run the script again and it should run without any issues. It will take approximately 50 minutes to do the installation.

This is a known deployment bug and it has been raised this with Sitecore with reference number 36299. This has also been raised on community forum 

Update March 2018: The above error is now fixed in Sitecore Commerce 9 – update 1

Error:HTTP Error 500.19

HTTP Error 500.19 - Internal Server Error
The requested page cannot be accessed because the related configuration data for the page is invalid.

If you get this error, it meas that ASP.NET Core module is not installed correctly on you machine. You can download from here and read more about it from here

Error:HTTP Error 502.5

PS>TerminatingError(Invoke-RestMethod): " IIS 502.5 Error HTTP Error 502.5 - Process Failure Common causes of this issue: The application process failed to start The application process started but then stopped The application process started but failed to listen on the configured port Troubleshooting steps: Check the system event log for error messages Enable logging the application process' stdout messages Attach a debugger to the application process and inspect For more information visit: https://go.microsoft.com/fwlink/?LinkID=808681 "
>> TerminatingError(Invoke-RestMethod): " IIS 502.5 Error HTTP Error 502.5 - Process Failure Common causes of this issue: The application process failed to start The application process started but then stopped The application process started but failed to listen on the configured port Troubleshooting steps: Check the system event log for error messages Enable logging the application process' stdout messages Attach a debugger to the application process and inspect For more information visit: https://go.microsoft.com/fwlink/?LinkID=808681 "
Install-SitecoreConfiguration : IIS 502.5 Error HTTP Error 
502.5 - Process Failure Common causes of this issue: The application process 
failed to start The application process started but then stopped The application process 
started but failed to listen on the configured port Troubleshooting steps: 
 Check the system event log for error messages Enable logging the application process' stdout 
messages Attach a debugger to the application process and inspect For more information 
visit: https://go.microsoft.com/fwlink/?LinkID=808681 
At C:\Program 
Files\WindowsPowerShell\Modules\SitecoreInstallFramework\1.0.2\Public\Install-SitecoreConfiguration.ps1:253 char:21
+ & $entry.Task.Command @paramSet | Out-Default
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
 + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Install-SitecoreConfiguration
Install-SitecoreConfiguration : IIS 502.5 Error HTTP Error 502.5 - Process Failure Common causes of this issue: The application process
failed to start The application process started but then stopped The application process started but failed to listen on the configured port Troubleshooting steps:
 Check the system event log for error messages Enable logging the application process' stdout messages Attach a debugger to the application process and inspect For more information
visit: https://go.microsoft.com/fwlink/?LinkID=808681
At C:\Program Files\WindowsPowerShell\Modules\SitecoreInstallFramework\1.0.2\Public\Install-SitecoreConfiguration.ps1:253 char:21
+ & $entry.Task.Command @paramSet | Out-Default
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
 + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Install-SitecoreConfiguration


This error is also related to incorrect SQL server values (as mentioned above) double check them in the configuration json files and do an iisreset:

1-\SitecoreIdentityServer\wwwroot\appsettings.json
2-\CommerceShops_Sc9\wwwroot\bootstrap\Global.json
3-\CommerceOps_Sc9\wwwroot\bootstrap\Global.json
4-\CommerceMinions_Sc9\wwwroot\bootstrap\Global.json
5-\CommerceAuthoring_Sc9\wwwroot\bootstrap\Global.json
6-\CommerceShops_Sc9\wwwroot\data\Environments\Plugin.SQL.PolicySet-1.0.0.json
7-\CommerceShops_Sc9\wwwroot\data\Environments\PlugIn.Habitat.CommerceAuthoring-1.0.0.json
8-\CommerceShops_Sc9\wwwroot\data\Environments\PlugIn.AdventureWorks.CommerceAuthoring-1.0.0.json

Error: InitiazlieHabitatCommerceServices 502.3 – Bad Gateway error

Initializing Shops: https://localhost:5005/commerceops/InitializeEnvironment(environment='HabitatShops')
PS>TerminatingError(Invoke-RestMethod): " 

IIS 10.0 Detailed Error - 502.3 - Bad Gateway 
  HTTP Error 502.3 - Bad Gateway 
  The specified CGI application encountered an error and the server terminated the process. 
 Most likely causes: 
   	The CGI application did not return a valid set of HTTP errors. 	A server acting as a proxy or gateway was unable to process the request due to an error in a parent gateway.  
 Things you can try: 
   	Use DebugDiag to troubleshoot the CGI application. 	Determine if a proxy or gateway is responsible for this error.  
 Detailed Error Information: 
    Module   AspNetCoreModule 
    Notification   ExecuteRequestHandler 
    Handler   aspNetCore 
    Error Code   0x80072ee2 
     
  

This error is also related to incorrect SQL server values (as mentioned above) in the configuration json files:

1-\SitecoreIdentityServer\wwwroot\appsettings.json
2-\CommerceShops_Sc9\wwwroot\bootstrap\Global.json
3-\CommerceOps_Sc9\wwwroot\bootstrap\Global.json
4-\CommerceMinions_Sc9\wwwroot\bootstrap\Global.json
5-\CommerceAuthoring_Sc9\wwwroot\bootstrap\Global.json
6-\CommerceShops_Sc9\wwwroot\data\Environments\Plugin.SQL.PolicySet-1.0.0.json
7-\CommerceShops_Sc9\wwwroot\data\Environments\PlugIn.Habitat.CommerceAuthoring-1.0.0.json
8-\CommerceShops_Sc9\wwwroot\data\Environments\PlugIn.AdventureWorks.CommerceAuthoring-1.0.0.json

Error: Message=Arithmetic operation resulted in an overflow

ERROR SQL:block:findentity.Error: Message=Arithmetic operation resulted in an overflow..|Trace= v System.Data.ProviderBase.TimeoutTimer.StartMillisecondsTimeout(Int64 milliseconds)
v System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout)
v System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance)
v System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling)
v System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
v System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
v System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
v System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
v System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
v System.Data.ProviderBase.DbConnectionPool.WaitForPendingOpen()

This error is also related to incorrect SQL server values in the configuration json files:

1-\SitecoreIdentityServer\wwwroot\appsettings.json
2-\CommerceShops_Sc9\wwwroot\bootstrap\Global.json
3-\CommerceOps_Sc9\wwwroot\bootstrap\Global.json
4-\CommerceMinions_Sc9\wwwroot\bootstrap\Global.json
5-\CommerceAuthoring_Sc9\wwwroot\bootstrap\Global.json
6-\CommerceShops_Sc9\wwwroot\data\Environments\Plugin.SQL.PolicySet-1.0.0.json
7-\CommerceShops_Sc9\wwwroot\data\Environments\PlugIn.Habitat.CommerceAuthoring-1.0.0.json
8-\CommerceShops_Sc9\wwwroot\data\Environments\PlugIn.AdventureWorks.CommerceAuthoring-1.0.0.json

 Error: sxa.storefront.com is visible in experience editor but not as the published site

If you have used a different HostName value in your installation script then ‘sxa.storefront.com‘ like ‘sitecore901.commerce‘ and wondering why this is not coming up after you have published the webiste multiple times then you need to do the following:

1-Open content editor

2-Navigate to ‘/sitecore/content/Sitecore/Storefront/Settings/Site Grouping/Storefront‘ item

3-Update the value for Host Name field to your host header and publish again

I hope this post will be helpful to you guys while you are installing Sitecore Experience Commerce, any comments/feedback is welcome.

 

Thanks

Naveed

Reference:

https://www.linkedin.com/pulse/installing-sitecore-xc-90-kautilya-prasad

Sitecore Experience Commerce – XC9 – The Uninstall Script

Sitecore Experience Commerce is the new offering from Sitecore in the commerce arena and it is getting lot of attraction. This blog presents a PowerShell script to help out developers during the uninstall process.

I have posted a reference installation script that I have used during installation, (originally taken from the documentation and then added actual version for the packages) so you can always refer to it and compare it with your own script.

It may happen that during your installation, you have entered an incorrect value for a parameter or path to one of the packages. Then you may want to uninstall the the module before you can re-install it again.  Or may be you just want to uninstall the XC9 module to start from scratch. The process of uninstalling XC9 module can be difficult to do manually, so I present a a simple PowerShell script to automate it!

All you need to do is update the Param values (between line 3 and 15) to suit your installation variables and then run from the PS console:

Copy it locally in the deploy folder and run it like .\uninstall-commerce.ps1

All the script is doing is un-installing the SolrIndexes, IIS websites, website physical files and databases.

If you want to completely uninstall Sitecore 9 update 1 version, then use this script

Enjoy!

Naveed

SXA Rendering Variants – The Hidden Gem of Sitecore Experience Accelerator (SXA)

Sitecore Experience Accelerator  (SXA) is a great productivity tool as it reduces your development time by giving you pre-built components. There were few new concepts and features that were also introduced with SXA like Page design and Partial design, pluggable themes, grid and column layout etc, but as the topic suggest, I will be focusing upon “Rendering Variant” concept and will try to explain how can this change the way you architect your website (assuming that is based on SXA).

Problem Statement

Let’s begin with a problem statement, the UX team have prepared a landing page and they have the various content components on the page displaying Image, Rich Text and Link all in a box but in various styles as below:

  1. Half-width component with Image and Text
  2. Half-width component with Image, Text and Link
  3. Full-width component with Image on Left, Text and Link on Right
  4. Full-width component with Image on Right, Text and Link on Left

They also want the content authors to have the ability to add them, remove them and order them in any way they like.

Sounds familiar ?

If I am not using SXA module, one of the approach would be to make these different components available via Experience Editor which content editor can add/remove/order from the content page. This means that there will be different “View Renderings” for each of the components types. Different view rendering mean different Data Source Templates and Data Folder Templates. So for the simple content based components above, we end up having 4 different view renderings, which more or less have same content but it is displayed differently.

SXA Approach

 

There is nothing wrong with the above approach, but if you website is based on SXA module you would have another tool to  meet your goal in a more effective manner.

The SXA provides a feature called Rendering Variant which optimizes the process of showing different variations of the same component. The variations can be setup via content editor and can also be supplemented with predefined styles and scripts.

The best way to explain Rendering Variants is by an example. I will be using the out of the box “Promo” component that comes with SXA. I am only interested in 3 data fields PromoText, PromoIcon and PromoLink (there are other properties too, but let’s keep it simple)

Promo Data Template

Rendering Variants are located under the /Site/Presentation/Rendering Variants node. In my case, the location was:

/sitecore/content/Tenant Folder/Tenant 1/Site 1/Presentation/Rendering Variants/Promo

Out of the box there was one rendering variant already present as ‘Default’.

Default rendering variant

I made a copy of that component and called it ‘Promo with Image and Text’

Promo with Image and Text rendering variant definition

I then deleted last child item ‘Promo Link’ from the recently created rendering variant and clicked save. The ‘Default’ rendering variant was renamed to  ‘Promo with Image Text and Link’ for readability purposes. And just by doing these few content item operations, I was able to achieve my 2 component variations (under like 1 minute, thanks to SXA)

To verify my changes I tested them out in experience editor. First I added a column splitter component to divide the page into 2 equal halves, then I  uploaded some stock images, added the Promo component from the Toolbox in each of the half , added random text and selected my variants via the dropdown. They worked like a charm!

Promo with Image and Text, Promo with Image, Text and Link

Similarly, I created a copy of the existing variants and called it “Promo with Image left” . I then added a ‘Section’ item for the variant definition and called it ‘Container’. I then moved “Promo Icon” under it. I also added the bootstrap class of ‘col-xs-6’ to ‘Container’ item and to the ‘Promo Text’ item.

Section item surrounding PromoIcon field in rendering variant definition

As you can see in the screen shot above, there are other types of variant definition items as well, check them out from the official site and see how flexible they are to give you almost any kind of rendering variation that you like.

For “Promo with Image Right” I created a copy of the “Promo with Image Left” and just reversed the order ‘Promo Text’ and ‘Container’ sections:

Image Left and Image Right rendering variant definitions

To verify my changes, I navigated to the Experience Editor, dropped the ‘Promo’ component on the page and changed its rendering variant via the dropdown to get the results below:

Promo component with Image Left
Promo component with Image Right

And that’s it, without even writing a single line of code, I was able to get all 4 component variations. In theory the number of variations that could be achieved using rendering variants are unlimited and totally depend upon your UX and Design.

Conclusion

If you are starting a new website based upon SXA module, you must consider rendering variants for your components as it will change the way you architect the website. This was a simple post but it showed the true power of SXA and how Rendering Variants can reduce back-end development efforts and also improve the content authoring experience. Kudos to SXA development team for this awesome feature!

Have fun

Note: If you want to play around with the, here is the link to the rendering variant package. I have used Sitecore 8.2 update 5 and SXA 1.5.

Sitecore 9 SIF installation error : ERROR_SCRIPTDOM_NEEDED_FOR_SQL_PROVIDER

Sitecore 9 was announced at the recently held Sitecore Symposium 2017 and it comes with lots of new features and improvements. One of the major change to the platform is the way you install Sitecore on a server or local machine. The standard .exe installer has been replaced with a Windows PowerShell module which is called Sitecore Installation Framework (SIF). The SIF comes with Sitecore related pre-built tasks and configuration files to facilitate installation of Sitecore.

As a Sitecore enthusiast, I wanted to get my hands dirty with this new SIF module. After reading the official guide, I found out there were few pre-requites that were required even before running the SIF module. The 2 main ones were SQL Server 2016 and SOLR 6.6.1. In addition, the Solr instance must be running over https to make sure all the communication is secured.

The details of the installation process is given in the official guide but I will just mention few high level steps for local install:

Step 1: Configure and Install SOLR

So lets install Solr, sounds easy as I have done it few times before and I am sure you would have too. However, installing the secure certificate was bit tricky on localhost, but thanks to the Sitecore community, this SSL script from Kam’s blog worked like a charm and I had Solr 6.6.1 running over https in no time.

Step 2: Install SQL Server 2016

I had multiple versions of SQL Server (2012,2014) running side by side on my machine and installation of SQL Server 2016 Express wasn’t a problem as well. I ran the standard SQL Server 2016 installer and it was installed as expected (or I thought so).

Step 3 : Install Sitecore via SIF

As per the installation guide, I registered the SIF module via PowerShell and ran the following script: (I just added -Verbose at the end of each command so I can see the debug information during install)

I was expecting it to install Sitecore 9, but after the first run I got this error:

The error suggested that I have to install additional SQL server modules for Web Deploy to work, as given on the Microsoft’s website

DacFxNeededForSQLProvider,

ERROR_SCRIPTDOM_NEEDED_FOR_SQL_PROVIDER,
ERROR_SQLCLRTYPES_NEEDED_FOR_SQL_PROVIDER

The group of 3 errors listed above share the following diagnosis and resolution:

Diagnosis: SQL DAC and its dependencies are not installed.

Resolution: Use Web Platform Installer to install:

  1. Microsoft SQL Server 2012 Data-Tier Application Framework
  2. SQL Server 2012 Transact-SQL ScriptDom
  3. SQL Server System CLR Types 11.0

I installed the above dependencies and ran the script. It failed again with the same error message.

I was sure that my SQL server installation is correct and I have installed module related to ScriptDom but what is wrong with Web Deploy ?

Then I found this article on Sitecore KB https://kb.sitecore.net/articles/019579 for Sitecore Azure Toolkit 1.1 which mentioned to add registry values for the Web Deploy for DAC dependencies path.

I was bit skeptical at first but decided to go ahead with this approach. I added the 2 registry values via regedit. For one of the values, I have to point the path to the recently installed SQL Server 2016 SDK folder. For the second registry value, I have to point the path towards VS 2015 DAC folder. I do want to mention here I also had multiple versions of VS (2013, 2015 and 2017) installed on my local machine.

The registry values were:

DacFxDependenciesPath : C:\Program Files (x86)\Microsoft SQL Server\130\SDK\Assemblies

DacFxPath : C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\130

The actual screen shot of the registry values for Web Deploy:

Ran the script again and BOOM! it worked.

So it turns out since I had multiple version of SQL servers and also multiple versions of VS installed on my local machine, the Web Deploy 3.6 was not able to figure out what is the path for the SQL dependency dlls to install the SQL DAC packages for Sitecore 9.

By the way, if you are installing Sitecore 9 for the first time,  Do check out the following posts:
How to Install Sitecore 9 with the Sitecore Install Framework 
Gotchas while installing Sitecore 9 using the Sitecore installation framework

The lazy developer’s way to install Sitecore 9
Introducing SIF-less for Easy Sitecore 9 Installation
Low-effort SOLR Installs 

I hope this blog will help any other developer facing the same error.

Happy Sitecoring 🙂

Sitecore Ship not working with 8.2-update-1 or failing silently

Back in May 2017, we started working an new and exciting project with Sitecore version 8.2 update-3. I was setting up the continuous integration/auto deployment for the project. Once CI/CD was setup as described in my previous blog posts I encountered the issue that Sitecore Ship module, which is responsible for synchronizing the Sitecore content items, was not working as expected. It was showing a 200 OK response in the Team City logs but in reality it was failing silently.

Doing a quick google about the issue I found at that I am not the only one having the issue, there are other people who are experiencing the same issue as well. I also came across this blog by another Sitecore developer who was facing exactly the same issue and he decided to switch to TDS package deployer instead of Sitecore Ship.

I haven’t personally tried out the TDS Sitecore package deployer before and looking at the blog post decided to take this approach. It was fairly easy to configure package deployer and after adjusting some of the Team City build steps, the .update package deployment started working!!

After testing package deployer with the continuous integration setup for few days, I realized that although the build process is copying across the .update files, there is no feedback from the package deployer (or a 200 OK response) that package has been installed successfully. In order to confirm, I have to RDP or FTP to the server and  check that .update files have been correctly installed or if they have failed for any reason.

So back to square 1, let’s figure out what is wrong with Sitecore Ship ?

Looking at the open issues list of the Sitecore Ship GitHub repository, I saw people reporting similar issues where Sitecore Ship was failing silently or not working on Azure Deployments.

Interestingly, there was also a pull request #69 submitted to fix this issue with 8.2 update-2 in Jan 2017 which had some really positive feedback.  As of today, this pull request has not been merged to the main repository or available via NuGet gallery.

In my case, the project was on 8.2 update-3 (one update higher than the submitted pull request version), and it wasn’t a straight forward fix. I was skeptical but I decided to repeat what has been done in pull request #69 and compile it against 8.2 update-3 version of the Sitecore and try it out.

This is what I did to get my fix:

1-Cloned the GitHub repository locally

2-Updated the solution’s .NET version to 4.5.2

3-Updated the Sitecore NuGet package version to 8.2 update 3

4-Modified the code for Sitecore.Ship.Update.UpdatePackageRunner class as mentioned in the comment section (and below)

5-Build and compiled the code and then replaced the dlls in the bin folder on QA server.

6-Ran the Team City build server script again and it worked like MAGIC!

The underlying issue, as mentioned in one of the comments ,was that there has been some updates to the Sitecore.Update.dll and the code that was responsible for deploying the items was not working any more. Also the solution’s target .NET version has to be upgraded to 4.5.2.

I believe that the pull request will be tested and merged into the main repository soon so everything is available via standard NuGet packages. However if have read till here and using either 8.2 update 3 or update 5 for your CI/CD setup, you can download the compiled dlls from my dropbox and give it a go!

For 8.2 udpate-4 you either wait for the NuGet package or do what I mentioned above.

Happy Sitecoring 🙂