Breaking changes in CMS 10
This topic describes breaking changes for Optimizely Content Management System (CMS 10) in relation to previous version 9, and the steps needed to update affected code.
To view the complete list of changes, see the release notes feed.
Some changes are binary breaking but do not necessarily require code changes but rather a project recompilation. Breaking changes are changes in method signatures or behavior of methods compared to the documented API in the previous version, which is described in this document.
The new ".Internal" namespaces
One of the bigger changes is that all APIs were reviewed to find internal implementation classes and that those were moved to internal namespaces. You can see exactly which APIs are affected in these stories: CMS-3762 (Episerver CMS Core) and CMS-3755 (Episerver CMS UI). Read more about these changes in Henrik Nyström's blog post.
Event system
The event system (used primarily for communication between instances in a load-balanced environment) will no longer guarantee that events are processed sequentially, one at a time. Code that uses the event system should be reviewed for thread safety and cannot rely on the order in which events arrive to the event listener.
Implementors of custom event providers should also be aware that SendMessage calls are no longer guaranteed to run in a separate thread and should therefore take precautions to ensure optimal performance.
Remove support for legacy dot notation for dojo modules
Optimizely is removing the support for the legacy dot notation for dojo modules, for example, epi-cms.editing.ContentPicker
. This means that you need to change all EditorDescriptors, Components and so on where you have defined your Dojo modules using the . to /. Read more CMS-2295 and in Ben McKernan's blog post.
EPiServer.Shell moved to EPiServer.CMS.UI.Core
EPiServer.Shell.dll
was moved from NuGet package EPiServer.Framework
to EPiServer.CMS.UI.Core
. If you have both packages installed, no change is required. Read more in CMS-1380.
Note
If you get an error message saying Value cannot be null.Parameter name: virtualPath]in EPiServer.Shell.ShellInitialization.WaitForInitializeModules()..., remove the
EPiServer.Shell.dll
from the site bin folder. This may happen for sites that do not have theÂEPiServer.CMS.UI.Core
installed, for example Commerce Manager.
Converting the database to UTC is a required step
Running the database with local date and time will no longer be supported (CMS-1449). A database not converted to UTC will throw an exception to avoid data loss caused by mixing local and UTC date and time. Conversion can be done before upgrading for versions 9.1 or later, for example, using the provided PowerShell scripts, see Storing UTC date and time in the database for more details. A setting can be added to the appSettings
 section of web.config
to disable the exception if the site temporarily have to be started without doing the conversion, add episerver:DisableDateTimeKindValidation
with value true
.
More breaking changes in UI:
- CMS-4925Â Objects of type epi._Dependency can no longer be created
- CMS-1202Â GetContentByPermanentLinkQuery will always return the content without work id
- CMS-2710Â Dialog now has destroyOnHide:true by default
- CMS-4319Â The value of enum ExtendedVersionStatus.Expired have changed
- CMS-1150Â Calling watchModelChange and unwatchModelChange on _Command.js has been deprecated
More breaking changes in Core:
- CMS-4110Â The event args in the post event MovedContent will now contain the content loaded after the move
- CMS-3852Â ContentStore methods for saving data has been removed
- CMS-3756Â IAvailableModelSettingsRepository method signature changes
- CMS-3763Â ContentScannerExtension method signature changes
- CMS-3166Â ContentSearchHandler changed to an abstract class
- CMS-3131Â LocalizationService now returns fallback language before fallback defined in code
- CMS-1197Â LanguageBranch now implements IReadOnly and LanguageBranch.URLSegment will now return the LanguageID if not set to a custom value
- CMS-1320Â Browsing to expired page will now return a 404
- CMS-1266Â No longer allowed to have the wildcard host as the only host for any given language
- CMS-2078Â Align status transitions, events and required access rights when saving
- CMS-3824Â UrlSegment have been replaced with IUrlSegmentCreator/IUrlSegmentLocator/IUrlSegmentGenerator
- CMS-3823Â SiteDefinitionRepository and SiteDefinitionResolver have been replaced with ISiteDefinitionRepository and ISiteDefinitionResolver
- CMS-3090Â Added validation of virtual content type properties defined on interfaces
- CMS-3153Â IContentVersionRepository List methods have been consolidated into one. PageVersion is obsoleted.
- CMS-3449Â PropertyResolver changed to an abstract class
- CMS-3530Â New method ImportProperties introduced on IContentTransfer
- CMS-3591Â HostDefinitionExtensions.FirstOfType return wildcard host last
- CMS-3764Â AdministrationSettingsService is replaced with IAdministrationSettingsService
- CMS-3854Â Extended IContentEvents with events RequestingApproval and RequestedApproval
- CMS-3859Â Create a language branch of a non-localized content should not be possible
- CMS-3860Â GetDefault when content implements ILocale but now ILocalizable will not set language
- CMS-1206Â IContentVersionRepository.Delete method will now throw an exception when a version cannot be deleted
- CMS-3982Â New event ContentSecuritySaving added to IContentSecurityRepository
- CMS-3983Â Event args type changed on ContentLanguageSettingRepository
- CMS-3987Â PropertyDate.Date/PageData.StartPublish/PageData.StopPublish are now nullable
- CMS-4167Â ContentCoreData.StartPublish/StopPublish properties are now nullable
- CMS-3812Â Empty properties were changed to work more like standard .NET properties
- CMS-3991Â Methods removed from IPermanentLinkMapper
- CMS-4149Â Experimental setting UseLegacyValueType from EPiServer 7 to return legacy value types has been removed
- CMS-2807Â ContentLanguageSettings were replaced with IContentLanguageSettings and ContentLanguageSettingsResolver
- CMS-4445Â Delay publish job is now impersonating the user that scheduled the publish
- CMS-4537Â IScheduledJobStatusService.ReportExecutedJob method signature changed
- CMS-4219Â PropertyLinkCollection no longer inherits PropertyXhtmlString. It is now a direct base class to PropertyLongString.
Updated 7 months ago