Wednesday, September 14, 2016

Sitecore MVP Summit 2016 - Day 2

Welcome into a humble recap of the second MVP Summit day. 

A beautiful second day that took place at a unique location, more specifically the NOLA Motorsports Park. As the information that is shared to the attending MVP’s is mostly confidential and should under no circumstances be shared publicly it is challenging to disclose what the summit is actually all about.
The MVP Summit aims at providing first-hand information, concepts and new product development into the various types of MVP’s present. This allows for Sitecore receive early feedback and insights which can help to further streamline new or existing product features.

A while back, Sitecore promised that they would adapt their product development strategy to better fit the requirements set forward by the actual customers as well as technology and feature requests from the user base and developers.

And most of the topics offered in this second day of the MVP Summit proved exactly that. No gigantic new features and functionalities but rather a number of development and integration accelerators that will help you with your actual digital project.

Sitecore is not shying away from adopting new Microsoft technologies and even has to hold off from time to time in order for Microsoft to pick up the pace and help realize the Sitecore vision. Different aspects were covered in the various sessions; Architecture, Hosting, Cloud solutions, Integrations and even the whole Habitat/Helix approach were openly discussed.

And to further prove that Sitecore is set on listening for feedback and the customer’s buy-in for their product approaches, with regards to documentation, product development, training, personalization, commerce and so on, there were a set of round-table discussions prepared. These allow for partners and customers alike to share their view on the product, challenge Sitecore with product requirements or known issues in a face-to-face discussion with both peers and Sitecore Product owners alike.

As mentioned, MVP’s are not allowed to share all received information, but what we are able to share is that Sitecore is still becoming a stronger, more matured product that holds a strong promise. The promise of offering a large toolkit, numerous strong and competitive functionalities as well as a product that is built by a highly motivated and innovative team that has opened up to its user base tremendously over the last years.

A big thanks goes out to all the people at Sitecore that helped make the MVP summit possible. It was an unforgettable experience that has prepped us for the Sitecore Symposium that is coming in the next 3 days.

Tuesday, September 13, 2016

Siteocre MVP summit 2016 - Day 1

Sitecore MVP Summit 2016 – Day 1

This year’s Sitecore MVP Summit is being hosted in New Orleans for the second time in a row. An ideal opportunity for dedicated Sitecore users and developers that have earned the title of MVP in the past year to help set the roadmap for the upcoming year. It also offers a unique opportunity to get a firsthand insight into what the product wants to evolve into and what the overall roadmap is for the upcoming releases.

As a technicalical MVP, I am attending the Summit with our Digital Strategy MVP - Thomas Danniau. We are are currently at the MVP Summit to make sure that every aspect that holds significant value to our new and existing customers is taken in and properly evaluated.

As the information that is disclosed on the summit is mostly under NDA, MVP’s are not allowed to share any specific details on the product’s next features or overall roadmap. So, we’re afraid that is not what we are able to share with you on this blog post.

However, what we can share though is that Sitecore has been good at work to further establish a strong MVP user base. This means, that there is a very strong group out there that holds Sitecore’s interests close at heart and helps companies that consider or have chosen Sitecore as a CMS to make the right decisions and help them optimize their digital business.

This year’s summit kicked off with an insight into the types of MVP’s as well as their origin. Turns out that the MVP’s hail from 19 different countries and make up for a total of 142 experienced and driven Sitecore specialists. These consist of 9 Ecommerce MVP’s, 22 Digital strategists and approx. 110 Technical MVP’s.

As I mentioned, most if not all, information shared on the summit is not meant to be shared so I cannot provide you with an overview on all the topics handled on this first day?

However, it is fair to say that Sitecore understands the need for a thoroughly documented system and will keep on investing there.The same can be said about  E-commerce, which is an undeniable web strategy that Sitecore is determined to take on head-first.,

And Sitecore, as any strong and self-sufficient product, is challenging itself as a product on both a feature and implementation level. This means that they look for customers and developers alike to provide feedback that can help to streamline the product even more.

This, as was the case with the MVP Summit in 2015 holds a lot of promise for the future of the products and we are already excited about what 2016/2017 will bring.

Friday, September 2, 2016

Sitecore Symposium 2016 - New Orleans

So, in one week time from now, the Sitecore MVP Summit is upon us. Starting on September 12th, we have two days of intense collaboration and feedback planned for us. Following closely is the already sold-out Sitecore Symposium which is also taking place in New Orleans 2016.

I'll be posting that which can be released under NDA on my blog when possible and in the extent possible :)

Hope to see many of you there and let's mingle for a full week of New Orleans Sitecore madness.

Kind regards.

Wednesday, August 3, 2016

Sitecore Speak - Hands-on and how-to expand the Experience Editor

Mild introduction

A while back, we hatched the idea to create a new Marketplace module based on our experience and the feedback of editors with regards to content management in sites that are both heavy on amount of hosted sites and the available languages.
All of that and much more detailed information with regards to the EasyLingo module can be found on Gert Gullentops blog here:

However, the first version only featured an integration into the Content Editor as a new bar in your editing pane of the selected item.
We decided to up our game a little and introduce our new functionality into the Experience Editor.

My first idea was that this would go rather smoothly, because, let's face it, all I had to do was look at how Sitecore does it now and find a way to display the same HTML we were already rendering into the Content Editor. So, how hard could it be?

Note that I have no (zero) experience on creating or using Speak components offered by or through Sitecore.

First steps and approach

My first, somewhat naive idea was to go into doc.sitecore and find the tutorial, how-to or whatever that would guide me into realizing my goal. Turns out that the doc.sitecore site is either really good at hiding that kind of information or (as it might turn out), my searching skills are well below par.

My next idea was to go into stackexchange or the community and look for someone who had had the same challenge before him/her and learn from that. Unfortunately, the same conclusion as mentioned above applies here.

I then decided to dive head first into the Sitecore Core DB, all the relevant DLL's and the config files.
This last approach was the one that got me there in the end, but not without some pitfalls and concerns on how I had to approach this issue. As well as some support from, well..., Sitecore support. (Thanks Andrey Krupskiy)

Inspecting Sitecore Speak as-is

I decided to have the added functionality displayed in a control bar. Much in the same way as the Navigation Bar is shown as a control in the Experience Editor. So, in theory, if I would look into the core and find out how this one is configured I should be able to derive what to do next.
And that is where I got stuck the first time. Turns out that Sitecore still supports Sheer UI next to Speak, but Speak is enabled by default. This means that everything you find in the core definitions on the ribbons are configured to handle both scenarios...
And that is where my confusion set in... I noticed that on the Core configuration item for the navigation bar, there was a command defined onclick : "webedit:toggletreecrumb".
However, everything this command referred to based itself on Sheer UI. And all the HTML that I was inspecting in the frontend of my Sitecore dummy project was rendering Speak controls.

So, just to be clear: Everything worked out in the end. And with the information below I hope to provide ample insight in how you could go ahead and (ab)use the Speak functionalities to get your own speak interface up and running.

Step by Step guide

I've tried to walk through this step by step without makeing too many awkward jumps. I'll try to summarive at the bottom to give insight on which items/files/configs are required to go forward.

Showing the toggle button on the View chunk of your ribbon

First things first; we needed this bar to be toggled on and off. Exactly like any of the other (optional) bars. To do this:

  1. Navigate to the Core database
  2. Navigate into: /sitecore/content/Applications/WebEdit/Ribbons/WebEdit/View/Show
  3. Create (or copy) a new "Small Check Button" 
  4. Ignore the Click property, but do fill in the Header, Tooltip & ID value (smells like best practice doesn't it)
  5. Modify the Rendering (raw values) to adhere to the code block below:

<d id="{FE5D7FDF-89C0-4D99-9AA3-B5FBD009C9F3}">

Not on the above, obviously you can choose whichever path you see fit for the JS file as well as the registry key you choose to work with.

Making the toggle button actually work

The above made sure you got a checkbox that will be able to toggle your bar in and out of the experience editor. But it is time to hook up that JS file and show some first bar to render.

Let's start with creating the JS file we just referred to from our toggle button:

define(["sitecore", "/-/speak/v1/ExperienceEditor/ExperienceEditor.js"], function (Sitecore, ExperienceEditor) {
  Sitecore.Commands.YOUR-JS-COMMAND =
    canExecute: function (context) {"isVisible", context.button.get("isChecked") == "1");;
      return true;
    execute: function (context) {
      ExperienceEditor.PipelinesUtil.generateRequestProcessor("ExperienceEditor.ToggleRegistryKey.Toggle", function (response) {
        response.context.button.set("isChecked", response.responseValue.value ? "1" : "0");"isVisible", response.responseValue.value);;
      }, { value: context.button.get("registryKey") }).execute(context);

The above JS can now be executed successfully but doesn't have any clue on what to toggle visible as we have not yet defined the YOURRIBBONBAR anywhere.. Time to head back down into the Core db of Sitecore.

  1. Navigate to the Core database
  2. Navigate into: /sitecore/client/Applications/ExperienceEditor/Common/Layouts/Renderings/Ribbon/
  3. Create a new Folder: YOURBAR
  4. Create a new "View Rendering" in the newly created folder.
  5. Fill in the Path field with a reference into your cshtml file, which forexample could be here:
The cshtml file is simply the place where you register your control:

@using Sitecore.Mvc
@model Sitecore.Mvc.Presentation.RenderingModel

Now, in order for this control to be rendered, you need to create the control extension class:

using System.Web;
using Sitecore.Diagnostics;
using Sitecore.Mvc;
using Sitecore.Mvc.Presentation;

    public static class ControlsExtension
        public static HtmlString YOURBARCONTROLEXTENSION(this Controls controls, Rendering rendering)
            Assert.ArgumentNotNull(controls, "controls");
            Assert.ArgumentNotNull(rendering, "rendering");
            return new HtmlString(new YOURBARCONTROL(controls.GetParametersResolver(rendering)).Render());

And in turn, this control extension class requires a (duh) control to render:

using System.Collections.Generic;
using System.Web.UI;
using Sitecore.Diagnostics;
using Sitecore.ExperienceEditor.Speak.Caches;
using Sitecore.ExperienceEditor.Speak.Ribbon;
using Sitecore.Globalization;
using Sitecore.Mvc.Presentation;
using Sitecore.Web;
using Sitecore.Web.UI.Controls;

    public class YOURBARCONTROL : RibbonComponentControlBase
        public YOURBARCONTROL()

        public YOURBARCONTROL(RenderingParametersResolver parametersResolver)
            : base(parametersResolver)
            Assert.ArgumentNotNull(parametersResolver, "parametersResolver");

        protected virtual IList<ComponentBase> Controls { get; set; }

        protected void InitializeControl()
            Class = "sc-YOURBARCSS";
            DataBind = "visible: isVisible";
            ResourcesCache.RequireJs(this, "ribbon", "YOURBAR.js");
            ResourcesCache.RequireCss(this, "ribbon", "YOURBAR.css");
            HasNestedComponents = true;
            Controls = new List<ComponentBase>();

        protected override void PreRender()
            Attributes["data-sc-itemid"] = RibbonDatabase.GetItem(WebUtil.GetQueryString("itemid")).ID.ToString();
            Attributes["data-sc-dic-go"] = Translate.Text("Go");
            Attributes["data-sc-dic-edit"] = Translate.Text("Edit");
            Attributes["data-sc-dic-edit-tooltip"] = Translate.Text("SOME TOOLTIP.");
            Attributes["data-sc-dic-treeview-tooltip"] = Translate.Text("SOME VIEW TOOLTIP");

        protected override void Render(HtmlTextWriter output)
            output.AddAttribute(HtmlTextWriterAttribute.Class, Class);
            output.AddAttribute(HtmlTextWriterAttribute.Id, "YOURBARCONTENT" + Attributes["data-sc-itemid"]);
            output.AddAttribute(HtmlTextWriterAttribute.Style, "display=none");

As you can see. this control in itself hardly does anything at all. It just renders some Nav tag and applies a display=none to a div the is included. But the magic start to happen here when it, in the InitializeControl method registers your final (phew, are we almost there?) JS and CSS files that will handle the actual bar content generation.

So.... That was easy wasn't it? All we had to do is register some things, make some classes and bam, we have...
well nothing really at this point...

We still need to define what is to come in our JS file and make sure we are able to call our backend code. And remember that View Rendering we created? We still need to make sure that gets used somewhere from Sitecore.

Bringing all the final block together

Let us start of with doing the last modification we need to do in the Core database to make sure that our ViewRendering is displayed correctly.

  1. Navigate into the Core database
  2. Navigate into this item: /sitecore/client/Applications/ExperienceEditor/Ribbon
  3. Go into the Renderings field of this item
  4. Add a reference to your ViewRendering ID

 uid="{45348FD9-3458-4284-B0E1-18153E3516B5}" />

The 'ph' (placeholder) can remain the same, just make sure to refer to the right ViewRendering and create a unique uid (untested what happens if it is not unique, but lets play safe)...

And finally only a few steps remain. The sample of YOURBAR.JS and how to call your own business logic through Speak calls.

YOURBAR.JS as stored under ...sitecore\shell\client\Sitecore\Speak\Ribbon\Controls\YOURBAR:

function (Sitecore, RibbonPageCode, ExperienceEditor) {
        name: "YOURRIBBONBAR",
        base: "ControlBase",
        selector: ".sc-YOURBAR",
        attributes: [

        initialize: function () {
            document.RIBBONBARCONTEXT = this;
            window.parent.document.RIBBONBARCONTEXT = this;
            var mode = ExperienceEditor.Web.getUrlQueryStringValue("mode");
            this.model.on("change:isVisible", this.renderRIBBONBAR, this);
            ExperienceEditor.Common.registerDocumentStyles(["/-/speak/v1/ribbon/YOURBAR.css"], window.parent.document);

        renderRIBBONBAR: function (itemId) {
            if (!itemId
              || typeof (itemId) == "object") {
                itemId = this.$el[0].attributes["data-sc-itemid"].value;

            //Do some business logic
            this.requestBusinesslogic(itemId, this);

            //Build HTML
            var htmlSource = "<div class=\"sc-YOURBAR\">";            
            ... Do whatever here ...            
            htmlSource += "</div>";

            //Assign HTML to bar div
            var barContent = ExperienceEditor.ribbonDocument().getElementById("YOURBARCONTENT" + this.$el[0].attributes["data-sc-itemid"].value);
            barContent.innerHTML = htmlSource;

        requestBusinesslogic: function (itemId, appContext) {
            var context = ExperienceEditor.generateDefaultContext();
            context.currentContext.itemId = itemId;
            ExperienceEditor.PipelinesUtil.generateRequestProcessor("YOURSPEAKCOMMAND", function (response) {
                appContext.SOMERESPONSEVALUEVARIABLE = response.responseValue.value;

I have purposely not included the CSS file to which I refer... This depends on a case by case scenario so it has no added value in placing it here. You surely spotted all the css class references throughout the code by now, so that should be clear in itself.
Css files are stored under: .\sitecore\shell\client\Sitecore\Speak\Ribbon\Assets\Generated

So, that kind of concludes the various steps needed to get this additional bar rendered. One last (somewhat optional) step remains and that is the part where we actually call the backend through a Speak command

Speak Commands from JS

The block below is the JS part that actually uses the context to call the Speak command through a given context that can be set up with a variety of parameters.

requestBusinesslogic: function (itemId, appContext) {
    var context = ExperienceEditor.generateDefaultContext();
    context.currentContext.itemId = itemId;
    ExperienceEditor.PipelinesUtil.generateRequestProcessor("YOURSPEAKCOMMAND", function (response) {
 appContext.SOMERESPONSEVALUEVARIABLE = response.responseValue.value;

This "YOURSPEAKCOMMAND" needs to be registered into the Sitecore speak config and this is done here:


And the commandclass definition:

using Sitecore.ExperienceEditor.Speak.Server.Contexts;
using Sitecore.ExperienceEditor.Speak.Server.Requests;
using Sitecore.ExperienceEditor.Speak.Server.Responses;
using Sitecore.Globalization;

    public class SPEAKCOMMANDCLASS : PipelineProcessorRequest<ItemContext>
        public override PipelineProcessorResponseValue ProcessRequest()
            if (RequestContext.Item == null)
                return new PipelineProcessorResponseValue { AbortMessage = Translate.Text("The target item could not be found.")};
            var stuff = SomeClass.DoSomething(RequestContext.Item);
            return new PipelineProcessorResponseValue { Value = stuff };

Do note that Sitecore ships with a whole lot of available SpeakCommands that you are free to call. This offered set is already very rich and diverse so check it out first before you start to make your own specific command. Although, in a lot of cases, this will prove to be the only way.


I honestly hope the above helped you either create your own bar of extra piece of Experience Editor Speak based component or has at least tought you on the different steps that may be needed and the skills required to develop this.
It was a much rougher patch then I initially expected but it worked out in the end and I have to say that I like the Speak calls especially. There is something clean about doing those very distinct, single-purpose calls into your backend that I liked.

But the list of files that were required to be changed or created is quite lengthy:
  • ShowXBar.js
  • XBar.js + XBar.css (or at least in most cases)
  • XBar.cshtml
  • ControlsExtension to register your XBarControl
  • XBar.cs
  • ShowXBar Sitecore item checkbox control
  • XBar Viewrendering control
  • Ribbon item to visualize the XBar

And why did I start calling everything XBar here? I'm not really sure, just call me chaotic.
Kind regards and thanks for the read.

Friday, June 3, 2016

Sitecore 8.2 in-depth preview + 8.3 update info and Sitecore Ecommerce information

During the last Sitecore User group session here in Belgium, Ryan Donovan was featured as the central speaker.

The following two topics were on the agenda:
  • Sitecore Commerce
  • An in-depth information on 8.2 and 8.3
I was impressed by the drive behind Ryan and his team(s). It emphasized the drive that is pushing Sitecore forward. Sitecore is putting a lot of effort in producing well hardened and tested product releases that bring new features and rich applications.

Sitecore Commerce

Previous Sitecore commerce solutions were structured around either SCpbCS and SCpbMD. However, the vNext commerce product has been newly developed from the ground up.
Previously, the commerce solution focussed itself around the architecture of Commerce Server to provide and API, manage the products and to derive the entire feature set from.

With this Commerce vNext solution, Sitecore has set forward the aspiration to become one of the market leaders in commerce. The fist aim is to focus on the Enterprise and Upper Mid-Market B2C/B2x at first (think Magento Enterprise).

This new module / feature will remain true to the nature of the Sitecore beast. And yes, that could (and most likely will) mean, extra dll's, databases, configurations and so on. But inherently also loads of functionalities, extensibility, pipelines, events and integrations into the xDB and hence the analytics profiles and dashboards.

For example, Sitecore will offer some out of the box implementations for payment and fullfillment
solutions. More implementations with custom, local or very specific payment solutions can then be developed by the customer or partner and even be made availablle onto the marketplace!

I was especially impressed by the fact that this product comes with a full set or pricing rules, promotion offers such as loyalty points, entitlement options, discounts on amounts, group price settings etc.
It would even be possible to set prices for groups of products based on rules that identify a set or products.

Sitecore has even gone so far as to think of offering a full fledged Demo environment that they will be populating in close collaboration with some agencies to have a fully filled product and media catalogue. This could really help solution architects, presales and sales wrap their head around the ins-and outs of the commerce product solution.

Sitecore claims to have built a commerce solution that does not only offer a commerce solution for physical goods but is able to handle any marketable product through their offering. Something they claim very little to no competitors can handle correctly at this point (Digital River was mentioned as a strong competitor there)

The only downsides that I could find for now are the following:
- Eventhough the products would be stored in a seperate database, the images will still be stored in the media library. This seperate product database will offer its contents through a data provider into the content editor environment as if they are all POSI's (Yes, Plain Old Sitecore Item's - remind me to make a T-shirt on that).
- Specific modules such as customer ratings and review are not present in the solution and could be integrated through use of some of the available solutions on the web. (I believe BazaarVoice was mentioned)

All deep dive information should be comming our way around the Symposium in New Orleans! And according to Ryan, it will ship "When it is ready". And that should be around Christmass as I understood, so based on either SC 8.2 or 8.3.

You can download the full presentation here:

And the perfect moment to jump into the next topic:

Sitecore 8.2 in-depth preview and an update into 8.3


Those of you who attended the SUG Conference in Denmark end of April 2016 have already heard some information and gained some insight into what the next XP versions will offer us. However, this time, as the release is becomming imminent, Ryan decided to openly provide some more information and feature insight.

So, what are those main features and capabilities that Sitecore's Experience Platform version 8.2 will ship ?

- The Express Migration tool
- Publishing Enhancements
- Platform improvements
- Native Azure support improvements
- CRM Connector

So, let's go over some of these in more detail

Express Migration tool

What, the buzz is real? Yes, the buzz is real. We had heard about it, we had even been promised this tool solemnly but we remained sceptical. And I guess until we have done our very first (successfull express migration) we will remain somewhat sceptical.

In short, this tool promises to address the issue that Sitecore has had with their upgrades for a while now. Upgrades tend to be too time consuming and hence too expensive as they have to be done step by step. The current approach is very error-prone which brings risk to the customer and the partner alike. And even countless discussions have not been able to offer a good alternative upgrade solution that is able to fit into everyone's needs.

The express migration tool aims to solve all that and to deliver smooth upgrades from 6.6 and 7.2 into Sitecore 8.2. The (stand-alone) migration should even bring reporting, pausable migrations and project specific data.
There was even a roadmap presented that showed what features will come in downstream releases. One of those being the actual migration of analytics data.
As it would base itself of a migration rather then an upgrade, it would be easier to compare solutions and configurations.

I feel that this is something that could potentially move a lot of customers into the last version of Sitecore if this works as promised. It is definately something we all need.

Publishing enhancements

Sitecore publishing has not always been the most fleet-footed functionality in the box. It tends to be slow, confusing, non-transparent and (did I mention this already?) slow. As publishes are now done one at the time, this can cause huge issues and run-through times, especially if you are working with databases distributed across the globe.

The new publishing process is not a tweaked process, but rather and entirely new one.
This obviously will have its implications on current publishing pipeline overrides... These will have to be evaluated on very carefully as the architecture will change significantly.

It will even be possible to publish to CD's ahead of time and it will us bulk SQL operations to handle the load that comes from the publishing process.

Platform improvements

There are some general painpoints and lessons learned from previous releases (7.1 and 8.0 anyone?) that Sitecore has been working on so that these will never ever happen again :)

- Enterprise performance is one of these; they are now putting more focus on getting startup times improved, tweaks on caching performance and releases that come fully tested against real world data sets and solutions.

- Search and indexing enhancements; by improving SOLR support (both version5 and ootb setup)

- Silverlight starts to get removed

- Consistency in JS library usages; D3 for charting in Analytics for example

- Technology modifications; use of MVC to match or supercede Webforms, .NET 4.6, .NET Core

- Better and stronger MongoDB support; and finally some guidance on how to purge unneeded data (and hopefully also support for data trimming or cleanup - nobody needs analytics profile data that dates back 2 years or more)

CRM Connector 8.2

The new CRM Connector version aims to tighten the link between offline and online information. CRM contained information should be much easier to use for use in personalization, segmentation and campaign information.

The new integration will allow for bi-directional synchronization. It will be possible to map properties into Sitecore without having to develop these functionalities.

Especially the use of campaigns that exist in your CRM from the Sitecore platform was a missing link at this moment and seems to be tackled in this comming update.

The XM/XP 8.3 Update

Aah, the 8.3 update, the update that should bring us wonderfull things such as the new WFFM module, or as it is being called: (also by Ryan) WFFD (for developers instead of marketers if you didn't get it yet)

But this update will also bring us the XConnect Client API that will be used by both Sitecore products and custom developed integrations (mobile, webservices, reporting, ...) alike. Through the use of OData, this will open up a lot of the data flow that is behind your sitecore solution.

Other features:

- Window Server 2016 compliant
- SQL Server  2016 support
- All Silverlight things be gone!
- The continuation, expanded functionalities and version support of the migration tool.
- Continued effort on quality, testing and support
- Federated authentication support
- Ongoing support and improvements for engagement automation and personalization.

I was impressed with everything Sitecore has planned for use and am already looking forward to the Symposium and MVP Summit this year. I've got a real good feeling about this!

You can find the full presentation here:

And last but not least, a big thanks to Ryan Donovan for providing these insights in a very interactive presentation and session!

Wednesday, March 2, 2016

Sitecore performance tweaking - Media library issues

We have noticed performance decreases with a number of customers on Sitecore where a lot of content started to make its way into the overall site structure as well as into the Media Library.

However, we were unable to pinpoint the exact problem for quite some time. It was not so much a problem of reproducing the actual problem in the environment but rather an problem with finding the triggerpoint where the problem really started to present itself across the environment.

After applying the typical Performance tuning segments with regards to Caches, Indexes, Database maintenance plans and what more through: , we did notice an (expected) increase of site and backend performance.

However, we noticed that the problem persisted in the Media Library.

After this, the following tests were performed:
- Check IIS logs
- Check all available application logging
- Run the databasetest.aspx help page from Sitecore
- Run the dotTrace profiling tool (
- Run the SQL profiling against the site databases

The above was all done in close collaboration with Sitecore support and resulted in the following:

The exact cause of the slowness (25+ seconds for an image upload) issue was caused since Sitecore creates media item versions in each language for any Unversioned media that gets created.

This produces a large number of save operations per a single media item, which, in our case took a total of about 17-18 seconds.

Since the above is obviously not standard behavior, this was registered as a bug in Sitecore 7.1 and upwards.
So this problem (as confirmed by Sitecore) is also present in Sitecore 8.1 update 1.

Sitecore provided us with a fix for this issue that brought image upload and handling back to 2-4 seconds (a 90% performance increase).

The fix number is 94414 and it was handled in support ticket 457609. If you need any more information, ask below or contact me directly, on the community or slack for Sitecore.

As media upload is not only handled by backend users, but can be triggered by application development as well as Webforms For Marketers (WFFM) this is a very relevant issue for all Sitecore implementors and users.

Note that the problem will only present itself when you make heavy use of languages in Sitecore. I'm guessing that, without the patch, the problem becomes noticeable once there are more then 5 languages active on the website.

Friday, February 12, 2016

Sitecore Hackathon 2016

After participating in the Sitecore Hackathon of 2015, we had really been looking forward to this year’s edition. And it turns out that this edition was again very valuable, an opportunity to work together closely, explore unexplored aspects of Sitecore and deliver another valuable building block to Sitecore.

But let’s kick this post of by explaining what a Hackathon is all about.

A Hackathon is a community driven event that aims at creating new functionalities around an existing concept or product.  As the event is participated voluntarily, no real product enhancements are developed to be incorporated into the base product. Often these Hackathon events are organized as small competitions to increase the gamification factor and add some healthy competition.
A Hackathon mainly aims at developers although some front-end and analysis is often required to conceive and complete the project. A Hackathon usually has a timeframe of 24 hours, this allows for the team to prove their ability to approach a project independently and in a structured fashion.
The idea behind adding these new functionalities can be very diverse:

  • Adding new desired functionalities
  • Presenting a proof of concept
  • Proving an in-depth understanding of the product

This year’s Hackhaton

As this was a Sitecore Hackathon, obviously all the registered teams would have to work with Sitecore at the heart of our solution. However, the actual assignment (that helps guide or structure your concept) is only revealed to all the teams one hour before the start.  A total of 48 team signed up, making for a total of 132 developers participating. More information can be found here:

This year, we had been given a heads-up that the emphasis would be placed on Sitecore Habitat. Sitecore Habitat is a solution example built on a modular architecture. It aims to streamline the development process and optimize productivity within a Sitecore project. As the Sitecore Habitat framework is built around modularity, features and an overall granular approach, it offered a perfect basis for the Hackathon.
The 3 categories that were presented one hour before the start were the following:

·         New Habitat Feature
Create a new feature module for the Habitat website exhibiting a clearly defined business objective.
Add visible renderings on the website and optionally extend the Sitecore interface.
·         3rd Party System Integration
Create an integration to a 3rd party system in the Habitat example site.
The solution can contain one or more new modules or can extend or customize the existing Habitat modules.
·         Customer Demo Site
Showcase a customized customer demo site built on Habitat as you would do for a prospect.

After 24 hours, all participating teams can upload their code, documentations, Sitecore packages and content to a team of community judges that will take their time to go through all the submissions and choose a winner in each of the categories.

Team “No Weekend 4 Us”

Our team consisted of myself and my colleagues Gert Gullentops @Gatagordo and Nick Vierstraete @NickVierstraete
Supported by the entire company and the multitude of visitors and messages we received we found ourselves strengthened to work on our Habitat feature and give it our best.

We chose to go for the first option and provide a new Habitat feature. In the 24 hours available to us we built a fully functional Habitat feature around the concept of event management within your Sitecore solution.

We aimed at making a skimmed down version of all the features we would love to see in a full-fledged solution in a real-world Sitecore solution. This approach aligns perfectly with the basic idea behind Habitat. The idea is to create mid-tier features that remain abstract but are very stable and can easily be expanded on.
Thanks to this Hackathon event we were able to deep-dive into Habitat, use a clean version of Sitecore 8.1 and approach all aspects of a mini-project.

A very big thanks goes out to:

  • Everyone that supported us
  • Akshay Sura and Sitecore for making this possible
  • The local fast food solutions offered to us by The Reference @TheReference
  • Special thanks to Simran Singh and Jeroen Vantroyen

We have a whole new year ahead of us to build on our expertise, discover new possibilities and muse on new ideas. Time enough to position ourselves again at pole position for the Hackathon 2017.

Sitecore Hidden Gems - Updated: Admin Pages (based on Sitecore 8.1)

About a year ago I wrote a blog post on the admin pages and some of the hidden functionalities with Sitecore.
This post is meant to elaborate on that by showing the differences that have come up since then with the release of the Sitecore 8.1 version.

You can read up on the previous post here:

And I will not be repeating myself endlessly, so my goal is to list the differences in this post.
I think a good excercise could be to start of in pretty much of the same structure and post :

The List


When comparing these two we can see the following differences:

  • ContentTestingUpgrade.aspx
  • InstallLanguage.aspx
  • kill.aspx *
  • PathAnalyzer.aspx
  • RebuildKeyBehaviorCache.aspx
  • RedeployMarketingData.aspx
  • UpdateSocialProfiles.aspx 

The updated admin pages - what are the actual differences and funcionalities

As my previous blog post already goes into enough detail on the other admin pages, I have narrowed the listing below to the delta mentioned above.


    Located at /sitecore/admin/ContentTestingUpgrade.aspx | One of the many migration admin pages. This one allows you to cleanly migrate your test data. I have not used this one yet.


    Located at /sitecore/admin/InstallLanguage.aspx | Again a convenience method that allows you to quickly add new languages to your Sitecore environment. The fancy part is that is can handle all the rebuilding of indexes and links automatically and behind one click.

    However, I think it is very risky to have the "Republish master database" and "Run the website and the Sitecore UI in this language" presented here as well. Even though we all know what we are doing at this point, a mistake is easy to make... So be very carefull around this functionality!


    This page was marked above with an "*" since this page does not appear by default in a Sitecore installation but was provided by Sitecore to close your session and have the xDB populated as you kill off your session.

    <%@ Page Language="C#" AutoEventWireup="true" %>
    <script runat="server">
    public void Page_Load(object sender, EventArgs args)
     Response.Write("visit ended");*/
      <p>The session was abandoned.</p>

    As noted by Brian Pederson (@briancaos) on his blog, it might even be better to use this code:



    Located at /sitecore/admin/PathAnalyzer.aspx | This page gives a quick overview of the maps manager and their deployment status. There are no actual visualizations of the data behind these maps.

    Further down the page you have the possibility to rebuild historic maps, run agents (even though it is mentioned that these should run on an interval basis) and finally and upgrade utility that needs to be performed when an upgrade from Sitecore 8 to Sitecore 8.1 was performed.


    Located at /sitecore/admin/RebuildKeyBehaviorCache.aspx | This page allows you to clear out the cache that holds the information regarding the interactions with the end user such as:
    • Campaigns
    • Events
    • Goals
    • Outcomes
    • Channels
    • Venues

    For more information on the Key Behavior Cache see:


    Located at /sitecore/admin/RedeployMarketingData.aspx | Basically allows you to revert segments on the experience analytics as well as all the default Path analyzer maps.

    If anyone has used this and has specific information on this, please send it through.

    UpdateSocialProfiles.aspx *

    Located at /sitecore/admin/UpdateSocialProfiles.aspx | Unsure if this is one we added after installing the social connect module but you can use this if (like a lot of customers) you are moving from Sitecore 8 initial to a more recent version.

    The screenshot says it all in my opinion: