Sitecore 10 is out and it’s a doozy! I am super impressed with what Sitecore has done in this release. There are some major developer centric features that have been added, as well as, performance and author/marketing features. Let’s jump in.
Install Options
There are now (at least) 3 options for installing Sitecore. Docker/Kubernetes images, SIF 2.3 (SIF-less?), and Sitecore Install Assistant. (SIA) The Sitecore Install Assistant is the graphical user interface that installs your Sitecore instance after a few configuration screens. I’ll give a walk through of that in an upcoming post.
Official Support for Containers
We now have out of the box support for container.
- XP 10 uses Docker Compose for developer workstations
- Also images available for non-prod Solr, Redis, and Sql Server
- XP 10 uses Kubernetes for production
Official Documentation can be found here: http://containers.doc.sitecore.com/docs/intro
A word on the .NET Framework and .NET Core
- The last update to the .NET Framework will be 4.8.
- Continued security updates, bug fixes
- No new features or performance enhancements.
- Will be considered legacy
- .NET Core Release
- Next release will jump from 3.x to 5
- Partially marketing, partially normalizing the versioning.
- .NET 5 = .NET Core vNext
- There will be no .net framework any longer, just .NET.
- .NET 5 release date is November 2020.
Sitecore and .NET Core
Prior to Sitecore 10, there were already a few features built using ASP.NET Core. These include the Publishing Service, Identity Service, Sitecore Host, and Sitecore Commerce. The platform still has many dependancies on the .net Framework however, especially when it comes to rendering of pages and components.
The long term strategy for Sitecore has to be to start to move the platform to .NET Core. This is starting.
Headless ASP.NET Core Development
Sitecore 10 brings us a new SDK for headless ASP.NET Core rendering. There is a remote host that runs the site in .net core.
The rendering host front end is a web app made up of the Sitecore ASP.NET Rendering SDK and your code and static resources. The job of the rendering host is to respond to visitor requests.
More information can be found here: https://doc.sitecore.com/developers/100/developer-tools/en/sitecore-headless-development-conceptual-overview.html
Sitecore Management Service
This is a package that is installed on the CM Server and provides support for the
- Sitecore Command Line Interface
- Sitecore for Visual Studio
Sitecore Command Line Interface
The command line interface allows for console communication with a Sitecore instance.
- Depends on the Sitecore Management Service
- Requires .NET Core
- You can install it a global (not recommened) or local for specific projects (recommended)
cd <project folder>
dotnet new tool-manifest
dotnet tool install Sitecore.CLI --add-source
https://sitecore.myget.org/F/sc-packages/api/v3/index.json
Here is a list of the commands available with the Sitecore CLI. I expect these will expand in future releases.
Sitecore Content Serialization
Sitecore now supports its own serialization product that is essentially a combination of TDS and Unicorn, but built from the ground up. You configure the SCS as to which items in include, exclude, and operations to perform. Items are serialized into project folders as YAML files. The default path is \serialization relative to the module file. The project configuration file is “sitecore.json”
{
"$schema": "./.sitecore/schemas/RootConfigurationFile.schema.json",
"modules": [ "src/*/*.module.json" ],
"variables": {},
"serialization": {
"defaultMaxRelativeItemPathLength": 120,
"defaultModuleRelativeSerializationPath": "serialization"
}
}
There are 2 types of content serialization:
- Manual
- When you want to push or pull content items to or from a Sitecore instance on demand.
- Automatic
- Specify content items that you would like to have automatically serialized from a Sitecore instance to your file system when the are created or updated.
Including and excluding is done using “includes”, “excludes” and “rules”. Configuration happens in module files. Ex. Project.modules.json. Each include must have a folder name (file system) and path (Sitecore Item Path)
"items": {
"includes": [
{
"name": "content",
"path": "/sitecore/content/home"
}
]
}
"items": {
"includes": [
{
"name": "content",
"path": "/sitecore/content/home",
"rules": [
{
"path": "/products/legacy",
"scope": "ignored"
},
{
"path": "/products",
"scope": "ItemAndDescendants",
"allowedPushOperations": "createUpdateAndDelete"
},
{
"path": "*",
"scope": "ignored"
}
]
}
]
}
Rules as shown above are used to be very specific about how to serialize items. There are a few “rules” you must follow about “rules”.
- Don’t let rules paths overlap. If you do, must put the most specific rule first.
- Rules for parent’s paths override rules for children’s and descendant’s paths.
- Rule scopes can’t be more inclusive that the root scope. For example, if the root scope is ItemAndChildren, the rule scope cannot be ItemAndDescendants.
- The alias property is the alias for the folder name on the file system.
More information can be found here: https://doc.sitecore.com/developers/100/developer-tools/en/sitecore-content-serialization-configuration-reference.html
Sitecore for Visual Studio
This is the graphical user interface for Sitecore Content Serialization. It provides a way to visually configure modules and environments. You can synchronize items and manage conflicts. This references and uses the SCS configuration files.
Azure Search is deprecated in Sitecore 10
Sitecore 10 now requires Solr version 8.4.
In Sitecore XP 10.0.0, support for Azure Search is deprecated and will be completely removed in a later release. More information can be found here: https://doc.sitecore.com/developers/100/platform-administration-and-architecture/en/using-solr-or-azure-search.html
Horizon
Sitecore Horizon 10.0.0 now includes:
- Support for multi-site and multi-lingual environments
- Support for SXA sites
- Ability to use Sitecore DAM for managing and inserting images on pages and content items
- Ability to use DAM images in Image and Rich Text fields
- Ability to edit content that is not a page
In the Horizon Editor:
- The content editor tree lists all the content items in the current site
- The field editor supports Rich text, Single Line text , Multi line, Image, File, General link, Checkbox, Date, Date time fields. The other field types are currently presented as raw values.
- Ability to edit fields on the page item in a dedicated editor and manage meta data for a page.
Audience Filtering in Experience Analytics
You can now filter all the Experience Analytics reports on marketing segments created in list manager.
You can:
- Target segments of contacts through pre-defined rules and then see report based on these marketing segments.
- Push emails to a segmented list and then see the impact across your websites.
- See reports on the performance of your key target groups.
EXM Enhancements
Additional templates added:
- Left Image Block
- Right Image Block
- Image Focus
Templates are customizable using Scriban.
Marketing Automation Updates
Code re-write to more efficiently load data from xConnect.
New rules:
- Send offer x days in advance of birthday
- Send greetings on their birthday
- Send reminders and follow-up with customer x days after birthday.
Usability improvements by rephrasing rules and settings.
Other Updates
XM Topology now supports light personalization.
A smaller set of in-session personalization conditions are now available even if you don’t use xConnect. Learn more here: https://doc.sitecore.com/users/100/sitecore-experience-platform/en/the-personalization-conditions.html
Realtime connection to Salesforce Marketing Cloud
New Sitecore Marketing Automation Activity allows real time event configuration. Triggers Salesforce Marketing Cloud plans in Journey Builder.
Performance and Monitoring Enhancements
The following are intended to help reduce the TCO of Sitecore
- Reduce infrastructure requirements
- Speed up ability to debug and isolate issues.
Faster Content Deliver Response Times
- Session state optimizations reduce delivery response by 10-15%
Efficient Loading of xConnect Data
- Contacts and Interactions only loaded when an active or inactive MA plan is in the database.
Content Test Logging
- Better diagnostics around content testing to troubleshoot issues.
Application Map support for xConnect
- Can now trace requests and view xConnect stack directly.
Faster xDB change tracking
- Changes are now tracked differently which allows for faster processing, especially if there is a high volume of changes made.
When you paste content from Microsoft Word into the Rich Text Editor, it now cleans up the markup.
Privacy Updates
Sitecore 10.0 and later provides API calls and configuration options that makes it easier to enforce explicit consent for tracking a contact’s activity on your websites.
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/"
xmlns:set="http://www.sitecore.net/xmlconfig/set/">
<sitecore>
<sites>
<site name="mywebsite" set:enableTracking="true" set:explicitConsentForTrackingIsRequired="true" />
</sites>
</sitecore>
</configuration>
var consentManager = Sitecore.DependencyInjection.ServiceLocator.ServiceProvider.GetRequiredService<Sitecore.Analytics.Tracking.Consent.IConsentManager>();
public class ConsentExamples
{
public void GetConsentChoice()
{
var consentManager = ServiceLocator.ServiceProvider.GetRequiredService<IConsentManager>();
// If the known identifier is null, the consent choice is retrieved from a cookie.
// Supply the relevant Source and KnownIdentifier as parameters below.
TrackingConsent consentChoice = consentManager.GetConsent(new KnownContactIdentifier(Source, KnownIdentifier);
var consentGivenForSite = consentChoice.IsGiven;
}
}
public class ConsentExamples
{
public void GetConsentChoiceAndIdentify()
{
var consentManager = ServiceLocator.ServiceProvider.GetRequiredService<IConsentManager>();
// Supply the relevant Source and KnownIdentifier as parameters below.
consentManager.GiveConsent(new KnownContactIdentifier(Source, KnownIdentifier);
}
}
public class ConsentExamples
{
public void RevokeConsent()
{
var consentManager = ServiceLocator.ServiceProvider.GetRequiredService<IConsentManager>();
// Supply the relevant Source and KnownIdentifier as parameters below.
consentManager.RevokeConsent(new KnownContactIdentifier(Source, KnownIdentifier);
}
}
For a complete list of all the updates, head on over to the release notes for Sitecore 10. https://dev.sitecore.net/Downloads/Sitecore%20Experience%20Platform/100/Sitecore%20Experience%20Platform%20100/Release%20Notes