Sunday, July 15, 2018

Useful Sitecore modules for your project

During the time of new development, we always focus on the new functionality of the website, Go-live date, content population, UAT, production.. etc etc..

But sometime we forget to consider some common non-functional requirement of the project which could be very painful during the maintainability phase of the project , for example – how to implement 301 redirection rules through Sitecore only? What happens if we have unused media items over the period of time – it could be in GBs? And many more.

If your site is content heavy and business is very dynamic to upload the heavy content in day to day operation, then we might come up with the below issues:

  • Too many media library items which is not in used, historical and unreferenced items  
  • Too many version of the Sitecore content Items, which is not using and cause the performance issue.
  • Stale Content
  • URL redirection – you must have some URL which needs to redirect to some new Sitecore pages
  • Analysis the log, you must have some error logs on production, that needs to analyze through Sitecore logs

Today I am discussing some very useful Sitecore modules which we can easily add into our solution to increase the performance and efficiency of the system, also these module will help us to resolve the above issues.

Why we reinventing the wheel, when Sitecore community is here

Use the power of Sitecore community – multiple Sitecore enthusiasms have already invested their time, knowledge, experience to build these common module and it’s available on Sitecore market place without any cost – Yes its free..

I would like to thanks to the Sitecore community members who develop these ready made/deployable module for the other developer’s and placed on the marketplace where developers can easily download and embed these modules into the exiting solution.

No code development required, no addition cost required, No additional time, it’s all free of cost.

This is the power of Sitecore community.

Below are the 5 most useful Sitecore modules which you could consider for your projects:

Sitecore Version Pruner:
The module is pretty simple. Basically, it is just a scheduled task that you can configure to remove old/unused versions from your content tree. Additionally, if you choose, you can preserve removed item versions in 2 ways:
  • Archiving Versions
  • Item Serialization

Stale content
The Stale Content module alerts content editors that it's time to review their content to make sure it says relevant.

301 redirect:
This could be one of the best tool for any web site marketer, this module provides the flexibly to the marketer to configure 301 redirect urls on the fly using wildcard pattern as well
With the 301 Redirect module you can set up rules to manage redirects.  By default, the module sends 301 responses, but you can send other response codes as well.

Sitecore log analyzer
is a powerful tool for parsing Sitecore log files. It provides the interface to explore and navigate through large amount of log data.

Media library analyzer:
Analyze your media library through this module, and you will get to know how much data is not using and can easily achieved or deleted for better performance and storage.

I hope this blog will help you.

Happy Sitecoring

Friday, June 15, 2018

40 Sitecore Abbreviations and Acronyms That Everyone Should Know

If you are working with sitecore technology with any role like developer, architect, marketer, CMS manager, Devops etc, then you must know some common Sitecore acronyms which are heavily used in day to day life conversation.

Sometime we heard “FXM” in the conversation, but we didn't know the meaning of the term and we are afraid to ask, which could through us out of the game of complete conversation.

And FXM is just one example, there are some other common Acronyms in sitecore which gets confusing even for the experienced Sitecore person  for example  FXM, EXM, Speak, xfile, SXA, JSS, SBOS, ML etc

So, I've  complied most common 40+ sitecore acronyms which we can study and build our vocabulary and can help us to navigate with more sitecore topics.  

A/B Testing
Also known as split testing, this is the process of comparing two variations of a single variable to determine which one performs better to improve your marketing efforts. Some popular examples: Email marketing (with variations in the subject line or copy), Landing Pages (with variations in content), and with Search Engine Marketing (testing two ads against one another to see which receives a higher click through rate).

API - Application program interface
(API) is a set of routines, protocols, and tools for building software applications. Basically, an API specifies how software components should interact

CD - Content delivery
Content delivery servers make your web content available to your website visitors.

CM - Content Management (CM)
Content management (CM) servers enable content editors to create and publish content to a website

– Content Management Symtem
CMS manages the creation and modification of digital content. It typically supports multiple users in a collaborative environment. CMS features vary widely. Most CMSs include Web-based publishing, format management, history editing and version control, indexing, search, and retrieval. By their nature, content management systems support the separation of content and preparation

CRM - Customer relation management
CRM stands for Customer Relationship Management and it refers to a set of software programs or apps that let companies keep track of (that's the “management” part) everything they do (the “relationship” part) with their existing and potential customers.

CTA - Call To Action
CTA’s allow you to create a clear and prominent link to other relevant sections within Sitecore, PDFs, and other useful sources of information

CXM - customer experience management
Customer experience management is all about: getting better results by adapting to changes in how your customers are interacting, and where they are interacting with you.

DevOps -  "development" and "operations"
DevOps  is a software engineering culture and practice that aims at unifying software development (Dev) and software operation (Ops)

DEF - Data Exchange Framework

Sitecore Data Exchange Framework is designed to facilitate the transfer of data between systems. It allows you to define the logic needed to read data from a source system, transform that data into a format that is compatible with a target system, and write the transformed data into a target system. 

DMS - Sitecore’s Digital Marketing System
Sitecore DMS is a module within Sitecore CMS which is designed to improve digital marketing strategies and boost website conversions

EP - Engagement Plan (EP)
An engagement plan is a predefined plan that lets you control how your website interacts with some contacts. You use engagement plans to nurture relationships with your contacts by adapting communication to use the content, channels, and media that are appropriate for each individual interaction

EXM - Email Experience Manager
Email Experience Manager (EXM) to create highly customizable email campaigns and make them both personal and relevant to your customers.

FXM - Federated Experience Manager
Federated Experience Manager (FXM) is a module that you use with the Sitecore® Experience Platform™ (XP) to both serve web content as well as capture visitor behavior on non-Sitecore sites

GDPR - The General Data Protection Regulation

GDPR is a European Union (EU) law taking effect on May 25, 2018. GDPR is designed to give greater protection to an individual’s personal information and how it’s collected, stored, and used. There are strict requirements placed on companies that possess the personal data of people located in the EU.

GUID - Globally Unique Identifier
It is a 128-bit integer number used to identify resources

IaaS Infrastructure as a service

IaaS is an instant computing infrastructure, provisioned and managed over the Internet. Quickly scale up and down with demand, and pay only for what you use.

JSS - Sitecore JavaScript Services
JSS is a complete SDK for JavaScript developers allowing to build full-fledged solutions using Sitecore and modern JavaScript UI libraries and frameworks (React.js and Angular)

ML - machine learning
This is one of the most exciting areas of development in Sitecore 9

ODG's - Online Document Generator

PaaS - Platform as a Service
PaaS, is a category of cloud computing that provides a platform and environment to allow developers to build applications and services over the internet

PCL - Portable Class Library (PCL)
The Portable Class Library project enables you to write and build managed assemblies that work on more than one .NET Framework platform.

PXM – Print experience manager
PXM is a platform that provides a bridge (various bridges, in fact) between Adobe InDesign and Sitecore. It can be used for various use cases such as;

RTE - Rich text Editor
A special box that allows you to enter or modify text and links without having to use programming code

SBOS - Sitecore Business Optimization Strategies.
Supports Sitecore customers and implementation partners through their transformation from marketing with a brand-centric, static web presence to marketing with a personalized, contextual, omnichannel digital platform that creates great customer experiences and builds loyal customers

SDN - Sitecore Developer Network
Developer Network website

SIF - Sitecore Installation Framework
The Sitecore Installation Framework is a Microsoft PowerShell module that supports local and remote installations of Sitecore, and it is fully extensible

SIM - (Sitecore Instance Manager)

SIM is an open source tool for managing the local park of Sitecore instances. You can install, locate, maintain, reinstall or delete Sitecore products. It has API and plugin engine so you can extend it for any your need

Solid - In object-oriented computer programming, the term SOLID is a mnemonic acronym for five design principles intended to make software designs more understandable, flexible and maintainable. The principles are a subset of many principles promoted by Robert C. Martin
S stands for SRP (Single responsibility principle
O stands for OCP (Open closed principle)
L stands for LSP (Liskov substitution principle)
I stands for ISP ( Interface segregation principle)
D stands for DIP ( Dependency inversion principle)"   

SPE - Sitecore PowerShell Extensions     
SPE Module is a Sitecore development accelerator which can drastically increase your productivity and curtail the amount of time it takes to deliver a Sitecore solution.

Speak - Sitecore Process Enablement & Accelerator Kit
Speak  is a framework for developing Sitecore applications with a consistent interface quickly and easily.

SPN - Sitecore Partner Network
Sitecore partner website

SSC - Sitecore.Services.Client
Sitecore.Services.Client provides a service layer on both the server and the client side of Sitecore applications that you use to develop data-driven applications.

SXA - Sitecore Experience Accelerator
SXA separates structure from design, so front-end designers, creative designers, content authors, and developers can work in parallel and you can deploy and maintain multiple sites quickly and cost effectively

TDS - Team Development for Sitecore
TDS Reduce deployment time, ensure team integration, and create an environment in which you can easily and quickly move code from your local environment all the way through your development workflowTFS                   

UTC - Universal Time Coordinated

UX - User Experience
User experience encompasses the overall experience a customer has with a business, from their discovery and awareness of the brand all the way through their interaction, purchase, use of a service or product, and even the advocacy of the brand. To deliver great customer experience, you need to put yourself in the shoes of the customer. Think about what would appeal to them in terms of your product or service           

WCM - Web content management         

WDP - Web Deploy Packages    

WFFM - Web Forms for Marketers
Sitecore's free module that allows marketers to create and publish simple forms

WYSIWYG - What You See Is What You Get        

xConnect is the service layer that sits in between the xDB and any trusted client, device, or interface that wants to read, write, or search xDB data

XC - Sitecore Experience Commerce

XC deliver personalized shopping experiences by integrating commerce and digital marketing

xDB - Experience Database
The Sitecore Experience Database (xDB) is a big data marketing repository that collects and connects customer interactions to create a comprehensive, unified view of each individual customer

xFile - Sitecore Experience Profile
The Experience Profile lets you monitor the behavior of contacts that have interacted with your company or with your website

XM - Sitecore Experience Manager         
the Sitecore Experience Manager (XM) empowers you to deliver the right content, to the right person, exactly at the right time

XP – Sitecore Experience platform
World-class content management combined with deep data insights deliver omnichannel, personalized interactions in real time                      

XSLT - Extensible Stylesheet Language Transformations
Xslt is a language for transforming XML documents into other XML documents, or other formats such as HTML for web pages,

I have missed out a few obvious one, please add in the comment, I will update accordingly.

I hope this blog will help you.

Happy Sitecoring

Sunday, April 1, 2018

Sitecore 9 Forms - Server validation - “Email already exists”

Don’t want to save the duplicate data in the form? This is very basic requirement for each type of forms,

Email id should be unique, let’s think the subscription form, where email id is the primary key, we need to validate the unique email id before save the form data. – “email already exists”

In this blog I will explain, how we can place the server-side validation (email already exists) in the new Sitecore 9 forms module.

Let’s start with Sitecore 9 forms, open the form in the Sitecore:

Create the form as per your requirement and drag email field in the form:

Client validation for Email Address

Select the email field > go to the validation section on the right section
Checked the email validator checkbox for checking the valid email id.
We can also change the regular expression of the default Sitecore email validator as below:

Go to /sitecore/system/Settings/Forms/Validations/Email Validator
In parameter field, change the value of regular expression as below:

Add email validator in the forms email field:

Go to email field:
/sitecore/system/Settings/Forms/Field Types/Basic/Email

You can see email validator is selected under allowed validation field as below;

All done for client-side validation, all the above settings are by default provided by Sitecore.

Now, let’s explore the server-side validation,

Server-Side Validation – Email already exists:

Below is the high-level algorithm for server-side validation:

  1. Create the custom validation for forms in Sitecore
  2. Override the validation class and check if email already exists in the database through the code
  3. Assign validation to the email field

Create the custom validation for forms in Sitecore

Go to /sitecore/system/Settings/Forms/Validations
Create the Sitecore item based /sitecore/templates/System/Forms/Validation template

Fill the settings section fields such as type, message, parameters, provide custom class file name with namespace, provide custom error message in message field and parameter if any in parameter field.

Below is the code

using Sitecore.DependencyInjection;
using Sitecore.ExperienceForms.Data;
using Sitecore.ExperienceForms.Mvc.Models.Fields;
using Sitecore.ExperienceForms.Mvc.Models.Validation;
using Sitecore.ExperienceForms.Mvc.Models.Validation.Parameters;
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
using System.Linq;
using Sitecore.Analytics;
using Sitecore.Diagnostics;
using Sitecore.ExperienceForms.Models;
using Sitecore.ExperienceForms.Processing;
using Sitecore.ExperienceForms.Processing.Actions;
using Sitecore.XConnect;
using Sitecore.XConnect.Client;
using Sitecore.XConnect.Client.Configuration;
using Sitecore.XConnect.Collection.Model;

using Microsoft.Extensions.DependencyInjection;
using Sitecore.ExperienceForms.Data.Entities;

namespace Demo.Feature.Form.Validation
    public class EmailExistValidation : ValidationElement<RegularExpressionParameters>

        private IFormDataProvider _dataProvider;

        protected virtual IFormDataProvider FormDataProvider
                IFormDataProvider formDataProvider = this._dataProvider;
                if (formDataProvider == null)
                    IFormDataProvider service = ServiceLocator.ServiceProvider.GetService<IFormDataProvider>();
                    IFormDataProvider formDataProvider1 = service;
                    this._dataProvider = service;
                    formDataProvider = formDataProvider1;
                return formDataProvider;

        public override IEnumerable<ModelClientValidationRule> ClientValidationRules
                if (string.IsNullOrEmpty(this.RegularExpression))
                    yield break;

        protected virtual string RegularExpression

        protected virtual string Title

        public EmailExistValidation(ValidationDataModel validationItem) : base(validationItem)


        public override void Initialize(object validationModel)
            object regularExpression;
            StringInputViewModel stringInputViewModel = validationModel as StringInputViewModel;
            if (stringInputViewModel != null)
                this.Title = stringInputViewModel.Title;
            RegularExpressionParameters parameters = base.Parameters;
            if (parameters != null)
                regularExpression = parameters.RegularExpression;
                regularExpression = null;
            if (regularExpression == null)
                regularExpression = string.Empty;
            this.RegularExpression = (string)regularExpression;

        public override ValidationResult Validate(object value)
            if (value == null || string.IsNullOrEmpty(this.RegularExpression))
                return ValidationResult.Success;
            var formId = Guid.Parse(this.RegularExpression);
            var data = this.FormDataProvider.GetEntries(formId, null, null);
            foreach (var item in data)
                var emailValue = item.Fields.Where(x => x.FieldName == "Emailaddress").FirstOrDefault();
                if (emailValue != null && emailValue.Value.ToLower() == value.ToString().ToLower())
                    return new ValidationResult(this.FormatMessage(new object[] { this.Title }));

            return ValidationResult.Success;

Where Sitecore 9 Form data saved?
No more WFFM, all sitecore9 forms data goes to experienceforms database in below 2 tables:

  1. Fielddata
  2. FormEntry

Now, code part is done, its configure this validation on the form, I have created one form called subscriber form for email id as below:

This form contains only one field for email id, and we are checking if email already exists using Sitecore9 forms.

So, when you design your form in the form section in the Sitecore, it will create the items in the content tree under the form folder, next to content editor node, as below:

Here, we need to select the newly created validation called, “email exist validator” in the validations section.

Now all done, let’s check the validation:

I hope this article will help you to configure the custom error message in Sitecore 9 forms.

Happy Sitecoring.

Please connect me if you need any further information on this implementation on Ashish Bansal