Teaser: Omnichannel Retail, Sitecore Symposium 2018

Technology trends have significantly disrupted the way commerce works and we are seeing a considerable shift in investment from point solutions to customer-oriented and end-to-end value-driven implementations.

The competitive pressure is growing in the e-commerce industry having giants like Amazon dictating more than 75% of the industry growth in 2017 leaving everyone else rethinking their marketing and operation tactics to maintain growth and gain a competitive advantage.

However, despite the notion that traditional retail stores are fading against e-commerce websites, progressive technologies such as IoT, VR/AR, Voice recognition and intelligent services are transforming the way retailers think and hence creating a competitive edge. In addition, shopping experiences are rapidly changing and evolving adapting technological advances in every way possible. Customers nowadays are not only using mobile apps and online websites to complete their purchases, but they are heavily relying on product reviews, shipment costs and convenient payments leading to evolution in maturity levels that are going to be measured by how much artificial intelligence and machine learning are being employed and to which extent it will be ready to be consumed by customers and shops alike.

Customers expect a seamless and consistent experience across all touchpoints and channels of the retail process and hence e-commerce is no longer enough to achieve what customers aspire to. Omnichannel retailing is providing more powerful and useful experience that is combining online customer services such as product pricing comparisons and reviews and in-store kiosks and NFC technology.

A research study conducted by Harvard Business Review in 2017 is showing that customers who used omnichannel retailing “spent an average of 4% more on every shopping occasion in the store and 10% more online than single-channel customers”. Moreover, using omnichannel retailing has increased webrooming, a concept that is associated with customers researching products online and buying products in-store, in contrast to showrooming, which is the opposite.

Sitecore Experience Commerce is an enterprise commerce solution that delivers an integrated, omnichannel personalized experience throughout the customer lifecycle. By leveraging online and offline channels across a single Commerce platform, Sitecore is providing the right tools to achieve a personalized customer experience, that is relevant to the individual customer and consistent across all points of interaction.

Join me on October 10th, 2018 at Swan, Mockingbird 1-2 room at 11:45 AM, talking about Omnichannel retail: personal and contextual experiences!


SUGCON Europe 2018: An Insider Look – Part 1

Date: April 23rd, 2018 – Estrel Hotel, Berlin.

It has been two years since I last attended a SUGCON but this time, as a speaker as well. I’m beyond grateful and honored to have had the opportunity to speak and share Sitecore stuff with this great community!

Now this aside, it has been AWESOME as always! With the release of Sitecore 9 last October it gave us the opportunity to have plenty of new features to explore, play around and obviously.. implement!

I think the highlight of this SUGCON is the closer look at how xConnect is opening lots of opportunities and doors to take the platform to the next level and the many capabilities that you can utilize it in.


We had a morning walk around Berlin and thanks to @jammykam for highlighting this outing! I’ve gotta say, Berlin is a little bit different from the rest of Europe and obviously you can learn a whole lot of history about Europe during WWI and WWII!

We had a great dinner the prior night and it has been a nice reunion with the great community after we last met during the last Symposium.


It’s always nice to have a sneak peek on what happens while prepping for the talks in order to make sure everything will work fine, sounds, recording, screen, etc…

Also, a great opportunity was made possible during the SUGCON was the discounted Sitecore 9 certification which will also happen in SUGCON India, so don’t miss that opportunity as well!

Welcome to SUGCON Europe 2018

It always starts with a word from @Sitecore, and it has been a pleasure to meet Terry, VP of Product Marketing for the first time and to listen to Sitecore’s support for such community events!


The story! @pieterbrink123 walks us through the memory lane to all when this whole thing started back in 2014 in the Netherlands and now, 5 years later, SUGCON has become one of the most desirable and sought to by Sitecorians to attend and enjoy two days of networking, top notch implementations, and hand-on experiences!

Innovation, connection, and accelerated development is among what we are focusing at now as a Sitecore community and pushing forward. The near future will bring us loads of exciting features that will help focus on innovation and creativity (check the categories for the Symposium paper submissions).

and finally… a thank you for an AWESOME community that keeps growing!



#Sitecoreland! What a dramatic start for a dramatic event! It was a good start of the day to learn about how to leverage Sitecore’s xConnect along with IoT such as an RFID tag to build an entire shopping experience that can take your customer’s experience to a whole new level.


They built a shopping site for a theme park visitors using the SXA commerce storefront. A wrist band or an RFID tag can be used to scan for purchased tickets and fast-passes using Azure to IoT hub APIs and then store all this information along with rides history through xConnect into the xDB. Once you consume your tickets, you will be enrolled within a marketing automation plan to send you a push notification to purchase more tickets or fast-passes to enhance your experience while in session 😉 (a.k.a enjoying your theme rides!)

You can learn about Azure to IoT hub here https://docs.microsoft.com/en-us/azure/iot-hub/


Nice thing about this is that:

  • You are using unconventional channels such as a wrist band to learn about your customers.
  • You can enroll them as contacts into a segmented list such as seesaw ride lovers to target them later with offers and discounts for merchandises related to this.
  • You can instead identify them under a persona called thriller riders and personalize their experience once on the site with something related to their history in the theme park.
  • Leverage Marketing Automation from the moment they use the RFID tag to scan their tickets to the moment they leave the actual theme park and engage in a whole new experience online
  • Etc…

You can think of any marketing strategy that can help you build a greater online and offline customer experience in powerful ways 🙂

Takeaway: Trolling Jeremy Davis has no limits!

I’ve gotta say, we had a great lineup of speakers and sessions on the main stage and breakout sessions that made it impossible to not make sacrifices when selecting what topic to attend  however, waiting for the editing and publishing of these sessions to YouTube to catch up on what I missed!


GraphQL is a query language for APIs and a runtime for fulfilling those queries with your existing data. GraphQL provides a complete and understandable description of the data in your API, gives clients the power to ask for exactly what they need and nothing more, makes it easier to evolve APIs over time, and enables powerful developer tools.”

You can use it along with #JSS apparently and can make the life of your front-end team whole lot easier! I didn’t have the chance to attend, however, I’m waiting for the release of the recordings to explore.

Takeaway: GraphQL all the things!

VSTS & NuGet with a pinch of HELIX

In this session, Ivan continue building on the DevOps narrative and its importance in CI/CD by introducing the concept of modular package design in reference to #Helix.

By creating a small shareable and reusable components that contributes to code reuse across projects, it can create a huge business value and saves you lots of time and effort across your project life time.

Yet, another session I look forward to watching once the recording is releases.

Takeaway: DevOps is not only a buzzword, use it!


Medtouch’s @paul_griffiths and @dan_persson walk us through how customer journeys in reality looks like and how traditional marketing comes in play.

However, what is TOFU and funnel marketing?

ToFu, MoFu and BoFu are simply marketing terms that marketers use when referring to Inbound marketing sales funnel when your focus starts with converting potential prospects into leads though your blogs, articles, etc.. you are looking to draw the attention of your audience towards a single question or need.

Next, you will continue nurturing these potentials leads through the MoFu stage as you are looking into positioning your organizations as the answer for that challenge or need, and hence the most tricky and complicated process in this funnel. Finally, you are going to the bottom of the funnel in the hope of closing a deal by offering free assessments, discount codes, etc.. in order to convert these potential prospects into customers.

How to leverage Sitecore in order to map the customers’ journey?

This slideshow requires JavaScript.

Takeaways: find what is best for your customer’s journey and leverage Sitecore to its fullest capabilities.


We all know that your customers interactions with your website are not only bound to your online presence but do extend across other offline and Omani-channels. However, how can we map our customers journeys across different touch points with your system?

xConnect is one of the most powerful and interesting features that Sitecore introduced and nurtured during Sitecore V9 and looking across the different features and capabilities that are built on top of xConnect, you can only imagine how far you can take your customers journey!

Marketing automation is surely a huge and very interesting feature that is making the life of marketers easy and speeds time to market. A must see session as well, don’t miss it when the recording is out!

Takeaway: xConnect, Marketing Automation and Omni-channels have no limits!


Obviously a very important topic covering UX and its importance in driving user experience. I didn’t gather much information about this topic so obviously very interested in the talk once it is published.


@jflh is walking us though how to do your CI/CD using another tool called AppVeyor. AppVoyer online service is offered for free to open-source projects that can help you in:

  • Configure builds in versioned YAML or UI.
  • Isolated, clean build environment for every build.
  • Built-in deployment and NuGet server.
  • Support for GitHub, GitHub Enterprise, Bitbucket, GitLab, VSTS, Kiln or custom repos.

yet another different and interesting way to deploy your work an run your test automation scenarios.

Takeaway: DevOps is not only a buzzword, use it!


Salesforce data management platforms is used by marketers to segment, target, activation, and insight of data across online and offline channels.

Takeaway: you might use different tools for your marketing suite, however, it is always possible to integrate it back with Sitecore!


With the introduction of the new XP service layers, it is very important to understand the different Sitecore architectures and layers when building your site infrastructures having scaling options in mind.

When to scale?

However, ….

If you didn’t have the chance yet to watch the new Sitecore series about XP roles architecture and scaling options in Sitecore 9.0.1, you can find it here.

Takeaway: make sure to scale properly!


#GDPR is one of the most sought subjects that has been presented in #SUGCON this year and unfortunately, I didn’t have the chance to attend as I was busy delivering my talk! but obviously, looking forward to hear more about it in the recording.

Sitecore 9 was shipped with #GDPR in mind, so we have a number of options that is built in within xConnect and other features that are built on top of it in order to opt-out or purge a contact from a user journey.

The right to be forgotten: it allows you to completely anonymize a contact by deleting all personal identifiers but keeping an anonymous record in xDB.

Opt-outs: allows you to remove a contact from all email lists without removing them from the emailing service itself.

Purge a contact: allows you to purge a contact from a single or multiple marketing automation plans.

Takeaway: xConnect, Marketing Automation and Omni-channels have no limits!


Really looking forward to learn more about how to create your own plugins in #Sitecore Commerce 9!


I just want to thank everyone who attended my session and participated in it. It has been a pleasure sharing this experience with you. If you missed it, stay tuned to my upcoming blogs in which I will share more detailed information about my talk.

Takeaway: use marketing automation when it does really matter and make difference to your business!


Thanks to @maaakstiles, yet another great #catchingexceptions panel and talk about different hot topics we gave on Sitecore’s table nowadays. Stay tuned to when it is released later in the upcoming episodes!


Nothing beats up the moment when everyone is gathered for some more good news before we calling it off for the day!

A great gesture from #Sitecore is to give an honorary MVP status to 3 of the most influential Sitecore gurus! Alex Shyba, Lars Petersen and Todd Mitchell!

What a day!



Congrats to all the winners for all the different categories out there, sure well deserved!


I’m honored to have had been awarded Sitecore Technology MVP for the 3rd time 🙂 good job and congrats to all Sitecore MVPs!

and a very competitive and nice quiz night 🙂

Off we go for yet another day of AWESOMENESS! and here is a recap of day 1 of the SUGCON!


What, How, Why: Sitecore Data Exchange Framework

I have  been experimenting with Sitecore 9 and DEF 2.0.1 over the past couple of weeks. I’ve gotta say, it has been along time since I worked on an integration tool and it has been an interesting journey reading the different documentations and articles out there on DEF.

In this series, I will walk you through the journey I had to understand the different aspects of the ETL process and how to identify and work with the different components of the Sitecore Data Exchange Framework. Also, I will include a number of blogs that I wrote on how to play around and customize the Sitecore Provider to tailor to your different needs.

Disclaimer: it is highly likely that you will know most of what is written here if you have worked with DEF before but I was hoping to share a tip/trick or two on how to work with it. Also, I hope this will help new Sitecorians to DEF understand and implement this framework.

Happy Sitecoring!

Sitecore Data Exchange Framework: The Why

One of the important aspects toward developing an intelligent framework is data integration. It is used to combine data from different data sources and processes it in a way that enables a seamless integration between different systems that includes Sitecore!

ETL is the common step to integrate data and transform it into a compatible format that is integrated into destination systems. Sitecore Data Exchange Framework plays its important role in integrating different attributes from different systems during  the transformation process in ETL. Then the ETL process performs data cleansing during the extraction process and load significant data into the target system maintaining a seamless integration between different providers.

So, Why Sitecore Data Exchange Framework?

1- It is supported by Sitecore! Yup! nothing is better than having the Experience Platform itself supporting a framework that is highly needed these days.

2– Provide a consistent model for reading/writing/mapping data within different integrated systems using the (ETL) process.

3- Combine past experiences through a single framework that allows for better enhancements and maturity while maintaining the flexibility of existing integration approaches.

4- It is easy to use and extend (Highly Abstracted) and supports a number of different 3rd party systems seamlessly. You can always build your own provider to integrate with a system that is not supported yet as minimum Sitecore expertise is needed to develop a provider.

5- It helps you automate a number of repetitive tasks through an easy Sitecore interface leaving you to focus on customizing the framework based on your business need rather than how to get this integration work.

6– Data Exchange Framework pipelines are configured in Sitecore, but they do not have to run within Sitecore. It is possible to run a pipeline from a standalone .NET application which can help minimizing dependency on Sitecore in production environments at runtime.

7– Do you have something else in mind to share, please comment here or share on twitter via #WhenToSitecore

My outtakes on the framework:

1– You’ll need to go back and forth between version 2.0.1 and version 1.4.1 documentation to get access to all needed information.

2– It works best for straightforward scenarios (I might be wrong though!). If you have lots of custom business logic, you will need to decide whether to go with DEF and implement custom logic or go with your existing solution if you have any.

3– More providers are needed for more inclusive of other 3rd party systems.

Happy Sitecoring!

Sitecore Data Exchange Framework: The How

In the previous blog, we talked what is Sitecore Data Exchange Framework, in this one we will dive a bit deeper into how this framework works to deliver results. You can always refer to the documentation for further information.

The most important step when installing Sitecore Data Exchange Framework is to choose the correct version for your Sitecore instance. Read the Sitecore installation guide and don’t depend on your experience installing Sitecore modules, remember what happened when you installed Sitecore 9 and didn’t follow the installation guide 🧐

There are several areas to look at when start working with the DEF:

  • DEF: The Framework – it consists of a number of components that are configured to setup the DEF.
  • DEF: The Providers – it consists of a number of components that are used to configure the Endpoints and drive the process of reading/writing Object Data from Source/Target system.
  • DEF: Remote SDK – it consists of a number of components that help you run DEF pipelines and synchronization outside Sitecore.

DEF Framework Components:

  • Tenants: represents an organization object to group all related configurations in a single silo and inherits from Data Exchange tenant. Create a new Tenant whenever you import data from a different system.

  • Endpoints: represents data sources and inherit from Base Endpoint template. In the example below, we have two Endpoints representing a File Provider as a source system and Sitecore Provider as a target system.

  • Data Access: represents Objects used to read/write data from both Endpoints. There is different types of Data Accessors to help you represent and map different types of data:
    • Value Accessor: used to configure value mapping components that are used to read and write data objects. You can consider them as a property that has a getter (Value Reader) and a setter (Value Writer). It inherits Base Value Accessor Template.  There are different types of Value Accessors dependent on the provider used in the Data Source. If Sitecore Provider is used, then these Value Accessors will include the path to the Sitecore Item Fields used to write Data Objects. If File Provider is used, then these Value Accessors will include the position of a Data Object in the Source file. I’ll show you in subsequent blogs how to use your own custom Reader/Writer to set the values for these Accessors.
    • Value Reader: is a getter used to read data from Source Data Objects. There is different types of Value Readers that you need to be familiar with before building your own.
    • Value Writer: is a setter used to write data to a Target Data object. It inherits Base Value Writer.
    • Value Accessor Set: is a group of Value Accessors . It represents all the attributes you need to map from one Data source to the other.
  • Data Mapping: represents a set of components used to map Data objects between source and target data sources. These components are:
    • Value Mapping: this is a base template that is used to create all Value Mapping values. It maps Data Object from a Source Value Accessor into a Destination Value Accessor.
    • Value Mapping Set: represents a collection of Value Mappings and is used as a base template. This is similar to the Value Accessors Set.
    • Apply Mapping Rules: represents a condition that needs to be met before applying the value mapping. This is used when you wish to only write data to your Target system when a certain condition is met.
    • Mapping Applied Actions: represents a business logic you wish to execute if your imported Data has not changed due to some missing information but still wish to perform a certain action nevertheless.
    • Mapping Applied Action Rules: represents a condition that needs to be met before applying the Mapping Applied Actions.
  • Pipeline Steps: represents a unit of work that is performed when a pipeline runs. This is where all the work will be done when you start your migration process after configuring everything discussed above. You should configure Pipeline steps in the correct order for the synchronization process to execute correctly. Pipeline Steps implements Plugins that allows passing parameters at runtime. This is an example of some Pipelines used to read data from a CSV file and write back into Sitecore.
  • Pipeline Batches: represents the synchronization process used to configure and initiate the migration task. It provides you with reporting information about the schedule of the batch and logging information.
  • Filter Expressions: represents filters applied to limit the data read by the system. This is best used when you
  • Queues: represents objects used to store read data to be executed sometime in the future. Data is retrieved from Queues or determined to be processed either by status (Queue Entry Status) or Queue Processor.

DEF Providers Components:

Providers are used at the Source or Target systems to determine requirements to take into consideration when reading and writing your data.

There is a number of DEF providers can be found here. In addition, Sitecore walks you through the process of creating a provider for Data Exchange Framework through its documentation.

Looking into how these different providers are implemented, you can also have a quick peek on its implementation by decompiling any of the providers dlls. like “Examples.DataExchange.Providers.FileSystem.dll”.

You can find a documentation for Dynamics CRM provider components here and for Salesforce provider components here.

DEF Remote SDK

One of the significant features of the DEF is that you can run Pipelines, Pipeline bathes, and other DEF components outside Sitecore server which help reduce the dependency on Sitecore specially in production environments. Also, you can enhance the performance of your server by moving the I/O operations into a separate server.

However, this option comes with some limitations as doing this will need to remove the dependency on APIs that are only available within Sitecore. This includes:

  • Run Sitecore pipelines (Data Exchange Framework provides its own pipeline implementation that can be used instead).
  • Reading anything from Sitecore configuration files.
  • Using any type defined in Sitecore assemblies (Sitecore.Services.Core.dll is the one exception).

You can find the full implementation of how to this here.


While experimenting with a number of DEF migration scenarios, I managed to come out with the following blogs, hope you find them useful:

A number of different providers and examples from different Sitecore Hackathons and community work can be found below:

Next, we will conclude this conversation by exploring Why DEF!

Happy Sitecoring!

Sitecore Data Exchange Framework: Create Sitecore Items from a Branch Template

Yup! that was the spirit when I found out that Sitecore Data Exchange Framework doesn’t support Branch Templates out of the box! I told myself I can do this like I did in the past blogs but I was like….

I kept going in circles and circles trying to get the damn thing to work! However, I managed to get it work finally and imported my data using a branch template.

1- Use the same “Advanced Sitecore Item Pipeline Step” we created in the previous blog.

2- Use the “ResolveAdvancedSitecoreItemStepConverter”  from before as well.

3- Update the ResolveAdvancedSitecoreItemStepProcessor to include references to the new ItemModelRepository.

There are two main places you need to look at when you implement this, CreateNewObject & FindExistingObject. This is where most of the work to create new objects and update existing ones is done. You will need to be careful that the later method is working in order to not duplicate existing imported Sitecore items.

3.1 – AdvancedPipelineStepExtensions

4- Update the ItemModelRepository as the Add method used supports adding templates only.

In order to do this, navigate to C:\inetpub\wwwroot\xxxxx\App_Config\Sitecore\DataExchange\Sitecore.DataExchange.Local.config

Update the <itemModelRepository> tag with a custom class for the InProcItemModelRepository class.

<itemModelRepository type=”Sitecore.Sandbox.Libraries.DEF.Repositories.AdvancedInProcItemModelRepository, Sitecore.Sandbox.Libraries”>

5- This is the part where you need to understand how this work and work on implementing the right interfaces and classes.

5.1 – Create AdvancedInProcItemModelRepository.

I created a new class that inherits InProcItemModelRepository. You probably should create a method that determines whether this is a branch template or not but.. oh well ¯\_(ツ)_/¯

5.2 – Create AdvancedHandlerProvider.

Every time I tried to get the previous class to work, I always got an error that an Interface doesn’t exist! I found out that the HandlerProvider reads items from a Dictionary Item and my new custom class is not among them!

You can find this in Sitecore.Services.Infrastructure.dll.

5.3 – Create CreateAdvancedItemCommand.

We need to create the Command that is used to pass all the ItemModel information to the CreateBranch method.

5.4 – Create CreateAdvancedItemHandler.

The CreateAdvancedItemHandler is used to handle the actual request and create items based on branch template.

5.5 – Create AdvancedItemRepository.

Finally! implementing ItemRepository to add items based on branch templates.

and that’s it!

Happy Sitecoring!

Sitecore Data Exchange Framework: Create Item Names using Multiple Columns

One of the things that caught my attention when working with the Sitecore provider is that you can only choose one Value Accessor to assign to your Sitecore item name. So I said what the heck, let’s make it a Treelist selection 😄

Similar to the previous post, we’ll use the Sitecore Data Exchange Framework File System Provider as the basis for this blog and assuming that you have already installed it to your Sitecore instance.

1- Create a new Pipleline Step inside your Pipleine process. I’m calling my Pipeline Resolve “Advanced Sitecore Item Pipeline Step”.

This is the place where we assign the Item Name Value Accessor to each created item. In order to change the Droplink field into a Treelist field:

  • Create a new template inherited from “Base Resolve Object From Sitecore Pipeline Step”.
  • Change the “ItemNameValueAccessor” field into a Treelist field.
  • Template Path: /sitecore/templates/Data Exchange/Providers/Sitecore/Pipeline Steps/Resolve Advanced Sitecore Item Pipeline Step

2- Create a new Sitecore Convertor class to handle passing a Droplist of Data Objects to your Value Accessor Reader.

The newly added “ConvertReferencesToModel” method has a new signature to accept IEnumerable<IValueAccessor>. Make sure to implement the correct interfaces for this to workout.

3- Create a new Sitecore Convertor class to handle passing a Droplist of Data Objects to your Value Accessor Reader.

Line 168 is where you read the IEnumerable<IValueAccessor> and assign it to your item name. Make sure to change the ResolveAdvancedSitecoreItemSettings where it is needed.

4- From the class defined above for the Processor, we need to create a new ResolveSitecoreItemSettings class in order to resolve the new ItemNameValueAccessor property. I’m calling it “ResolveAdvancedSitecoreItemSettings”.

That’s it! this is all it is needed to create your custom PipelineStep to handle multiple Value Accessors for Sitecore Item Name.

Happy Sitecoring!