Sunday, December 21, 2014

Quick look at Sitecore XP 8

1. Sitecore admin login screen - /sitecore/login

Changes : Desktop/Content Editor/Page Editor selection NOT available

2. Sitecore Admin Homepage - Launch Pad

Changes : Speak Launch pad is the main control point in Sitecore XP 8

3. Sitecore Content Editor

4. Sitecore Desktop

 5. Sitecore Experience Editor (Previously : Page Editor)

6. Sitecore Control Panel

Wednesday, December 17, 2014

Standard Values for Language Versions

Today, one of my colleague asked me about standard values and how they work when creating different language versions. Following are just a small note on what I learn regarding that.

Standard values are language sensitive. i.e. if you have different language versions, you need to create language versions for standard value item also.
Items does not inherit standard value of "__Source" field from its data template standard value item

A good blog post on standard values,

Friday, December 12, 2014

Create Versions Action for Workflows

One of my recent work includes to support a complex workflow scenario.
While I am working on that, I got to know the following small but very useful module, "Create Versions Action" module. You can find it on sitecore marketplace.

What this module does is, it create a new workflow action. By using this action, we can create new language versions for existing workflow item. Also, it has given a option of selecting which languages that you need to create new version.

I found it very cool.. :-)

I also extend this and added new features. I will write a new blog post in near future about that.

Bye for now.

Friday, November 14, 2014

First Meetup of Sitecore User Group Sri Lanka ended Successfully!

After lot of preparation and hard work, we were able to do our first meetup on 12th November.

Over 12 developers participated for the event including developers from Codehouse Ltd, HSBC, Virtusa, Exilesoft, Calcey Technologies, CAAMS software development companies.

Presentation was done by Mr. Sen Guptha, Solution Architect, Sitecore International.
The presentation includes following points
  • Introduction to Sitecore Company
  • Growth of Sitecore Company
  • Introduction to Sitecore - Page Editor, Content Editor, Desktop, etc
  • Introduction to Sitecore Marketing suite - Marketing center, DMS, etc
  • Sitecore Certification Programs
  • Sitecore Resources - Marketplace, SDN, KnowledgeBase, etc

Presentation which took around 1 hour was followed by a Question and Answer session.

Q&A Session was highly successful with participants asking lot of question and clarifying their doubts from Mr. Sen Guptha.

After the presentation and Q&A session, it is time to relax and have some refreshments. Participants were discussed on how to progress with these meeting and how to promote the group so that more and more people with get the benifit from this group.

This event was powered by Codehouse Ltd, Sitecore Solution Partner.

Following are few snaps of the evnet

Looking forward to meet everyone on our December Meetup !

Until then, Ayubowan! (Good Bye) :-)

Wednesday, November 12, 2014

Sitecore User Group Sri Lanka - First Meeting

We are starting "Sitecore User Group Sri Lanka", aiming to grow and educate the sitecore community in Sri Lanka. This will be an open discussion forum dedicated to support growing sitecore community in Sri Lanka.

Sitecore was generous to provide an Exclusive Online Presentation for our first Meetup, 12th November, 2014. We are expecting around 10 - 15 participants for the first meetup.

This will be facilitated by Codehouse Ltd, a Certified Sitecore Partner.

Everyone is welcome! :-)

Monday, September 8, 2014

Issue with SEO Toolkit module and SBOS Accelerator Module running together

One of my recent investigations was about an issue caused by SBOS Accelerator module. After through investigation, it proved to be an issue caused by SEO Toolkit module. This post is about my findings.

Environment :

Sitecore 7.2 rev. 140526
Sitecore Search Engine Optimization -1.3.0 rev.130319
SBOS Accelerators Shared Source Module - 2.0 rev. 140422

Issue 1 : SEO Toolkit module issue
When we run the seo tool for a page, and then select the "Links" link in the results, it returns/displays the following error

when "Links .." link selected,

Issue 2 : SBOS module issue

When we select the "Enable personalization tracking" checkbox and save, and then return to the same place again, checkbox was displayed unselected/unchecked

Investigation/Solution :

1. When check into the sitecore error logs, following error was found 

Error Logs Message I:

Exception: System.Web.HttpUnhandledException
Message: Exception of type 'System.Web.HttpUnhandledException' was thrown.
Source: System.Web
   at System.Web.UI.Page.HandleError(Exception e)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.ProcessRequest()
   at System.Web.UI.Page.ProcessRequest(HttpContext context)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

Nested Exception

Exception: System.Web.HttpException
Message: The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).
Source: System.Web
   at System.Web.UI.ControlCollection.Add(Control child)
   at Sitecore.Layouts.PageContext.InsertSystemControls()
   at (Object , Object[] )
   at Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args)
   at Sitecore.Layouts.PageContext.BuildControlTree(Object sender, EventArgs e)
   at System.Web.UI.Page.PerformPreInit()
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

2. Checked our own control files. -> we could not find any place with <% .. %>
 3. Disabled SBOS Accelerators module (rename /App_Config/Include/Sitecore.SBOSAccelerators.config file to Sitecore.SBOSAccelerators.config.disabled)
 when clicked on the "Links" after running the SEO module, it again return the error.
4. But, this time, sitecore logs displayed a different error message
Error Logs Message II

Exception: System.Web.HttpRequestValidationException
Message: A potentially dangerous Request.Form value was detected from the client (<postData><links><link controlID=""a70"><![CDATA[http://chg....").
Source: System.Web
   at System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection)
   at System.Web.HttpRequest.ValidateHttpValueCollection(HttpValueCollection collection, RequestValidationSource requestCollection)
   at Sitecore.Pipelines.PreprocessRequest.SuppressFormValidation.Process(PreprocessRequestArgs args)
   at (Object , Object[] )
   at Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args)
   at Sitecore.Nexus.Web.HttpModule. (Object , EventArgs )
   at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

6756 13:24:19 ERROR Application error.
Exception: System.Web.HttpRequestValidationException
Message: A potentially dangerous Request.Form value was detected from the client (<html id="...lang="en"><!--<![endif]--><hea...").
Source: System.Web
   at System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection)
   at System.Web.HttpRequest.ValidateHttpValueCollection(HttpValueCollection collection, RequestValidationSource requestCollection)
   at Sitecore.Pipelines.PreprocessRequest.SuppressFormValidation.Process(PreprocessRequestArgs args)
   at (Object , Object[] )
   at Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args)
   at Sitecore.Nexus.Web.HttpModule. (Object , EventArgs )
   at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

5. To solve this issue, we add the following property to <httpRuntime ..> tag in web.config
<httpRuntime maxRequestLength="512000" executionTimeout="600" enableKernelOutputCache="false" relaxedUrlToFileSystemMapping="true" requestValidationMode="2.0" />

6. Then, SEO Toolkit module start to work fine.
7. Re-enabled the SBOS Accelerators module (rename /App_Config/Include/Sitecore.SBOSAccelerators.config.disabled to Sitecore.SBOSAccelerators.config)
8. SEO toolkit module stopped working again with the Error Logs Message I
9. Then, I looked into the control files in SEO module. In those files I found the <% .. %> code part.
/seotoolkit/ui/Extender.ascx, /seotoolkit/ui/Keyword.ascx, /seotoolkit/ui/SearchEngine.ascx
Fortunately, those files did not have any code behind files. So, I create a seperate library project and moved the <% .. %> code parts into that project. Then, point the seotoolkit .ascx files codebehind to those library .cs files.
All the things start to work properly. (Including the issue 2 - "Enable personalization tracking" checkbox).
Hope this help..

Friday, July 18, 2014

Sitecore DMS with MongoDB

From Sitecore 7.5, Sitecore has move its DMS database to MongoDB database.

Some of the benefits that Sitecre is aiming to achieve by moving to MongoDB are,

  • Scalability
  • Speed/Performance
  • High Availability
  • Flexibility with the Data model

About MongoDB
MongoDB is the leading NoSQL database, empowering businesses to be more agile and scalable.
MongoDB is built for scalability, performance and high availability, scaling from single server deployments to large, complex multi-site architectures.
Quote :

To achieve high scalability and speed, MongoDB has cut down (removed) some features in RDBMs. Few features that MongoDB does not deal with are,

  •     Joins
  •     Complex Transactions

MongoDB provides some online training/certification programs, which I think very good to learn about MongoDB.

I have started to follow "M102: MongoDB for DBAs" training program from MongoDB university. Even though I am in the beginner level when it comes to MongoDB, I have already started to love this new database. :-)

Tuesday, May 20, 2014

Drawbacks in Twitter Bootstrap

From last year onwards, when I first saw and used bootstrap, I was a great fan of that. I used it in one of my ASP.NET MVC project and I was actually in love with it. It makes life so much easy for the developers that is not very good with front-end development (as in my case :-D ) as well as for rapid application development and prototyping.

Bootstrap, a sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.
Quote : 
But, recently I have heard some negatives about Bootstrap framework from few of my UI expert friends. I tried to list the drawback points below.
  • Adds more than necessary (bulky) HTML and CSS to a web page
  • Hard to structure/design web pages as necessary
  • Contains some accessibility issues - Ex: color contrast issues, non-sementic markup, etc
  • Released versions are not backward compatible
  • W3C HTML and CSS validation issues

Alternative/Options :

  • Customize the bootstrap framework to fix these issues
  • Foundation 5 framework -     
    • Note: I have not used this. One of my UI expert friend highly recommend this framework

Some good links regarding this issues :

Wednesday, April 16, 2014

Modeling Sitecore Data Templates

Yesterday, one of my best friends asked me, "What is the process you are using to Model sitecore data templates, out of sitecore?"

After that I did some research and came up with the below points.
  • Think sitecore data templates as Object Oriented classes.
  • Use template inheritance as OO Inheritance.
  • Use Class Diagrams to do the initial modeling of data in the site.
  • Think only about the data in the site. Don't think about the design.
  • MS Visio (or any that kind of tool) can be used for draw your initial models

I found following links very useful
        2.3 Templates and Field

Please let me know your idea/methodology about this as comments below.

Friday, March 14, 2014

Sitecore Support Package Generator tool

Earlier days, when we need support from sitecore support, they are asking to submit set of documents. Normally, they are the same set of document like log files, App_Config folder, web.config, etc. This is a time consuming, boring process.

Last year, sitecore released a tool to generate these necessary files for sitecore support automatically.

That is Sitecore Support Package Generator.

This tool will generate/collect the required files from a given sitecore installation and generate a zip for you or will directly submit it to sitecore support. Cool.. isn't it :-)
This saved lot of time for us. :-)

Quote :
The Sitecore Support Package Generator looks at a Sitecore CMS instance and collects information about:
• Application pool
• Web.config file
• /App_config folder content
• Sitecore and IIS logs
• Windows event logs
• Performance counters
• /bin directory listing
• .NET framework files — required for working with process memory dumps
• Machine's hardware configuration
• IIS application pool identity user permissions
• Hash codes of all files in the solution.
• All files from /temp/__UpgradeHistory folder.

Think of a scenario that you don't have access to your production servers or your production servers are managed by a other team. Then you need to get some details from the server to fix a bug/issue in the production environment.
This tool comes handy in this scenario also. You can provide this tool to those people who manage production servers and just asked them to run this and send you the generated zip. simple. :-)

Thursday, February 20, 2014

How to find packages installed on a Sitecore Instance

Few years back, one of the questions that I got from my manager was "Is there a way to detect/backtrack which packages are installed on a sitecore instance ?"

My answer was "No" to him at that time.

But, recently when I'm going through google, I found a blog post which describe a way to achieve this. Actually, this feature is already there in sitecore. We only have to know the where to look.

Login to Sitecore Desktop
Change database to "Core"
Open Content Editor and expand "/sitecore/system/packages/installation history" node

Here, you can view all the packages installed in the sitecore instance.
One thing to note that is, when you create the packages, remember to use the "Package name", "Author", "Version" fields as needed. Those field values are stored in the package installation history items.

For example, keeping "Package Name" as same for same type packages will store them under the same parent node in sitecore "/sitecore/system/packages/installation history" node.

Following blog post is about a simple tool/webpage to see the above information in a graphical way.

Use of EnableEventQueue setting

When an item is updated and published, it did not get reflected on the website. But, when IIS cache is cleared, this new changes started to reflect on the website.

So, I looked into the code and could not find any issue. Then, I moved my focus to the sitecore configurations. Following are the steps that I tried/look.

1. Checked current website name is included in the <event name="publish:end"> node and <event name="publish:end:remote"> node.
    What this setting does is, it says to sitecore clear html cache of the sites specified in that event section, on publish.

2. Then, I looked into EventQueue table in the web database. It does not had any entries. So, that was the issue. So, I change "EnableEventQueues" setting to "true" on CM instance. This did the trick.

Reason for our issue was that sitecore is using EventQueue table entry to clear the cache on publish. Since there were no entries in the table, sitecore did not clear any cache.

Read following blog entries which describe the use of EventQueue table and settings in details to get a better understanding.

Saturday, February 1, 2014

Sitecore IDTable

Recently when I'm trying to clear some of my old documents, I found "Student handbook Web Site .NET developer" handbook. When I go through that document quickly, I saw an entry about "IDTable" in sitecore. Eventhough I have seen this table, I was not aware of the use of that table till now. So, I thought of writing a post regarding the IDTable table.

The IDTable
You can store persistent mappings of arbitrary keys to Sitecore IDs in the Sitecore IDTable. 

By default, this is only used by the Sitecore CMS WebDAV functionality to keep locks on media items in the CM environment and does not need to be synchronized with the CD environment
You configure the location of the IDTable in the web.config file in the IDTable section in the connectionStringName parameter:
<IDTable type="Sitecore.Data.$(database).$(database)IDTable, Sitecore.Kernel" singleInstance="true">   <param connectionStringName="master" />
  <param desc="cacheSize">500KB</param>
To synchronize the contents of the IDTable between the CM and CD environments, change the connectionStringName parameter in the IDTable configuration section to point to a Core database that is shared or replicated between the environments. Alternatively, it can point to a shared Web database
          Quote "Sitecore CMS 6.6 or later - Scaling Guide"

IDTable can be used for tasks like keeping track of duplicate items when doing a custom import from another third-party application to sitecore.
   Sitecore.Data.IDTables.IDTable.Add(string prefix, string key, ID id);
By keeping IDs of items that has already imported to sitecore, if you run the import more than once, you have the option of skipping the IDs that already had imported to the system by keeping/monitoring the IDTable entries.

You can find an old blog entry about IDTable from following url :


Thursday, January 23, 2014

Running Sitecore in LiveMode

LiveMode means running the front-end site using the master database (instead of web database).
To do this, in the relevant site definition, change the "database" property to "master"

Also, you need to set the "enableWorkflow" setting to "true" to avoide displaying items that does not reached the final workflow.

      <site name="[YOUR_FRONT_WEBSITE_NAME]" ... database="master" ... enableWorkflow="true" ... />

PlaceholdersEditableWithoutSettings setting from sitecore 6.5

From sitecore 6.5 (CMS 6.5.0 and DMS 2.0.0 rev. 110602 ) onwards,
if you go to the page editor and try to edit, it won't display any add button/placeholder if placeholder settings were not configured in layout details of the item (i.e. item -> presentation -> details)

      Indicates whether placeholders should be editable in the Page Editor if placeholder settings are not specified.
      Default value: false
<setting name="WebEdit.PlaceholdersEditableWithoutSettings" value="false" />

if needs to use dynamic placeholders or need to edit a placeholder without setting placeholder settings prior, then set this setting to "true".

Friday, January 17, 2014

Ways to Find Versions in Sitecore

To find the current sitecore version

Method 1 :
Login to sitecore desktop then go to the following path
Sitecore Start Button -> All Applications -> System -> About Sitecore

Method 2 :
At the start of the sitecore log files, sitecore writes the version details of its main dlls.
i.e. Sitecore.Kernel.dll and Sitecore.Client.dll

Method 3 :
Following way can be used to find the sitecore dll version.
Wright Click on Sitecore.Kernel.dll in the /bin directory -> Properties -> Details

Note: This method may not actually reflect the current sitecore version correctly, if the dll's are changed/replaced by different sitecore version.

To find the currently installed Module version in sitecore 
(i.e. WFFM, ECM, etc)

Wright click on the relevant .dll file in the /bin directory -> Properties -> Details
   Ex: Sitecore.EmailCampaign.dll

Saturday, January 4, 2014

Launch Sitecore - Sitecore teach how to build a site using sitecore

Launch Sitecore ( is a place where you can find/learn fundamentals of building a site, best practices as well as DMS functionality.

This site is available as a sitecore package. Anyone interested can download the launchsitecore package from the site and install it in a local sitecore instance and learn/explore how sitecore has done things.

Friday, January 3, 2014

StripLanguage processor in the pipeline causes error in multi-site setup

In 6.6 Update-6, the StripLanguage processor in the <preprocessRequest> pipeline was changed so that it always parsed languages from the URL, even when languageEmbedding was set to "never" in <linkManager> setting.

Sitecore implementation with multisite/multilingual setup start to cause some issues with this change if the implementation is using virtualPath and physicalPath properties in <site> definitions to define urls.

The solution for the above issue was to remove the "StripLanguage" processor from the <preprocessRequest> pipeline.

With the sitecore 6.6.0 rev 131211 (update-7) version release, sitecore has introduced a new setting in web.config to overcome the above mentioned issue.
      This setting specifies if the StripLanguage processor in the <preprocessRequest> pipeline will parse and remove languages from
      the URL, even when the languageEmbedding attribute of the linkProvider is set to "never". You should only change this setting
      to "false" if the default behavior causes problems in your solution.
      Default value: true
<setting name="Languages.AlwaysStripLanguage" value="true" /> 
"In 6.6 Update-6, the StripLanguage processor in the <preprocessRequest> pipeline was changed so that it always parsed languages from the URL, even when languageEmbedding was set to "never". This caused problems for some customers, so a new web.config setting named Languages.AlwaysStripLanguage has been introduced. You can set this setting to "false" to return to the earlier behavior. (390434)" Quote from sitecore

If the sitecore solution is using multisite/multilingual site setup and languageEmbedding is set to "never" in <linkManager> setting, then make the above setting (Languages.AlwaysStripLanguage) to "false".

Thursday, January 2, 2014

Implementing Bundling and Minification with Sitecore Web Forms site

Bundling and Minification is introduced in .NET 4.5 with System.Web.Optimization namespace.

These new functionality can be implemented with .NET 4.0 as well.

Following are the steps to implement Bundling and Minification functionality with Sitecore Web Forms.

1. Dependencies
  • System.Web.Optimization.dll
  • WebGrease.dll
2. Defining Bundles

Method 1 - using RegisterBundles class method

using System.Web.Optimization;

public class BundleConfig
    public static void RegisterBundles(BundleCollection bundles)
        bundles.Add(new StyleBundle("~/bundles/css").Include(
        bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
Method 2 - using config file  (bundle.config) - Only static style bundles

<?xml version="1.0" encoding="utf-8" ?>
<bundles version="1.0">
  <styleBundle path="~/bundles/css">
    <include path="~/Styles/Site.css" />

3. Register Bundles
Bundle registration can be done in two ways.
  • In the Application_Start method in Global.asax file
  • As a custom pipeline processor in /Configuration/Sitecore/Pipelines/Initialization by editing web.config file
using System.Web.Optimization;
using Sitecore; 
using Sitecore.Pipelines;
namespace MyWebProject
  public class BundleConfig
    public virtual void Process(PipelineArgs args)
    public void RegisterBundles(BundleCollection bundles)
        bundles.Add(new StyleBundle("~/bundles/css").Include(
        bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
Add follwing pipeline to /Configuration/Sitecore/Pipelines/Initialization as the final processor

<processor type="MyWebProject.BundleConfig, MyWebProject" />

4. Adding Namespace
Under the "/configuration/system.web/pages/namespaces" in web.config, add following namespace

<add namespace="System.Web.Optimization" />
5. Adding Bundles to View/Layout
In the main layout page in the head section, add style and script bundle virtual path references

<%: Scripts.Render("~/bundles/css") %> 
<%: Styles.Render("~/bundles/jquery") %> 

6. Allowing bundle virtual path urls to access files
"IgnoreUrlPrefixes" config setting in web.config file

<setting name="IgnoreUrlPrefixes" value="/sitecore/default.aspx|/trace.axd|/webresource.axd|/sitecore/shell/Controls/Rich Text Editor/Telerik.Web.UI.DialogHandler.aspx|/sitecore/shell/applications/content manager/telerik.web.ui.dialoghandler.aspx|/sitecore/shell/Controls/Rich Text Editor/Telerik.Web.UI.SpellCheckHandler.axd|/Telerik.Web.UI.WebResource.axd|/sitecore/admin/upgrade/|/layouts/testing|/bundles" />

7. Enable/Disable Minification
In the web.config file,  fine the "<compilation" tag and set "debug" property to "false" to enable bundling and minification.

Note: if you want to debug scripts and styles, setting debug="true" will ease the debugging process, since when debug="true", bundling and minification will not take place.

<compilation debug="false" targetFramework="4.0" />

Important Notes:
Best practice is to use include config file to do the config changes rather than doing it directly on web.config file

Update 1:
* Dependencies can be installed by importing the Microsoft.AspNet.Web.Optimization package.
* If the version is greater than or equal to 1.1 (1.1>=), then Styles.RenderFormat method is also available. This support the formating of the input html tag.
     Ex:  <link ref="stylesheet" type="text/css" media="screen" ..>

Limitations :
System.Web.Optimization mechanism does not convert relative image reference paths inside the .css file. Workaround will be to use Absolute path in image references inside .css files.