Recently, I've been battling through a problem that a particular client was having with their Sitecore 8.1 Update-3 installation. The original issue manifested itself when, in trying to upgrade from Sitecore 7.2 and Email Campaign Manager 2.3 to Sitecore 8.1 Update 3 and Email Experience Manager 3.3, the ability to upload a contact or recipient list by way of CSV file could not be completed.
This was a real hair puller because of the amount of (good) customization that this particular client has done to both their Sitecore instance as well as EXM. However, this blog is not about that those customizations, or even about the upgrade process between Sitecore 7.2 and 8.1. Nor is it even about the insanely complicated and near impossible upgrade from ECM 2.3 to EXM 3.3. This blog is simply about a strange error that I received in List Manager.
It starts like this. In Sitecore List Manager, there's an option to Create a list based on a CSV file. You can easily find that option here:
Go through the motion, point to your CSV file, and you get to a point like this:
In the picture above, the selected CSV file is prepped and ready to be uploaded. All you have to do is click the nice big blue Upload button.
- I logged Sitecore Support tickets.
- I asked in the Sitecore Slack channel.
- The client even had Sitecore’s own developers looking at this.
- I even tried following the red bouncing ball around the SPEAKUI application. (This took me 3 days)
I could NOT figure out what was going on. And there were a ton of variables that needed to be reduced down some. Was the issue in the config files (all 120+ of them)? Was the issue in custom code? Was it in a pipeline? Was the error even being generated by .NET? AJAX? JS? Was it even an error? Was it a database issue?
Well, determining if it’s a database issue seems easy enough to deduce. So I installed vanilla Sitecore 8.1 Update-3, EXM 3.3, to see if I can somehow replicate the issue with just the databases. Adjusted my connections strings, and Viola! Issue was reproduced.
I was able to determine that the issue was some kind of difference between the Vanilla Sitecore Master Database and my client’s huge Sitecore Master database. How in the world am I going to compare without losing my mind. There were a couple of options that I ended up trying:
- Serialize and Compare
- Using the “Serialize Tree” option in Sitecore’s Development ribbon, I created a tree of the Templates node and the System node on the Vanilla and Client’s Master databases.
- I then used BeyondCompare (my favorite, favorite, favorite comparing tool) to compare the full file system, which allowed me to see differences.
- However this presented an issue. The create dates and revision Guids were different for pretty much everything. So every file showed some kind of difference.
- Red Gate SQL Compare and SQL Data Compare
- First time actually using these two tools.
- SQL Compare told me that the Database schema’s were the same. (Phew!)
- SQL Data Compare told me that pretty much nothing didn’t compare. (Not Helpful)
- Razl – By Hedgehog
- I actually never got to this option, because they didn’t have a Trial license of Razl even though it’s only $149. But after the last two options that I spent so much time on ended up not providing me any help, I decided to ask my ops guy to buy it for me.
- Back to the Serialize and Compare
- So while waiting for the Razl license, I decided to go back to looking through the sitecore tree, to see if there was anything different that I could figure out.
- Then I stumbled upon the Media Library System folder. That’s odd. Has that always been there? Maybe I just never noticed it.
- Serialized the System folder from both databases and used BeyondCompare to compare them
In the Media Library there is a List Manager folder present in the Vanilla installation of Sitecore 8.1 Update-3. You can plainly see it here:
However, my client’s Master database didn’t have this in there. In fact, they didn’t have ANY of the Page Events Images or Channel Images folders from the media library. They only had Simulator Backgrounds and Template Thumbnails.
Using BeyondCompare, I copied the missing serialized files from the vanilla side to my client's side. Then in Sitecore, I used the Update tree” option which deserialized the files and updated them as Sitecore items. This restored the List Manager folder.
To my knowledge, I can’t figure out WHY this folder exists. Except for maybe it’s a the holding pen for uploaded CSV files. However, adding this item in, has FIXED CSV upload issue that I presented at the beginning of this Blog.
Root Cause Analysis
The currently documented Sitecore Upgrade Path, as it is currently suggested, DOES NOT install these Media Library items when going between Sitecore 7.2 to Sitecore 8.1 Update-3. Only the Vanilla databases contain these Sitecore items.
I sure hope someone else finds this blog post helpful!