Sitecore 8.1 List Manager – CSV Upload Error

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.

The Problem

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:

create list

Go through the motion, point to your CSV file, and you get to a point like this:

exm upload before

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.

But then…

exm upload after

The Journey

Rut roh. I can’t click next, the upload button does nothing, and I get a red box with ZERO error messaging.  Nothing is logged to the Sitecore Logs, Nothing is logged to the Javascript Console. Fiddler does not report that anything occurred.  The only reason I even think I have an actual error is that the css class that changes the border on the file from grey to RED is called “error”.

  1. I logged Sitecore Support tickets.
  2. I asked in the Sitecore Slack channel.
  3. The client even had Sitecore’s own developers looking at this.
  4. 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:

  1. Serialize and Compare
    1. 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.
    2. I then used BeyondCompare (my favorite, favorite, favorite comparing tool) to compare the full file system, which allowed me to see differences.
      1. 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.
  2. Red Gate SQL Compare and SQL Data Compare
    1. First time actually using these two tools.
    2. SQL Compare told me that the Database schema’s were the same. (Phew!)
    3. SQL Data Compare told me that pretty much nothing didn’t compare. (Not Helpful)
  3. Razl – By Hedgehog
    1. 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.
  4. Back to the Serialize and Compare
    1. 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.
    2. Then I stumbled upon the Media Library System folder.  That’s odd.  Has that always been there?  Maybe I just never noticed it.
    3. Serialized the System folder from both databases and used BeyondCompare to compare them
    4. Profit!

The Solution

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:

media library list manager

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!

 

3 thoughts on “Sitecore 8.1 List Manager – CSV Upload Error

  1. Pingback: Loading xDB Contacts with CSV and Custom Fields | Sitecore Hacker

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s