Skip to main content


Showing posts from 2019

Sitecore EXM 9.1 Performance and Scale

When working with Sitecore EXM it seems like one question everyone has is what level of performance can you get out of it. As with most things, the answer is "it depends". However, there are a number of things that go into this and things to think through and adjust to try to get a high rate of sending. Sitecore Hacker has a good blog post on scaling EXM .  As I spent time trying to scale my own instance I wanted to break things down a little more and provide some more concrete examples on steps takes to performance tune and performance I have seen. Let's breakdown some specifics about the architecture to help you understand where you might stand. I am running in AWS with a dedicated Content Management server, a dedicated dispatch server, a dedicated xConnect Server and of course a dedicated database server. Here are the specifications for all. Content Management: 16 gb RAM, 2.3 Ghz 4 core processor. Dedicated Dispatch: 16 GB RAM 3.0 Ghz 8 core xConnect: 4 gb RAM

Changing Glass Caching key

There are a few ORM's for Siteocre and Glass is a great one. Like any framework though it has somethings that don't work they way you may need it to. For glass one of these may be how it generates a cache key. This article is focused on version 5 of glass. Here is the code Glass uses for generating a cache key for all items it caches.You can see it uses a lot of the fields on a Sitecore item to generate the cache key. It does this to make sure it is caching a unique model. However, this is the cache key you are stuck with as there are no settings that will change this. Don't worry though, there is way to plug into Glass and tell it to use a different one. public class CacheKeyGenerator : ICacheKeyGenerator { public string Generate (ObjectConstructionArgs args) { SitecoreTypeCreationContext typeCreationContext = args.AbstractTypeCreationContext as SitecoreTypeCreationContext; return string .Format( "{0}{1}{2}{3}{4}{5}{6}{7}" ,

Multiple Sitecore EXM Root Managers and missing templates

One of the flexibility points of Sitecore EXM is its manager root . You can create as many of these as you want and each one controls the settings for how emails from that manager root will be treated. These are pretty easy to create and Sitecore Hacker has a nice run down on his Email Manager in Details post . There is something left out here though and left out in the Sitecore documentation as well. In theory you can create your root managers where every you want in the content tree. At least there is nothing that will stop you. However, if you don't create them in the right place you will see some odd behavior. If you try and create a template for a given manager root in EXM and see no templates this is the odd behavior I speak of. The image to the left shows this. This issue is caused by one area of the EXM root manager configuration requiring that it has one and only one location to look for email managers. So even though you can create lots of these, they all ave to be

Sitecore EXM 9.1 here we go.

It is time to start diving deeper into Sitecore Email Experience Manager (EXM) and really getting to know it. I am working a project that is going to require some fairly advanced customizations with EXM and with the help of SitecoreHacker we will get through it. First on this list is to make sure we understand how the EXM pipelines are set up. Both Sitecore docs and SitecoreHacker have some good information on this. I am a visual learner so I created this diagram to help me see the pipelines. It is important to notice that the Newsletter pipeline is different between the CM and the Dedicated Dispatch Server (DDS). The config on the CM manages the process so, it has some additional processes in the pipeline in runs. The send email pipeline is where the real work is done of getting the email and sending it. The next thing to get into is what happens when SendEmail is called? If you are just using Sitecore EmailCloud or the standard OOTB CustomSMTP you may not care about these d

Password Management

The need to create, store and manage passwords is a huge responsibility in modern day life. So why is it that so many people do it so poorly? This is a loaded questions with answers ranging from people being uneducated, to lazy, to educated but not affective in their methods and many more. This blog is to help those (in some way even myself) around me strengthen their online security. Why does it matter? To answer this let's look at a few numbers. According to the US Department of Justice (DOJ)’s most recent study , 17.6 million people in the US experience some form of identity theft each year. Ok fine but that is identity theft that has nothing to do with password management. What is one way someone can start getting information about who you are? How do they get access to steal your money? From Cyber Security Ventures 2019 report : "Cybersecurity Ventures predicts that healthcare will suffer 2-3X more cyberattacks in 2019 than the average amount for other industries. W

Sitecore Sidekick

One of the struggles with any CMS is how to move content from one enviornment to another. Each CMS tends to have its own flavor of how to do this. With Tridion you have the content porter for better or worse, often worse. With Sitecore you have a few options between Unicorn and Team Development for Sitecore (TDS) and a few others. Both Unicorn and TDS are focused on moving content out to production. What I mean by that is they are really good and moving content item from development out to production. They don't really support the use case of bring content items from production or other higher level enviornments down to lower level environments. So what do we do with that content authors create in production that we would like to seem in all enviornments and make standard in our deployments? This is where Sidekick comes in. Jeff Darchuk has created a great little plugin to Sitecore called Sidekick . This plugin makes it really easy, and fast, to copy anything from one environm

Using Feydra with Sitecore and a custom ViewEngine

When working with Sitecore and Front End Developers (FED) you can use a tool called Feydra from Hedgehog . Feydra is a great framework that makes life a bit easier for the FED team. If your solution uses a custom view engine processor you can't use Feydra though. As of this writting Feydra does not support working with a solution that is using a custom view engine (because a custom view engine is how Feydra does it's magic). With the power of Sitecore rule based configuration maybe there is a way. The benefits of using Feydra were pretty big so we began to wonder if there might still be a way to do this. As we looked into the Feydra code we realized it was using VirtualPathViewEngine as the view engine which inherited RazorViewEngine. Since we know the interface for this class we know it works just like any other view engine. So what if we had our view engine inherit from VirtualPathViewEngine? Could we add the same logic Feydra execute to decide if we needed to pass proces

How to find Givers when Hiring

How do you hire the best talent into your organization? If you believe your people are your best asset how do you make sure you are hiring in a way that will protect and lift those assets? I believe employees can be a company's biggest asset, but that is not to say anyone you hire immediately becomes a huge asset. Too many companies during the interview process focus on understanding the person's skill level. While this is important I believe it is the soft skills and the personality type that is most important. However, most interviews spend very little time trying to flush these traits out. The personality traits of a person are hard to flush out in a 60 minute interview, which is probably why most people don't try. A while back I watched a talk from Adam Grant on TED about giver's and taker's . This talk really rang true for me and my experience at different companies. I really believe that if a company can fill their ranks with Givers (or at least Matcher

Sitecore Experience Forms Validation

Recently I was adding Sitecore Experience Forms (NOT WFFM) to some existing views I had. Sitecore provides a walk-through on how to set this up , however, when I set the page up as they noted when I clicked submit I was always sent to a URL like this: http://<domain>/formbuilder?osa_did=C0020166&fxb.FormItemId=b41b7d6a-592c-415f-bb56-a9d7c803c148&fxb.HtmlPrefix=fxb.37b94ac0-596b-4b2d-999e-c9814ee8ff98 To try and resolve this I took a step back and approached this like I did not already have an existing view. So I created the base view like they call out in the walk-through. Then I created the layout view and set its base to the base I just created (the one that holds the references to the Sitecore script commands). When I did this the form worked! So I moved the same script commands to my existing view again, and the form stopped working and on click sent me to the "formbuilder". What!? I decided it was time to talk with Sitecore supported. After talking i