API changes in Sitefinity CMS

This article provides a detailed reference of all API changes introduced through the Sitefinity CMS official releases. The API changes are grouped by product version. When upgrading your Sitefinity CMS website, you must review the API changes applicable to all versions between your current version and the version you are targeting. For example, when you upgrade from version 8.0 to 11.1, review all API changes relevant for version 8.1 up to version 11.1. 

To view the API changes relevant for your upgrade path, from the drop-down box below, select your current Sitefinity CMS version and the version you are upgrading to. The applicable API changes will be listed accordingly.

Select your upgrade path

I am upgrading from: 

I am upgrading to: 

API changes in Sitefinity CMS 14.1

Use the table below to browse the API changes introduced in Sitefinity CMS 14.1. You can filter the information, search for specific changes, and read additional details about the change.

Classic content UI is no longer supported

As of Sitefinity CMS 14.1, you can no longer toggle between the Classic and the New UI. This means that you can no longer delete the ~/AdminApp folder in your project as this would prevent you from using Sitefinity CMS where it depends on the New UI.

API changes in Sitefinity CMS 14.0

Use the table below to browse the API changes introduced in Sitefinity CMS 14.0. You can filter the information, search for specific changes, and read additional details about the change.

Sitefinity .NET Core Renderer breaking changes

With Sitefinity .NET Core Renderer 14.0 release the logic for making requests to Sitefinity CMS using the IRestClient interface is extracted into a separate assembly - Progress.Sitefinity.RestSdk.

If your project is created on a version prior to 14.0, you must:
  • Manually add the Progress.Sitefinity.RestSdk assembly from Sitefinity NuGet packages website.
  • Change namespace Progress.Sitefinity.AspNetCore.SitefinityApi.Dto to Progress.Sitefinity.RestSdk.Dto.
  • Change namespace Progress.Sitefinity.AspNetCore.SitefinityApi to Progress.Sitefinity.RestSdk.
  • Change namespace Progress.Sitefinity.AspNetCore.SitefinityApi to Progress.Sitefinity.AspNetCore.RestSdk for extension methods related to fetching items from the MIxedContentContext class.

API changes in Sitefinity CMS 13.3

Use the table below to browse the API changes introduced in Sitefinity CMS 13.3. You can filter the information, search for specific changes, and read additional details about the change.

IMPORTANT:

Due to the upgrade to jQuery 3.5.1, only the standard self-closing tags function properly. For more information, see jQuery Core 3.5 Upgrade Guide.


API changes in Sitefinity CMS 13.2

Use the table below to browse the API changes introduced in Sitefinity CMS 13.2. You can filter the information, search for specific changes, and read additional details about the change.


API changes in Sitefinity CMS 13.1

Use the table below to browse the API changes introduced in Sitefinity CMS 13.1. You can filter the information, search for specific changes, and read additional details about the change.

As of Sitefinity CMS version 13.1.7424.0, custom styles in the widget designers can only be applied when the sf-change-observer attribute is added to a div that wraps the custom implementation. For more information, see Create custom designer views.

Breaking changes for Admin App extensions

Because of breaking changes, introduced in Sitefinity CMS 13.1 release, all your previously built extensions will stop working.

Sitefinity CMS is updated use Angular 9.1.9. The Angular CLI project structure is also upgraded to improve the development experience and to make the future upgrades of the Angular framework easier.

In Sitefinity CMS, all extensions are moved from the root level to the src folder.

RECOMMENDATION: To resolve changes to the file structure when merging from the master branch, we recommend updating your source code using following this procedure:
  1. Clone the Admin App extensions repository.
  2. Copy your custom extension inside the src folder.
  3. Update the __extensions_index.ts file to include your custom module.
  4. Rebuild the extensions using npm run build:prod command.
IMPORTANT: Angular 9.1.9 also has breaking changes. If you have a deprecated dependency, you may need to change it. For more information, see the official Angular documentation:

Breaking changes in the Multilingual API

Sitefinity CMS 13.1 has introduced changes to its Native API for working with multilingual content. The previous multilingual APIs are deprecated and no longer work, starting with Sitefinity CMS 13.1. To learn how to upgrade your custom multilingual code, see Upgrade custom multilingual code.

Site settings for the singe-site license after upgrade from previous version

The following Advanced settings are obsoleted and you do need to set them up when your project uses a single site license and you upgrade it to Sitefinity CMS 13.1 or later from a previous version:

  • In the Settings » Advanced » System » Site URL Settings screen:
    • The Host
    • Non-default HTTP port
    • Non-default HTTPS port

IMPORTANT: If you have set up both Non-default HTTPS port and Non-default HTTP port, only the Non-default HTTPS port setting is used after the upgrade. You may remove the setting Non-default HTTP port.

  • In the Settings » Advanced » Project » DefaultSite screen:
    • FrontEndLoginPageId
    • FrontEndLoginPageUrl

IMPORTANT: If you have set up both options, only the FrontEndLoginPageId is used after the upgrade. You may remove the setting FrontEndLoginPageUrl.

API changes in Sitefinity CMS 13.0

Use the table below to browse the API changes introduced in Sitefinity CMS 13.0. You can filter the information, search for specific changes, and read additional details about the change.

IMPORTANT: After upgrade to 13.0, custom CSS styles in widget designers in the page editor might not work. For more information, see More troubleshooting resources.

API changes in Sitefinity CMS 12.2

Use the table below to browse the API changes introduced in Sitefinity CMS 12.2. You can filter the information, search for specific changes, and read additional details about the change.

API changes in Sitefinity CMS 12.1

Use the table below to browse the API changes introduced in Sitefinity CMS 12.1. You can filter the information, search for specific changes, and read additional details about the change.

API changes in Sitefinity CMS 12.0

Use the table below to browse the API changes introduced in Sitefinity CMS 12.0. You can filter the information, search for specific changes, and read additional details about the change.

Additional changes in Sitefinity CMS 12.0

Working with query strings in code

If you are using query strings in your custom code, and would like to have the page cache vary by the query string parameters you must configure this explicitly by either: 

  • Using the  Sitefinity CMS QueryStringGet extension method to read the query string values in your code. For more information see Configure cache variation by query string.
  • Or by manually configure a list of parameters for which output cache should vary, using the varyByParamsoutput cache header. For more information see the Configure cache headers for page and media cache profiles section in the Configure cache profiles article.

API changes in Sitefinity CMS 11.2

Use the table below to browse the API changes introduced in Sitefinity CMS 11.2. You can filter the information, search for specific changes, and read additional details about the change.

Additional changes in Sitefinity CMS 11.2

Removed unused jQuery references in MVC widgets

Bootstrap/mvc/Views – “Bootstrap templates”

  • List.BlogList.cshtml
  • List.BlogPostList.cshtml
  • List.EventsList.cshtml
  • List.ImageGallery.cshtml
  • List.SimpleList.cshtml
  • List.UsersList.cshtml
  • List.VideoGallery.cshtml

FeatherWdigets – “Minimal” templates

  • List.BlogList.cshtml
  • List.BlogPostList.cshtml
  • ListTemplateContainer.cshtml
  • List.EventList.cshtml
  • List.UsersList.cshtml
  • List.ImageGallery.cshtml
  • List.SimpleList.cshtml
  • List.NewsList.cshtml
  • List.VideoGallery.cshtml

 

API changes in Sitefinity CMS 11.1

Deprecation of Social Media buttons

All widgets under Social section except Twitter widget and Twitter Feed are getting deprecated with Sitefinity CMS 11.1. This change affects multiple components of the system in the following manner:

Removed classes, interfaces, and enums

  • Telerik.Sitefinity.Web.UI.Plugins.SocialBookmarksPlugin
  • Telerik.Sitefinity.Web.UI.PublicControls.FacebookFeed
  • Telerik.Sitefinity.Web.UI.PublicControls.FacebookLike
  • Telerik.Sitefinity.Web.UI.PublicControls.PageSharing
  • Telerik.Sitefinity.Web.UI.PublicControls.Designers.FacebookFeedDesigner
  • Telerik.Sitefinity.Web.UI.PublicControls.Designers.FacebookLikeDesigner
  • Telerik.Sitefinity.Web.UI.PublicControls.Designers.PageSharingDesigner
  • Telerik.Sitefinity.Publishing.Configuration.SocialShareConfig
  • Telerik.Sitefinity.Publishing.Web.UI.Designers.FacebookPipeDesignerView
  • Telerik.Sitefinity.SiteSettings.Basic.ISocialShareSettings
  • Telerik.Sitefinity.SiteSettings.Basic.SocialShareSettingsContract
  • Telerik.Sitefinity.Web.UI.SocialShareOptions
  • Telerik.Sitefinity.Web.UI.Plugins.SocialBookmarksPlugin
  • Telerik.Sitefinity.Web.UI.PublicControls.FacebookFeed
  • Telerik.Sitefinity.Web.UI.PublicControls.FacebookLike
  • Telerik.Sitefinity.Web.UI.PublicControls.PageSharing
  • Telerik.Sitefinity.Web.UI.PublicControls.Designers.FacebookFeedDesigner
  • Telerik.Sitefinity.Web.UI.PublicControls.Designers.FacebookLikeDesigner
  • Telerik.Sitefinity.Web.UI.PublicControls.Designers.PageSharingDesigner
  • Telerik.Sitefinity.Web.Utilities.SocialShareMode

Removed namespaces

  • Removed namespace Telerik.Sitefinity.Model.Publishing.Model.Facebook

Changed classes, interfaces and enums:

Telerik.Sitefinity.Frontend.ContentBlock.Mvc.Models.ContentBlockModel

  • Removed argument enableSocialSharing from public constructors

Removed properties

Telerik.Sitefinity.Modules.Lists.Web.UI.ListView

  • Removed public property EnableSocialSharing
  • Removed public property EnableSocialSharingDetail

Telerik.Sitefinity.Modules.News.NewsResources

  • Removed public property ExternalLinkLabelAddCustomFields

Telerik.Sitefinity.Modules.Lists.Web.UI.DetailsSimpleView

  • Removed public property EnableSocialSharing

Telerik.Sitefinity.DataIntelligenceConnector.DataIntelligenceResources

  • Removed public property FacebookLikeTrackingLabel
  • Removed public property SocialShareTrackingLabel

Telerik.Sitefinity.DataIntelligenceConnector.DataIntelligenceResources

  • Removed public property FacebookLikeTrackingLabel
  • Removed public property SocialShareTrackingLabel

Telerik.Sitefinity.Configuration.Web.ConfigSectionItems

  • Removed public property GetSocialShareBasicSettings
  • Removed public property SaveSocialShareBasicSettings

Telerik.Sitefinity.DynamicModules.Web.UI.Frontend.HierarchicalContentView

  • Removed public property EnableSocialSharing

Telerik.Sitefinity.Web.UI.ContentUI.Views.MasterViewBase

  • Removed public property EnableSocialSharing

Telerik.Sitefinity.Web.UI.ContentUI.Contracts.IContentViewMasterDefinition

  • Removed public property EnableSocialSharing

Telerik.Sitefinity.Web.UI.ContentUI.Contracts.IContentViewMasterDefinition

  • Removed public property EnableSocialSharing

Telerik.Sitefinity.Localization.Labels

  • Removed public property BigIcons
  • Removed public property Blogger
  • Removed public property ChooseMode
  • Removed public property ChooseOptions
  • Removed public property Delicious
  • Removed public property Digg
  • Removed public property DisplayCounters
  • Removed public property DisplayCountersToolTip
  • Removed public property EnableSocial
  • Removed public property EnableSocialToolTip
  • Removed public property Facebook
  • Removed public property FacebookActionLabel
  • Removed public property FacebookActivityFeed
  • Removed public property FacebookCurrentPage
  • Removed public property FacebookFeedBorderColor
  • Removed public property FacebookFeedColorScheme
  • Removed public property FacebookFeedDomain
  • Removed public property FacebookFeedFont
  • Removed public property FacebookFeedHeight
  • Removed public property FacebookFeedShowHeader
  • Removed public property FacebookFeedShowRecommendations
  • Removed public property FacebookFeedTrackRefferals
  • Removed public property FacebookFeedWidth
  • Removed public property FacebookLike
  • Removed public property FacebookLikeLayoutStyle
  • Removed public property FacebookLinkTarget
  • Removed public property FacebookOtherPage
  • Removed public property FacebookSendBtn
  • Removed public property FacebookShowFaces
  • Removed public property FacebookUrlToLike
  • Removed public property GoogleBookmarks
  • Removed public property GooglePlusOne
  • Removed public property IconsWithText
  • Removed public property LinkedIn
  • Removed public property MailTo
  • Removed public property MySpace
  • Removed public property PageSharing
  • Removed public property Reddit
  • Removed public property SmallIcons
  • Removed public property StumbleUpon
  • Removed public property Tumblr
  • Removed public property Twitter

Telerik.Sitefinity.Modules.UserProfiles.UserProfilesResources

  • Removed public property FacebookActivityFeedDescription
  • Removed public property FacebookActivityFeedTitle
  • Removed public property FacebookLikeDescription
  • Removed public property FacebookLikeTitle
  • Removed public property PageSharingDescription
  • Removed public property PageSharingTitle

Telerik.Sitefinity.Web.Configuration.ConfigDescriptions

  • Removed public property AdfsMetadataAddressCaption
  • Removed public property AdfsMetadataAddressDescription
  • Removed public property AdfsWtrealmCaption
  • Removed public property AdfsWtrealmDescription
  • Removed public property BloggerDescription
  • Removed public property BloggerTitle
  • Removed public property DeliciousDescription
  • Removed public property DeliciousTitle
  • Removed public property DiggDescription
  • Removed public property DiggTitle
  • Removed public property DisplayCountersDescription
  • Removed public property EnableSocialSharingCaption
  • Removed public property EnableSocialSharingDescription
  • Removed public property ExternalLoginDataProviderCaption
  • Removed public property ExternalLoginDataProviderDescription
  • Removed public property ExternalProdiverAppIdCaption
  • Removed public property ExternalProdiverAppIdDescription
  • Removed public property ExternalProdiverAppSecretCaption
  • Removed public property ExternalProdiverAppSecretDescription
  • Removed public property ExternalProdiverAutoAssignedRolesCaption
  • Removed public property ExternalProdiverAutoAssignedRolesDescription
  • Removed public property ExternalProdiverEnabledCaption
  • Removed public property ExternalProdiverEnabledDescription
  • Removed public property ExternalProdiverLinkCssClassCaption
  • Removed public property ExternalProdiverLinkCssClassDescription
  • Removed public property ExternalProdiverNameCaption
  • Removed public property ExternalProdiverNameDescription
  • Removed public property ExternalProdiverTitleCaption
  • Removed public property ExternalProdiverTitleDescription
  • Removed public property FacebookDescription
  • Removed public property FacebookTitle
  • Removed public property FilterExpressionCaption
  • Removed public property FilterExpressionDescription
  • Removed public property GoogleBookmarksDescription
  • Removed public property GoogleBookmarksTitle
  • Removed public property GooglePlusOneDescription
  • Removed public property GooglePlusOneTitle
  • Removed public property LinkedInDescription
  • Removed public property LinkedInTitle
  • Removed public property MailToDescription
  • Removed public property MailToTitle
  • Removed public property MySpaceDescription
  • Removed public property MySpaceTitle
  • Removed public property PageLogModeDescription
  • Removed public property PageLogModeTitle
  • Removed public property RedditDescription
  • Removed public property RedditTitle
  • Removed public property SocialBookmarkElementMarkup
  • Removed public property SocialBookmarkElementName
  • Removed public property SocialBookmarks
  • Removed public property SocialBookmarksConfig
  • Removed public property SocialShareModeDescription
  • Removed public property SocialShareModeTitle
  • Removed public property SocialShareViewConfig
  • Removed public property SocialShareViewConfigDescription
  • Removed public property SortExpressionCaption
  • Removed public property StumbleUponDescription
  • Removed public property StumbleUponTitle
  • Removed public property TumblrDescription
  • Removed public property TumblrTitle
  • Removed public property TwitterDescription
  • Removed public property TwitterTitle
  • Removed public property WinAuthMetadataAddressCaption
  • Removed public property WinAuthMetadataAddressDescription
  • Removed public property WinAuthWtrealmCaption
  • Removed public property WinAuthWtrealmDescription

Telerik.Sitefinity.Modules.GenericContent.Web.UI.ContentBlock

  • Removed public property EnableSocialSharing

Telerik.Sitefinity.Modules.Libraries.Configuration.VideosViewDetailElement

  • Removed public property EnableSocialShare

Telerik.Sitefinity.Modules.Libraries.Web.UI.IVideosViewDetailDefinition

  • Removed public property EnableSocialShare

Telerik.Sitefinity.Modules.Libraries.Web.UI.VideosViewDetailDefinition

  • Removed public property EnableSocialShare

Telerik.Sitefinity.Modules.Libraries.Web.UI.Videos.MediaPlayerControl

  • Removed public property EnableSocialShare

Telerik.Sitefinity.Modules.Libraries.Web.UI.Videos.VideosView

  • Removed public property EnableSocialShare

Telerik.Sitefinity.Modules.Pages.PageResources

  • Removed public property SocialSharing

Telerik.Sitefinity.Publishing.PublishingMessages

  • Removed public property FacebookPipeName

Telerik.Sitefinity.Web.Configuration.ContentView.Plugins.ContentPluginsConfig

  • Removed public property SocialBookmarks

Telerik.Sitefinity.Web.UI.ContentUI.ContentViewDetailDefinition

  • Removed public property EnableSocialSharing

Telerik.Sitefinity.Web.UI.ContentUI.ContentViewMasterDefinition

  • Removed public property EnableSocialSharing

Telerik.Sitefinity.Web.UI.ContentUI.Config.ContentViewDetailElement

  • Removed public property EnableSocialSharing

Telerik.Sitefinity.Web.UI.ContentUI.Config.ContentViewMasterElement

  • Removed public property EnableSocialSharing

Telerik.Sitefinity.Web.UI.ContentUI.Contracts.IContentViewDetailDefinition

  • Removed public property EnableSocialSharing

Telerik.Sitefinity.Modules.Ecommerce.Catalog.Web.UI.Views.ProductsDetailView

  • Removed public property EnableSocialSharing

Telerik.Sitefinity.Modules.Ecommerce.Orders.Web.UI.WishlistControl

  • Removed public property EnableSocialSharing

Telerik.Sitefinity.Forums.ForumsResources

  • Removed public property EnableSocialShareButtons

Telerik.Sitefinity.Frontend.Blogs.Mvc.Models.BlogPost.IBlogPostModel

  • Removed public property EnableSocialSharing

Telerik.Sitefinity.Frontend.DynamicContent.Mvc.Models.IDynamicContentModel

  • Removed public property EnableSocialSharing

Telerik.Sitefinity.Frontend.Events.Mvc.Models.IEventModel

  • Removed public property EnableSocialSharing

Telerik.Sitefinity.Frontend.Events.Mvc.Models.EventScheduler.IEventSchedulerModel

  • Removed public property EnableSocialSharing

Telerik.Sitefinity.Frontend.Lists.Mvc.Models.IListsModel

  • Removed public property EnableSocialSharing

Telerik.Sitefinity.Frontend.Media.Mvc.Models.DocumentsList.IDocumentsListModel

  • Removed public property EnableSocialSharing

Telerik.Sitefinity.Frontend.Media.Mvc.Models.ImageGallery.IImageGalleryModel

  • Removed public property EnableSocialSharing

Telerik.Sitefinity.Frontend.Media.Mvc.Models.VideoGallery.IVideoGalleryModel

  • Removed public property EnableSocialSharing

Telerik.Sitefinity.Frontend.News.Mvc.Models.INewsModel

  • Removed public property EnableSocialSharing

Telerik.Sitefinity.Frontend.Mvc.Helpers.SocialShareHelpers

  • Removed public field DataItemKey

Telerik.Sitefinity.Dashboard.Web.UI.DashboardStatusSelector

  • Removed public field pageResources

Telerik.Sitefinity.WebSecurity.WebSecurityResources

  • Removed public property ReferrerPolicyDescription

NOTE: If you are upgrading to Sitefinity CMS 11.1 and have Social sharing widgets on some of your pages, please refer to this KB article  for instructions how to remove them.

Switch to GeoLite 2 DB for cities & area codes

Removed classes, interfaces, and enums

  • Removed class Country with global namespace – Use the CityLocation class instead
  • Removed class DatabaseInfo with global namespace –No longer used.
  • Remove class Location with global namespace – Use the CityLocation class instead
  • Remove class Region with global namespace – Uset he CityLocation class instead
  • Remove class RegionName with global namespace – Use the CityLocation class instead
  • Remove class Telerik.Sitefinity.Personalization.Impl.GeoData.LookupService - Use IpCityLocationService instead

Introduction of support for distributed output cache

Changed methods

Telerik.Sitefinity.Web.UI.PublicControls.CacheSubstitutionWrapper

  • Method Render converted to static as there is no instance reference for cache substitution with distributed output cache and deserialization requires static method.

New Content Editing Extensions

Breaking change in the compatibility between content editing extensions built prior to Sitefinity CMS 11.1 and the new Sitefinity CMS version.

After upgrading to Sitefinity CMS 11.1 you must rebuild all previously built extensions. Perform the following:

  1. Get latest code from (https://github.com/Sitefinity/sitefinity-admin-app-extensions)
  2. Remove all node_modules
  3. Perform clean npm install
  4. Move the newly built files to your AdminApp folder and replace your existing (old) extensions.

SEO & OpenGraph

Change in the prioritization logic for loading OpenGraph properties on pages, where more than one widget displays content in details mode. If a page has more than one widget displaying an item in details mode, by default, the page loads the OpenGraph properties of the last widget that has its OpenGraphEnabled property set to true (default setting). For more information see: Priorities of loading OpenGraph properties on a page.

Previously the page was using metatags from the detailed view of the item which matched the canonical URL's of the page.

Workflow

Introduced refactoring to accommodate for the new expanded and improved review and approval workflow functionality.

Removed properties

Telerik.Sitefinity.Workflow.Model.WorkflowDefinition

  • Removed public property CultureScope – property moved to WorkflowScope.Language
  • Removed public property SendFirstLevelEmailNotification – property moved to WorkflowLevel.NotifyApprovers
  • Removed public property SendSecondLevelEmailNotification – property moved to WorkflowLevel.NotifyApprovers
  • Removed public property WorkflowPermissions – property moved to WorkflowLevel.Permissions
  • Removed public property WorkflowScopes – property renamed to Scopes.

Telerik.Sitefinity.Workflow.Model.WorkflowPermission 

  • Removed public property Definition – removed, new property to be used is Level

Telerik.Sitefinity.Workflow.Model.WorkflowScope 

  • Removed public property ContentFilterExpression –the property is no longer used
  • Removed public property ContentType – property moved to WorkflowTypeScope.ContentType
  • Removed public property ParentId –the property is no longer used
  • Removed public property SelectedIds –the property is no longer used
  • Removed public property Title –the property is no longer used

Telerik.Sitefinity.Workflow.IWorkflowExecutionDefinition

  • Removed public property AdditionalFirstLevelRecipients – property moved to IWorkflowExecutionLevel.CustomEmailRecipients
  • Removed public property AdditionalSecondLevelRecipients – property moved to IWorkflowExecutionLevel.CustomEmailRecipients
  • Removed public property SendFirstLevelEmailNotification – property moved to IWorkflowExecutionLevel.NotifyApprovers
  • Removed public property SendSecondLevelEmailNotification – property moved to IWorkflowExecutionLevel. NotifyApprovers
  • Removed public property WorkflowPermissions – property moved to IWorkflowExecutionLevel.Permissions

Telerik.Sitefinity.Workflow.WorkflowDefinitionProxy

  • Removed public property AdditionalFirstLevelRecipients – property moved to IWorkflowExecutionLevel.CustomEmailRecipients
  • Removed public property AdditionalSecondLevelRecipients – property moved to IWorkflowExecutionLevel.CustomEmailRecipients
  • Removed public property SendFirstLevelEmailNotification – property moved to IWorkflowExecutionLevel.NotifyApprovers
  • Removed public property SendSecondLevelEmailNotification – property moved to IWorkflowExecutionLevel. NotifyApprovers
  • Removed public property WorkflowPermissions – property moved to IWorkflowExecutionLevel.Permissions

Telerik.Sitefinity.Workflow.Services.Data.WorkflowDefinitionViewModel

  • Removed public property AdditionalFirstLevelRecipients – property moved to WorkflowLevelViewModel.CustomEmailRecipients
  • Removed public property AdditionalSecondLevelRecipients – property moved to WorkflowLevelViewModel.CustomEmailRecipients
  • Removed public property CultureScopes – property moved to WorkflowScopeViewModel.Language
  • Removed public property CustomXamlxUrl - removed
  • Removed public property ScopeContent – property moved to UIScopeItem1, UIScopeItem2, UIScopeItem3
  • Removed public property ScopeCultures – property moved to UIScopeItem1, UIScopeItem2, UIScopeItem3
  • Removed public property ScopeSites – property moved to UIScopeItem1, UIScopeItem2, UIScopeItem3
  • Removed public property SendFirstLevelEmailNotification – property moved to WorkflowLevelViewModel.NotifyApprovers
  • Removed public property SendSecondLevelEmailNotification – property moved to WorkflowLevelViewModel.NotifyApprovers
  • Removed public property Sites – property moved to WorkflowLevelViewModel.Site
  • Removed public property WorkflowPermissions – property moved to WorkflowLevelViewModel.Permissions
  • Removed public property WorkflowScopes – property moved to WorkflowLevelViewModel.Scopes

Telerik.Sitefinity.Workflow.Services.Data.WorkflowScopeViewModel.

  • Removed public property ContentType – property moved to WorkflowTypeScopeViewModel.ContentType
  • Removed public property ParentId–the property is no longer used
  • Removed public property QueryData –the property is no longer used
  • Removed public property SelectedIds –the property is no longer used
  • Removed public property Title –the property is no longer used

Removed methods

Telerik.Sitefinity.Workflow.FlowchartWorkflowInspector

 

  • Removed public method GetWorkflowStates –the method is no longer used

Telerik.Sitefinity.Workflow.WorkflowDefinitionProxy

  • Removed the class constructor

Changed methods

Telerik.Sitefinity.Workflow.Services.IWorkflowDefinitionService

 

  • public method GetContentScope – returns collection of type WorkflowTypeScopeViewModel instead of WorkflowScopeViewModel

Telerik.Sitefinity.Workflow.Services.WorkflowDefinitionService

  • public method GetContentScope – returns collection of type WorkflowTypeScopeViewModel instead of WorkflowScopeViewModel

Telerik.Sitefinity.Workflow.Services.Data.WorkflowScopeViewModel

  • public property Language – type of property has been changed from string to IList<CultureViewModel>

Mobile formats

Removed properties:

Telerik.Sitefinity.MobileFormats.MobileFormatResources

  • Removed public property SelectedOutputCacheProfileDescription – the property is no longer used
  • Removed public propertySelectedOutputCacheProfileTitle– the property is no longer used
  • Removed public property ModifyTemplatesForGoogleAMPPages – the property is no longer used

Telerik.Sitefinity.MobileFormats.MVC.Controllers.AmpController

  • Removed public property Model – moved to a Base class

Removed namespaces

  • namespace Telerik.Sitefinity.MobileFormats.Wrappers - and all classes from that namespace – the classes are no longer used
  • namespace Telerik.Sitefinity.MobileFormats.Wrappers.Model - and all classes from that namespace – the classes are no longer used

Changed classes, interfaces and enums:

Telerik.Sitefinity.MobileFormats.MVC.Models

 

  • IAmpModel – renamedto IMobileFormatModel

Telerik.Sitefinity.MobileFormats.Cache -

  • Renamed public interface IAmpCacheDependencyResolver – renamed to ImobileFormatCacheDependencyResolver

Telerik.Sitefinity.MobileFormats.Configuration - The following classes are now internal

  • Telerik.Sitefinity.MobileFormats.Configuration.AmpScripDependenciesConfigElement
  • Telerik.Sitefinity.MobileFormats.Configuration.AmpCacheProfileElement
  • Telerik.Sitefinity.MobileFormats.Configuration.GoogleAmpConfig

Telerik.Sitefinity.MobileFormats.Web.Services.Dto - The following classes are now internal

  • Telerik.Sitefinity.MobileFormats.Web.Services.Dto.ActiveMobileFormatDefinitionsDto
  • Telerik.Sitefinity.MobileFormats.Web.Services.Dto.MobileFormatPreviewDto
  • Telerik.Sitefinity.MobileFormats.Web.Services.Dto.New public class MobileFormatPreviewUrlDto

Changed methods:

Telerik.Sitefinity.MobileFormats.IMobileFormatsManager

 

  • IsMobileFormatContentTypeActive – Changes in the type of the parameters the method uses. Now the “type” parameter of the method is System.Type instead of string

Telerik.Sitefinity.MobileFormats.MobileFormatBase

  • GenerateContentTypeTemplate – Changes in the method parameter. The method now uses Telerik.Sitefinity.MobileFormats.Model.MobileFormatContentType as a parameter instead of a string.

Telerik.Sitefinity.MobileFormats.MobileFormatsManager

  • IsMobileFormatContentTypeActive - Changes in the type of the parameters the method uses. Now the “type” parameter of the method is System.Type instead of string

Telerik.Sitefinity.MobileFormats.ItemResolvers.IMobileFormatItemResolver

  • GetItem – The method now has 3 parameters.
    • string ,
    • System.Nullable<Telerik.Sitefinity.GenericContent.Model.ContentLifecycleStatus>
    • System.Globalization.CultureInfo

Telerik.Sitefinity.MobileFormats.MVC.Controllers.AmpController.

  • Changes in the Constructor – it now receives the following parameters
    • Telerik.Sitefinity.MobileFormats.ItemResolvers.IMobileFormatItemResolver
    • Telerik.Sitefinity.Localization.UrlLocalizationStrategies.IUrlLocalizationService
    • Telerik.Sitefinity.MobileFormats.IMobileFormatsManager
    • Telerik.Sitefinity.MobileFormats.Cache.IMobileFormatCacheDependencyResolver

Telerik.Sitefinity.MobileFormats.Template.ITemplateGenerator

  • GenerateContentTypeTemplate – Changes in the method parameter. The method now uses Telerik.Sitefinity.MobileFormats.Model.MobileFormatContentType as a parameter instead of a string.

Introduce search index for the backend

Removed properties:

IpublishingPoint

  • Removed public property IsTemplate – property is no longer used
  • Removed public property Template – property is no longer used

PublishingPoint

  • Removed public property StopKeywords – property is no longer used
  • Removed public property Template - – property is no longer used

Removed classes:

HandleActionArgs  - The PublishingSystemEventInfo class should be used.

PublishingSystemEventInfoForPersistenItems -  The PublishingSystemEventInfo class should be used.

Removed methods:

  • PublishingSystemFactory.GetPipes() is removed - PublishingSystemFactory.GetPublishingPipes() should be used instead.
  • PublishingManager.CallSubscribedPipes(IEnumerable<HandleActionArgs> args) is removed - PublishingManager.CallSubscribedPipes(IEnumerable<PublishingSystemEventInfo> args) should be used instead.

Changes in the ISearchResultsBuilder interface

The Search method now accepts an extra parameter setLinksOnlyFromCurrentSite to facilitate displaying search results from the current site only. For more information see the closed bug item.

OData upgraded to 6.1.0

 

 

API changes in Sitefinity CMS 11.0

IProfileModel interface

The IProfileModel interface with namespace Telerik.Sitefinity.Frontend.Identity.Mvc.Models.Profile has a new Boolean property AllowCurrentProfileUpdates. The property gets or sets whether current users can update their profiles or not.

Telerik.Sitefinity.Modules.Pages.Web.Services.IZoneEditorService interface

Method Change in From  To 
bool PublishPageDraft(string draftId)  UriTemplate  "/Page/Publish/"  "/Page/Publish/{draftId}/" 
bool ChangeTheme(string draftId, string themeName, bool isTemplate) UriTemplate  "/Page/Theme/{draftId}/?isTemplate={isTemplate}"  "/Page/Theme/{draftId}/{themeName}/?isTemplate={isTemplate}" 
void SetPageLocalizationStrategy(string pageNodeId, string strategy, bool copyData)  UriTemplate  "/Page/LocalizationStrategy/?strategy={strategy}&copyData={copyData}"  "/Page/LocalizationStrategy/{pageNodeId}/?strategy={strategy}&copyData={copyData}" 
void InitializeSplitPage(string targetNodeId, string sourceLanguage, string targetLanguage)  UriTemplate  "/Page/InitializeSplitPage/?sourceLanguage={sourceLanguage}&targetLanguage={targetLanguage}"  "/Page/InitializeSplitPage/{targetNodeId}/?sourceLanguage={sourceLanguage}&targetLanguage={targetLanguage}" 
void SplitPage(string pageNodeId)  UriTemplate  "/Page/SplitPage/"  "/Page/SplitPage/{pageNodeId}/" 
bool PublishTemplateDraft(string draftId)  UriTemplate  "/Template/Publish/"  "/Template/Publish/{draftId}/" 
bool SaveTemplateDraft(string draftId)  UriTemplate  "/Template/Save/"  "/Template/Save/{draftId}/" 

Service stack

If you were using the .Core or .Signed NuGet packages, you need to strip the suffixes to use the main NuGet packages. For more information, see Service stack release notes.

Lucene

  • Removed all Lucene classes and interfaces directly used inside Sitefinity CMS
  • Lucene is now used as a NuGet package for Lucene version 3.0.3

Elasticsearch

Elasticsearch is upgraded to version 5.5.0

API changes in Sitefinity CMS 10.2

Pages API

PageData has new property VariationTypeKey. This property’s value is used to differentiate personalization page variations from A/B test page variations. For personalization page variations, its value is “pers”, and for A/B testing page variations it is set to “abtest”. An upgrade script runs upon first start of Sitefinity 10.2 that sets “pers” value for all personalization page variations that has been created before the upgrade.

Method Telerik.Sitefinity.Services.SitefinityContextBase.GetSites

SitefinityContextBase.GetSites method was added a new optional parameter – ifAccessible. It allows to get only the sites that the user has permission to access from UserActivityManager cache. This is backward compatible as it does not change the behavior of previous uses without passing the parameter – in that case it still returns all the sites.

Removed properties, fields, etc.

The below properties, fields, classes and enums have been removed in regards to the removal of the Silverlight Video player in Sitefinity

  • Telerik.Sitefinity.Modules.Libraries.Configuration.LibrariesConfig.MediaPlayerMode
  • Telerik.Sitefinity.Modules.Libraries.Configuration.LibrariesConfig.UploadMode
  • Telerik.Sitefinity.Modules.Libraries.Web.UI.EmbedControl.DefaultSilverlightEmbedStringTemplate
  • Telerik.Sitefinity.Modules.Libraries.Web.UI.ThumbnailMediaPlayerDialog.MediaPlayerMode
  • Telerik.Sitefinity.Modules.Libraries.Web.UI.Videos.MediaPlayerControl.MediaPlayerMode
  • Telerik.Sitefinity.Modules.Libraries.Web.UI.Videos.MediaPlayerControl.SilverlightPlayerSkin
  • Telerik.Sitefinity.Modules.Libraries.Web.UI.Videos.MediaPlayerControl.TemplatePath
  • Telerik.Sitefinity.Modules.Libraries.Web.UI.Videos.ThumbnailMediaPlayerControl.MediaPlayerMode
  • Telerik.Sitefinity.Web.Configuration.ConfigDescriptions.MediaPlayerMode
  • Telerik.Sitefinity.Web.Configuration.ConfigDescriptions.UploadMode
  • Telerik.Sitefinity.Web.UI.Fields.FileField.UploadMode
  • Telerik.Sitefinity.Web.UI.Fields.ThumbnailField.MediaPlayerMode
  • Telerik.Sitefinity.Modules.Pages.ScriptRef.Silverlight

Removed classes and enums

  • Telerik.Sitefinity.Modules.Libraries.Configuration.LibrariesFileUploadMode
  • Telerik.Sitefinity.Modules.Libraries.Configuration.LibrariesMediaPlayerMode
  • Telerik.Sitefinity.Modules.Libraries.Web.LibrariesRadUploadHandler
  • Telerik.Sitefinity.Modules.Libraries.Web.UI.Videos.ThumbnailControl

Analytics - renamed functions

  • Telerik.Sitefinity.Analytics.Infrastructure.Services.AnalyticsAccountService.GET is renamed to Telerik.Sitefinity.Analytics.Infrastructure.Services.AnalyticsAccountService.Get
  • Telerik.Sitefinity.Analytics.Infrastructure.Services.AnalyticsAccountService.POST is renamed to Telerik.Sitefinity.Analytics.Infrastructure.Services.AnalyticsAccountService.Post

Ecommerce  - performance improvement changes

Introduced performance optimizations when working with Discount and CartDiscount objects. Discounts are no longer fetched on each operation inside the method logic but can be passed as an optional method parameter instead and this parameter will be used in the method execution chain.

NOTE: This change enables you to pass a list of discounts when working with the respective methods. Keep in mind you need to manually filter the list for active discounts (OrdersManager.GetDiscounts().Where(x => x.IsActive).ToList(); ) as the default implementation will not apply the filtering. If you pass any non-active discounts, Sitefinity will treat them the same way and will apply them as well. If you do not pass any discounts Sitefinity will get them using the old logic.

Changed interfaces 

Telerik.Sitefinity.Modules.Ecommerce.Orders.Interfaces.IDiscountCalculator

New method signatures:

  • Telerik.Sitefinity.Modules.Ecommerce.Orders.Interfaces.IDiscountCalculator.ApplicableCartDiscounts – gets all applicable CartDiscounts for the CartOrder from a list of Discounts
  • Telerik.Sitefinity.Modules.Ecommerce.Orders.Interfaces.IDiscountCalculator.CalculateAndApplyOrderDiscounts – new overload of the CalculateAndApplyOrderDiscounts method which accepts a List<CartDiscount>
  • Telerik.Sitefinity.Modules.Ecommerce.Orders.Interfaces.IDiscountCalculator.SumRoundedOrderDiscounts - new overload of the SumRoundedOrderDiscounts method which accepts a List<CartDiscount>

Changed method signatures:

  • Telerik.Sitefinity.Modules.Ecommerce.Orders.Interfaces.IDiscountCalculator.CalculateAndApplyOrderDiscounts – accepts a List<Discount> as an optional parameter
  • Telerik.Sitefinity.Modules.Ecommerce.Orders.Interfaces.IDiscountCalculator.SumRoundedOrderDiscounts - accepts a List<Discount> as an optional parameter

Changed functions

All methods listed below now accept a List<Discount> as an optional parameter. If none is specified, Sitefinity will use all active discounts.

  • Telerik.Sitefinity.Modules.Ecommerce.Orders.Business.DiscountCalculator.ApplicableCartDiscounts
  • Telerik.Sitefinity.Modules.Ecommerce.Orders.Business.DiscountCalculator.CalculateAndApplyOrderDiscounts
  • Telerik.Sitefinity.Modules.Ecommerce.Orders.Business.DiscountCalculator.SumRoundedOrderDiscounts
  • Telerik.Sitefinity.Modules.Ecommerce.Orders.Business.Calculators.DiscountCalculatorBase.ApplicableCartDiscounts
  • Telerik.Sitefinity.Modules.Ecommerce.Orders.Business.Calculators.DiscountCalculatorBase.CalculateAndApplyOrderDiscounts
  • Telerik.Sitefinity.Modules.Ecommerce.Orders.Business.Calculators.DiscountCalculatorBase.SumRoundedOrderDiscounts

New functions

  • Telerik.Sitefinity.Modules.Ecommerce.Orders.Business.DiscountCalculator.ApplicableCartDiscounts - gets all applicable CartDiscounts for the CartOrder from a list of Discounts
  • Telerik.Sitefinity.Modules.Ecommerce.Orders.Business.DiscountCalculator.CalculateAndApplyOrderDiscounts - new overload of the CalculateAndApplyOrderDiscounts method which accepts a List<CartDiscount> parameter
  • Telerik.Sitefinity.Modules.Ecommerce.Orders.Business.DiscountCalculator.SumRoundedOrderDiscounts - new overload of the SumRoundedOrderDiscounts method which accepts a List<CartDiscount> parameter
  • Telerik.Sitefinity.Modules.Ecommerce.Orders.Business.Calculators.DiscountCalculatorBase.CalculateAndApplyOrderDiscounts - new overload of the CalculateAndApplyOrderDiscounts method which accepts a List<CartDiscount> parameter
  • Telerik.Sitefinity.Modules.Ecommerce.Orders.Business.Calculators.DiscountCalculatorBase.SumRoundedOrderDiscounts - new overload of the CalculateAndApplyOrderDiscounts method which accepts a List<CartDiscount> parameter
  • Telerik.Sitefinity.Modules.Ecommerce.Orders.Business.Calculators.DiscountCalculatorBase.SumRoundedOrderDiscounts - new overload of the CalculateAndApplyOrderDiscounts method which accepts a List<CartDiscount> parameter

OData services

New empty value for non-nullable GUID array field – empty array


API changes in Sitefinity CMS 10.1

  • The signature of the ExecuteAction method of the Interface Telerik.Sitefinity.Frontend.EmailCampaigns.Mvc.Models.UnsubscribeForm.IUnsubscribeFormModel is changed from:
    void ExecuteAction(string subscriberId, string issueId, bool shouldSubscribe);

    to:
    void ExecuteAction(string subscriberId, string issueId, string listId, bool shouldSubscribe);

  • The signature of the ExecuteAction method of the class Telerik.Sitefinity.Frontend.EmailCampaigns.Mvc.Models.UnsubscribeForm.UnsubscribeFormModel that implements the interface IUnsubscribeFormModel is updated.

API changes in Sitefinity CMS 10.0

NOTE: Sitefinity Digital Experience Cloud (DEC) was renamed to Sitefinity Insight as a part of the Sitefinity 13.0 release. However, Sitefinity CMS and its documentation prior to version 13.0 continue using the former name - Digital Experience Cloud.

Cache profile settings 

  • Vary by User agent default value is now false. This means no specific cache for mobile device users - they may be served a desktop version of the content. The setting is still available for modification. 
  • Option Wait for page OutputCache to fill is now in Settings » Advanced » System » Output Cache Settings 

Module Builder 

  • DynamicModuleDataProvider – methods GetChildItems have a required parameter childType
  • DynamicModuleManager – methods GetChildItems have a required parameter childType 

Authentication  

Removed classes

  • SitefinitySessionAuthenticationModule  
  • SitefinityCookieTransform
  • SitefinitySessionTokenHandler
  • RolesInitializedArgs
  • RolesInitializingArgs
  • UserIdentity
  • WindowsIdentity
  • ClaimsIdentityProxy
  • ClaimsPrincipalProxy
  • SecurityTokenServiceHttpHandler
  • SFFederationAuthenticationModule
  • SessionCookieHandler

Removed methods

  • SecurityManager.GetCurrentUser – It was obsolete  
  • CustomIssuerNameRegistry - constructor - CustomIssuerNameRegistry(XmlNodeList customConfiguration)  
  • SFClaimsAuthenticationManager.Authenticate

Removed properties, fields, etc.

  • WcfMembershipUser.UserName
  • SecurityManager.ObsoleteSitefinityPrincipal
  • SecurityManager.PrincipalContextKey
  • LoginWidget.ServiceUrl

Changed classes 

  • SitefinityClaimsAuthenticationModule – Major changes  
  • SitefinityPrincipal – Major changes  
  • SitefinityIdentity – Major changes  
  • ClaimsManager – Major changes  

Changed methods

  • SecurityManager.GetPasswordRecoveryUser – now returns SitefinityIdentity, since ClaimsIdentityProxy is removed
  • ClaimsManager.GetCurrentIdentity - now returns SitefinityIdentity, since ClaimsIdentityProxy is removed 
  • SecurityManager.GetUser(System.Guid, out System.String&) – now requires a transactionName. If you do not use transaction – set it to null
  • LdapMembershipProvider.CreateUser – no longer accepts username as first parameter  
  • WcfMembershipUser – constructor now accepts externalProviderId as parameter  
  • RequestBackendAuthenticationFilterAttribute – constructor now accepts optional parameter needAdminRights
  • IsAccessibleArgs – constructor now accepts parameter isAccessible, that is used to set the IsAccessible property  
  • UserProfileDetailWriteView - ShowErrorLabelMessage renamed to ShowErrorLabelMessages and accepting IEnumerable<string> messages 

Other changes:  

  • Microsoft.IdentityModel is now replaced with System.IdentityModel and System.Security

SVG Images Format Support 

Introduced new property ReadOnlyReplacement in ITextFieldDefinition interface.

DEC Connector 

Deprecated classes and interfaces 

Handlers: 

  • public abstract class SentencesTrackingHandlerBase<T> 
  • public abstract class SubjectMetadataTrackingHandlerBase<T> 
  • public abstract class MappingsTrackingHandlerBase<T> 

Managers 

  • public interface ISentenceManager 
  • public interface ISubjectMappingManager 
  • public interface ISubjectMetadataManager 

A new manager is now combining the functionality of all of them:  
public interface IInteractionManager 

Changes in inheritance 

All classes which were inheriting  

  • public abstract class SentencesTrackingHandlerBase<T> 
  • public abstract class SubjectMetadataTrackingHandlerBase<T> 
  • public abstract class MappingsTrackingHandlerBase<T> 

And were implementing respective methods 

  • public abstract List<Sentence> ComposeSentences(T @event); 
  • public abstract List<Mapping> ComposeMappings(T @event); 
  • public abstract List<SubjectMetadata> ComposeSubjectMetadata(T @event); 

Now they are inheriting from: 
public abstract class InteractionsTrackingHandlerBase<T>  

and implementing: 
public abstract List<Interaction> ComposeInteractions(T @event) 

Changes in public classes and interfaces 

public interface IDataIntelligenceClientsFacade 

Removed methods 

  • Task SendSentence(string source, Sentence sentence); 
  • Task SendSentences(string source, List<Sentence> sentences); 
  • Task SendMapping(string source, SubjectMapping subjectMapping); 
  • Task SendMappings(string source, List<SubjectMapping> subjectMappings); 
  • Task SendSubjectMetadata(string source, SubjectMetadata subjectMetadata); 
  • Task SendSubjectMetadata(string source, List<SubjectMetadata> subjectMetadata); 

New methods 

  • Task SendInteraction(string source, Interaction interaction);  
  • Task SendInteractions(string source, List<Interaction> interactions); 

API changes in Sitefinity CMS 9.2

Web services

The master identifier of life-cycle items is used as an identifier, regardless of the life-cycle configuration setting chosen.
Partially implemented validation checks on fields. Implementation covers:

IMetaField
ChoiceFieldDefinition - New property is added to support Export and Import functionality of the enhanced choice fields in the static modules.

Diagnostics module

  • DataAccessReportView class is removed.
    Instead all SQL queries are visualized using SqlQueryReportView class.
  • OperationDetailsView class is removed
    Instead details about queries executing during an operation are visualized using SqlQueryGrid class.
  • DiagnosticsToolError is removed because the tool error screens is not required 

MVC Framework Feather   

  • In ContentModelBase abstract class a new property  - SerializedDateFilters, is added.
    It allows persistence of the selected date filters in the widget's designer.
  • In ContentModelBase abstract class a new property - LimitCount, is added.
    It allows setting of max limit count of the displayed items.
  • In IContentBlockModel interface a new property - WrapperCssClass, is added. It allows a CSS class to be applied on the wrapper tag of the default content block view with the following signature: string WrapperCssClass { get; set; }
  • The view sf-filter-selector.html is updated to sf-filter-selector.sf-cshtml  due to localization of  the resource: Res.Get<ClientComponentsResources>().AnyTime

MVC Framework Feather Widgets

  • Added new property - SerializedDateFilters, which allows persistence of the selected date filters in the widget's designer.
    It is added in INewsModel, IDynamicContentModel, ISearchResultsModel, IDocumentsListModel, IImageGalleryModel, IVideoGalleryModel, IUsersListModel, IBlogModel, IBlogPostModel, IEventModel interfaces and in SearchResultsModel and UsersListModel classes. 
  • Added new property - LimitCount, which allows setting the max limit count of the displayed items.
    It is added in INewsModel, IDynamicContentModel, ISearchResultsModel, IDocumentsListModel, IImageGalleryModel, IVideoGalleryModel, IUsersListModel, IBlogModel, IBlogPostModel, IEventModel interfaces and in SearchResultsModel and UsersListModel classes. 
  • It assembly Telerik.Sitefinity.Frontend.Events.dll, the view sf-filter-selector.html is updated to sf-filter-selector.sf-cshtml due to localization of  the resource: Res.Get<ClientComponentsResources>().AnyTime
     


API changes in Sitefinity CMS 9.1

SiteSync

The following methods are changed:

  • public property Telerik.Sitefinity.SiteSync.ISiteSyncExportTransaction.MainItem
  • public property Telerik.Sitefinity.SiteSync.ISiteSyncTransaction.Items
  • public property Telerik.Sitefinity.SiteSync.SiteSyncTransactionContext.Item

The following entries are removed:

  • namespace Telerik.Sitefinity.Configuration.Web.UI.Basic
  • namespace Telerik.Sitefinity.Configuration.Web.ViewModels

The following entries are moved from Telerik.Sitefinity.SiteSync to Telerik.Sitefinity.SiteSync.Impl assembly:

  • public class Telerik.Sitefinity.SiteSync.SiteSyncDefinitions
  • public class Telerik.Sitefinity.SiteSync.SiteSyncFacade
  • public class Telerik.Sitefinity.SiteSync.SiteSyncFluentExtensions
  • public class Telerik.Sitefinity.SiteSync.SiteSyncModule
  • public class Telerik.Sitefinity.SiteSync.SiteSyncObject
  • public class Telerik.Sitefinity.SiteSync.SiteSyncResources
  • public class Telerik.Sitefinity.SiteSync.SyncCompletedArgs
  • public class Telerik.Sitefinity.SiteSync.SyncStartedArgs
  • public class Telerik.Sitefinity.SiteSync.SyncSummaryListItem
  • namespace Telerik.Sitefinity.SiteSync.BasicSettings
  • namespace Telerik.Sitefinity.SiteSync.Configuration
  • namespace Telerik.Sitefinity.SiteSync.Data
  • namespace Telerik.Sitefinity.SiteSync.Fluent
  • public class Telerik.Sitefinity.SiteSync.Model.SiteSyncLogEntry
  • public class Telerik.Sitefinity.SiteSync.Model.SiteSyncServer
  • public class Telerik.Sitefinity.SiteSync.Model.SiteSyncSummary
  • public class Telerik.Sitefinity.SiteSync.Web.UI.FilterSitesSidebarControl
  • public class Telerik.Sitefinity.SiteSync.Web.UI.MigrationDialog
  • public class Telerik.Sitefinity.SiteSync.Web.UI.ScheduledTasksListView
  • public class Telerik.Sitefinity.SiteSync.Web.UI.SyncHistoryView
  • public class Telerik.Sitefinity.SiteSync.Web.UI.SynchronizationControlPanel
  • public class Telerik.Sitefinity.SiteSync.Web.UI.SyncingDialog
  • public class Telerik.Sitefinity.SiteSync.Web.UI.SyncProgressView
  • public class Telerik.Sitefinity.SiteSync.Web.UI.SyncServersAddDialog
  • public class Telerik.Sitefinity.SiteSync.Web.UI.SyncSetupConfigView
  • public class Telerik.Sitefinity.SiteSync.Web.UI.SyncSitesPanelWidget
  • public class Telerik.Sitefinity.SiteSync.Web.UI.Fields.SyncCurrentServerSettingsField
  • public class Telerik.Sitefinity.SiteSync.Web.UI.Fields.SyncDetailsListField
  • public class Telerik.Sitefinity.SiteSync.Web.UI.Fields.SyncDetailsListFieldDefinitionElement
  • public class Telerik.Sitefinity.SiteSync.Web.UI.Fields.SyncServersListField
  • public class Telerik.Sitefinity.SiteSync.Web.UI.Fields.SyncSummaryField
  • public class Telerik.Sitefinity.SiteSync.Web.UI.Fields.SyncSummaryFieldDefinition
  • public class Telerik.Sitefinity.SiteSync.Web.UI.Fields.SyncSummaryFieldDefinitionElement

The following entries are added:

  • Telerik.Sitefinity.SiteSync.dll.Telerik.Sitefinity.SiteSync.ICommonItemLoader
  • Telerik.Sitefinity.SiteSync.dll.Telerik.Sitefinity.SiteSync.ISiteSyncContext.GetConfiguredTargetServerIds
  • Telerik.Sitefinity.SiteSync.dll.Telerik.Sitefinity.SiteSync.ISiteSyncExportContext.GetSyncBatchSize
  • Telerik.Sitefinity.SiteSync.dll.Telerik.Sitefinity.SiteSync.ISiteSyncExportFilterRegistry
  • Telerik.Sitefinity.SiteSync.dll.Telerik.Sitefinity.SiteSync.ISiteSyncLogger
  • Telerik.Sitefinity.SiteSync.dll.Telerik.Sitefinity.SiteSync.ISiteSyncSnapIn.SupportedType
  • Telerik.Sitefinity.SiteSync.dll.Telerik.Sitefinity.SiteSync.ISiteSyncSnapInRegistry.ResolveSnapIn<TSnapIn>
  • Telerik.Sitefinity.SiteSync.dll.Telerik.Sitefinity.SiteSync.ISiteSyncTypeRegistry.Register
  • Telerik.Sitefinity.SiteSync.dll.Telerik.Sitefinity.SiteSync.ISiteSyncTypeRegistry.Unregister
  • Telerik.Sitefinity.SiteSync.dll.Telerik.Sitefinity.SiteSync.SiteSyncBehavior.MediaProviderMigrationBehavior
  • Telerik.Sitefinity.SiteSync.dll.Telerik.Sitefinity.SiteSync.SiteSyncBehavior.ProviderMigrationBehavior
  • Telerik.Sitefinity.SiteSync.dll.Telerik.Sitefinity.SiteSync.Serialization.ISiteSyncSerializer

Recycle Bin

The following method is removed:

public method Telerik.Sitefinity.RecycleBin.Web.UI.RecycleBinControlMaster.RecycleBinControl.AddAppVirtualPath

Feather

In IContentBlockModel interface a new property WrapperCssClass was added that allows a CSS class to be applied on the wrapper tag of the default content block view with the following signature: string WrapperCssClass { get; set; } 

API changes in Sitefinity CMS 9.0

Forms

FormEntriesSeed property in Telerik.Sitefinity.Forms.Model.FormDescription is obsolete. Use FormsManager.Provider.GetNextReferralCode(entry type name) as a value for ReferralCode of new entries.

Feather

IFieldConfigurator interface method Configure now receives backend control as reference parameter and has the following signature:

void Configure(ref FieldControl backendControl, IFormFieldController<IFormFieldModel> formFieldController);

Based on this, Configure method in all classes that implement this interface must be modified to follow the signature.

Libraries

LibrariesManager and LibrariesDataProvider contain new instance methods for:

  • Compilation of media file urls – RecompileMediaFileUrls to generate appropriate URLs for the file.
  • Finding file link based on a given URL – GetFileFromUrl
  • Manipulation of MediaFileLinks and MediaFileUrls that contain the information about the media file for a given culture - CreateMediaFileUrl, GetMediaFileUrls, CreateMediaFileLink, and GetMediaFileLinks.

IContentService and ContentServiceBase contain new methods for file link manipulations – CopyFileLink and GetMediaFileLinks.

Fields

Use GetString("FieldName") to construct anonymous types
For example:

.Select(d => new
{
FieldName = d.GetString("FieldName")
});
 
must be updated to explicitly case ToString() e.g.
.Select(d => new
{
FieldName = d.GetString("FieldName").ToString()
});

Content services

ContentItemContext has new property SfAdditionalInfo that holds the descendants' specific information that is consumed by the clients. For example, it is used for MediaContentService to pass specific information without breaking the generic contract. The information for MediaFileTotalSize, DefaultFileName.

IAppSettings, AppSettings, SiteAppSettings

Method ResolveThumbnailFilePath has optional culture parameter:

string ResolveThumbnailFilePath(MediaContent media, string tmbName, string fromPath = null, string culture = null);

Multilingual

When you add or delete a language on your site, the changes are persisted on the file system, regardless the storage mode that you have configured. The changes are saved in the ResourceConfig file.
This is because languages are part of the building of the metadata source for connecting to the database. In addition, changing the languages changes the database structure and all structural changes are transferred through the deployment package 

API changes in Sitefinity CMS 8.2

Dynamic modules

For dynamic modules that are exported before Sitefinity 8.2 and are imported into Sitefinity 8.2 or above, before importing the module, make sure that the module xml config file for the specified type has the following settings:

  • In the definition of each DynamicModuleField element, add the following line or change the value to true, if the setting is present:
    <CanCreateItemsWhileSelecting>true</CanCreateItemsWhileSelecting>
  • For each taxonomy field definition in the backend views configuration, the tag allowCreating="True" should be present.

NOTE: If the module is imported before the upgrade to 8.2, then the upgrade will automatically make the appropriate changes.

Continuous integration scenarios

There is a breaking change done in the bootstrap process of Sitefinity, which affects the system initialization and upgrade phases. Now the bootstrap process of the system is done asynchronously and the application status page is being displayed while the system is starting up. This change can lead to changes in your continuous integration, testing, or delivery processes. For more information, see Application status page in continuous integration scenarios.

Widgets

In class SearchBox - property Embadded is renamed to Embedded.

API changes in Sitefinity CMS 8.1

General changes

  • IDynamicListProvider interface
    New overload of the GetSubscribers method introduced.
    Added support for filtering, sorting, number of items to skip and take, and total count. These parameters enable you to improve performance when fetching items from the data provider and building list of subscribers.
  • ISubscriberServiceservice
    New dynamicListKey parameter introduced in the GetMailingListSubscribers and GetMailingListSubscribersInXml endpoints.
    If you pass a dynamic list key, the methods return the subscribers from the respective dynamic list.

Audit trail

AuditField class
ConfigName property introduced to hold the name of the property that stores the names of changed configurations.

Documents service

PresentationFramework reference added in the Telerik.Sitefinity.Services.Documents.Impl DLL file.

Newsletters

Configuration changes -  new properties introduced for bounce checks, retries, and bounce actions configurations.

Removed some properties not in use.

Feather

Extension of some templates for client components is changed from .html to .sf-cshtml. If you have customized a client component JavaScript code and you receive a 404 (Not Found) exception, you need to change the extension in template URL.

EXAMPLE: ctrl.dialogTemplateUrl = 'client-components/selectors/dynamic-modules/sf-dynamic-items-selector.sf-cshtml';

MVC

  • New DLL file Telerik.Sitefinity.Mvc
    Holds all the code from the Telerik.Sitefinity.Mvc namespace from Telerik.Sitefinity CMS dll.
    Preserves the original namespaces, so by adding a reference to the new Telerik.Sitefinity.Mvc DLL file, you do not experience any breaking changes.
  • Telerik.Sitefinity.UI.Mvc project is deleted and its code is moved to the a new DLL file
  • MvcProxyBase class
    • Controller property is removed. When adding the reference to the Telerik.Sitefinity.Mvc DLL file, you get the “GetController()” extension method from the Telerik.Sitefinity.Mvc namespace for the MvcProxyBase class. The extension method returns the same object that the old property returns. Use this extension method as a replacement for the old Controller property.
    • Context property is removed. The same property is introduced in the ControllerActionInvoker class from the Telerik.Sitefinity.Mvc DLL file, so you can use it as a replacement.
    • ControllerFactory property is removed. You can retrieve the ControllerFactory using the following code: 
      ObjectFactory.Resolve<ISitefinityControllerFactory>() or ControllerBuilder.Current.GetControllerFactory()
  • The existing MVC output cache substitution implementation, for example, the MvcSubstitutionControllerProxy and the ControllerSubstitution, is deleted as is no longer supported.
  • Bootstrapper.MVC.MapRoute is removed. Call the RouteTable.Routes.MapRoute (System.Web.Mvc)instead.

Notifications

  • DynamicSubscriptionsListId removed from IMessageJobRequest and MessageJobRequestProxy. The dynamic list ID is stored in SubscriptionsListId property.
  • New interface IBatchSender introduced for sending messages on batches.

Site synchronization

SiteSyncManager
DeleteLogEntry(SiteSyncServer siteSyncLogEntry) method renamed to DeleteSiteSyncServer(SiteSyncServer siteSyncServer)

Configuration adjustments in accordance to the newly supported types labels, search indexes, and configurations.

API changes in Sitefinity CMS 8.0

Taxonomies

  • The abstract class TaxonomyDataProvider now implements the IMultisiteEnabledProvider interface.
  • New property was introduced in the IWcfTaxon interface - RootTaxonomyId.
  • New skipSiteContext parameter was introduced in the SaveTaxon and SaveTaxonInXml endpoints of the IFlatTaxonService and IHierarchicalTaxonService services. This new property determines whether the taxonomy should be resolved in the current site context.
  • New deleteTaxaOnly parameter was introduced in the DeleteTaxonomy, DeleteTaxonomyInXml, BatchDeleteTaxonomy, and BatchDeleteTaxonomyInXml endpoints of the ITaxonomyService service. This new property determines whether the entire taxonomy should be deleted or only its items.
  • New properties RootTaxonomyId and RootTaxonomy were added to the ITaxonomy interface. These new properties introduce relation between a site specific taxonomy and the taxonomy originally shared between all sites.

Hierarchical content

IContentService - GetFoldersAsTree and GetFoldersAsTreeInXml methods are changed - added support for sorting, filtering, number of items to take and skip, and parameter that checks for the hierarchical content. These parameters allow you to improve performance when fetching items from the data providers and building list of FolderViewModel items.

Feather

  • The MVC designer will not be displayed for widgets that have a ControlDesigner attribute. This attribute states that there already is a custom designer implementation for this widget and now Feather will not interfere with it. If you delete the ControlDesigner attribute from an existing widget and recompile the project the widget will use the MVC designer and you can modify it as shown here.
  • Breaking changes in the News MVC widget - the NewsModel class is refactored. To use the ContentDetailsViewModel, you must manually update your custom News widget's views. You can use the stock views of the News MVC widget as a reference.
  • Breaking changes in the Content block MVC widget. If you have modified the client-components/fields/html-field/sf-html-field.html template in any of the resource packages, make sure the text area is bound to sfModel.

Personalization

In the interface ICriterionValidator, which is used for validation the personalization segment criteria (from Digital Experience Cloud), method Validate(string) was updated and a second string parameter was added – Validate(string, string).

Workflow

  • In workflow *.xamlx files were updated the condition for skipping workflow. If you have customized a workflow *.xamlx file, then we recommend updating your customized file(s). Find the following (actual reference IDs may differ):
    <p1:FlowDecision x:Name="__ReferenceID209" Condition="[Telerik.Sitefinity.Security.Claims.ClaimsManager.IsUnrestricted() And workflowDefinition.AllowAdministratorsToSkipWorkflow]" sap:VirtualizedContainerService.HintSize="70,87" True="{x:Reference __ReferenceID207}" False="{x:Reference __ReferenceID208}">
    and replace condition:
    Telerik.Sitefinity.Security.Claims.ClaimsManager.IsUnrestricted() And workflowDefinition.AllowAdministratorsToSkipWorkflow
    with the following:
    workflowExecutionDefinition.CanUserSkip()
  • Instead of WorkflowDefinition, workflow now uses IWorkflowExecution definition instance. 
    If you have customized a workflow *.xamlx file, then we recommend updating your customized files. Update the following:
    • Find the the following:
      <p1:Variable x:TypeArguments="tswm:WorkflowDefinition" Name="workflowDefinition" />
      And replace it with:
      <p1:Variable x:TypeArguments="tsw:IWorkflowExecutionDefinition" Name="workflowExecutionDefinition" />
    • Find the following (actual reference ID may differ):
      <p1:FlowSwitch x:TypeArguments="tswm:WorkflowType" x:Name="__ReferenceID208" Expression="[workflowDefinition.WorkflowType]" sap:VirtualizedContainerService.HintSize="70,87">
      and replace expression content:
      workflowDefinition.WorkflowType
      with the following:
      workflowExecutionDefinition.WorkflowType
  • Telerik.Sitefinity.Workflow.Model.WorkflowDefinition.Title is converted from Lstring to string.

API changes in Sitefinity CMS 7.3

Pages

The following methods:

GetProperties(CultureInfo language, bool fallbackToAnyLanguage)

GetProperties(bool fallbackToAnyLanguage)

are now moved from the Telerik.Sitefinity.Model assembly to the Telerik.Sitefinity assembly as extensions methods. These methods are used to return the properties for the given language. If null is specified, the current context language is used. If a fallback is specified, then the properties will be loaded from the first found language.

Public field requiredPropertyNames in ObjectData is now obsolete and is removed from usage.

Search

  • Manager, Provider - abstraction has been removed - from now on ISearchService should be used and an instance of it could be obtained from ServiceBus.ResolveService method.
  • SearchService is now replaced by LuceneSearchService (and there are 2 new services ElasticsearchService and AzureSearchService)
  • IField/Field value is now changed from string to object in order to support all scenarios.
  • IDocument - GetValue method returns object (instead of string).
  • Document class constructor has changed signature (as one of the parameters - mappings is useless).
  • Document is no longer ICustomTypeDescriptor
  • In Additional properties for search - HTML is no longer stripped
  • Azure with Lucene is no longer forbidden and does not throw an exception (because there might be a way to use shared folder)
  • Document namespace changed - Telerik.Sitefinity.Services.Search.Publishing to Telerik.Sitefinity.Services.Search.Model
  • SearchService - no field/document factory methods - use new Field/document instead
  •  In the SearchResults class, the GetMetaField public method is now returning object instead of string:
    public object GetMetaField(object, string)
  • The Search method in the ISearchService interface is now getting only one parameter - ISearchQuery:

    IResultSet Search(ISearchQuery query);

    To obtain instance of ISearchQuery, use:

    var queryBuilder = ObjectFactory.Resolve<IQueryBuilder>();
    var compiledQuery = queryBuilder.BuildQuery(searchTerm, searchFields);

    Then pass it to the search service, in the following way:

    searchService.Search(compiledQuery);
    This change affects all classes that implement the ISearchService interface as AzureSearchService. ElasticsearchService and LuceneSearchService.

  • Also the GetValue method and the Value property are now returning object instead of a string:
    public object Value
    public object GetValue(string)

Permissions

IManager interface has a new RestorePermissionsInheritance() method. The Implementation should call the provider implementation of this method. For example:

this.Provider.RestorePermissionInheritance(securedObject);

Events

  • IPropertyChangeDataEvent.ChangedPropertyNames changed to ChangedProperties of type IDictionary<string, string,>
  • Some of the IFormEntryEventControl properties are moved up the hierarchy into the newly introduced IFormEntryEventControlBase base interface, which is shared with the new IFormEntryValidationEventControl interfaces. This changes are source compatible, but as they are binary incompatible, a rebuild is required.
  • Some of the ILoginCompletedEvent properties are moved up the hierarchy into the newly introduced ILoginEventBase base interface, which is shared with the new ILogoutCompletedEvent interfaces. This changes are source compatible, but as they are binary incompatible, a rebuild is required.

Localization

Telerik.Sitefinity.Localization.Data.RequiredLocalizablePropertyAttribute class is removed. It was duplicated and the deleted one was not used anywhere.

Dynamic modules

  • In Telerik.Sitefinity.DynamicModules.DynamicModuleManager:
    • GetChildItemsHierarchy(DynamicContent item, Type childType = null) is changed to GetChildItemsHierarchy(DynamicContent item, IEnumerable childTypes = null). The method now accepts a list of child types instead of a single child type as parameter.
    • IQueryable GetChildItems(DynamicContent item, Type childType = null) method now returns query with child items of all statuses. Previously it returned child items with live status if the parent item is live and master otherwise.
  • Telerik.Sitefinity.Descriptors.RelatedDataPropertyDescriptor: IContentLinksManagerProxy GetManager() method is removed since it was not used anywhere. Use ContentLinksManager.GetManager() instead.
  • Telerik.Sitefinity.DynamicModules.Builder.Web.Services.IContentTypeService: In SaveContentType and SaveContentTypeInXml endpoints, parameter bool removeToolboxItem is removed.

Workflow

PagesApprovalWorkflow.xamlx, AnyContentApprovalWorkflow.xamlx and AnyMediaContentApprovalWorkflow.xamlx

changes - all execute code activities with deletion logic were changed to use the already built in Sitefinity CMS delete decision activity for one and two levels of approval workflows.

MVC

  • Changes in the serialization of controller's properties:
    With the current release the actual type of the properties of a Controller is retained during serialization. Prior to this change, the properties of a controller were always serialized as a string. This change is part of the effort for the alignment of the functionality available for WebForms and MVC, since the data is serialized with keeping the actual type of a property for web forms widgets and the same notation for MVC widgets is kept. This way, it is easier to port designers from one widget to another or reuse code with both approaches.
  • Ability to specify whether a MVC controller should be associated with certain <form> tag:
    New overloads of the Html.BeginFormSitefinity helper method introduce the ability to specify whether the controller should be associated with the generated form tag. The controller is associated with a tag by appending the controller Id to the query string of the form action URL. This functionality is useful in case there exist two different MVC widgets that have action methods with the same signature, the two MVC widgets are placed on the same page and you would like to invoke only the action of one of the widgets. Prior to the current change, the Html.BeginFormSitefinity helper method had always associated the controller with the generated tag. With the current release of Sitefinity CMS, the Html.BeginFormSitefinity helper method does not associate the controller with the tag by default anymore and instead, you should use the newly introduced overloads of the helper method.

API changes in Sitefinity CMS 7.0

Libraries

Upon upgrade to Sitefinity CMS 7.0, in the Libraries configuration screen, the default upload mode is now Html5. To switch mode between HTML5 and Silverlight media player, a new configuration option is introduced for configuring Libraries - the MediaPlayerMode. The default value of the option for new projects is Html5. For upgraded projects, the default value is Silverlight.

When you switch from MediaPlayerMode to Silverlight, the default configuration value for
AllowedExensionsSettings for videos is .wmv.

When you switch from MediaPlayerMode to Html5, the default configuration values for
AllowedExensionsSettings for videos is .MP4, .OGV, .WebM.

Third party libraries upgrades

  • Kendo Controls Upgraded to 2014.1.321
  • RadControls Upgraded to Q1 2014 SP1, version 2014.1.403
  • Open Access Upgraded to Q1 2014 SP1 version 2014.1.403
  • Service Stack Upgraded to
  • Azure SDK upgrade to 2.2

Content modules API

The protected internal method GetAllAncestors is now removed from the Telerik.Sitefinity.Modules.ContentServiceBase class because its implementations in the inheriting services are returning the descendants of the specified parent. It is replaced by a protected method named GetDescendants.

The public method GetAncestorItems is removed from the Telerik.Sitefinity.Modules.LibrariesManager class because it was returning the descendants of the selected parents. It is replaced by a public method named GetDescendants.

Publishing system

The GetPropertyValue extension methods from the Telerik.Sitefinity.Publishing namespace are moved to a new ObjectPropertyExtensions class. Since extension methods are rarely called using class name and the namespace is kept, this is not expected to affect much code, if any.

Related Media API

Media fields are now replaced with the Related Media and Related Data fields. For backward compatibility, the old Media fields and API are left unchanged and will continue to work in the exactly same way. Therefore, if you have Media fields in any content type they will be active and will continue to work, they will not be changed with Related media fields. The only difference after upgrade to Sitefinity CMS 7.0 is be that you cannot add a Media field from the UI anymore. In addition, a dynamic module with old Media fields can be imported and activated and will continue to work properly.

Old Media field

  • The GetValue and SetValue of the property descriptor (for the Media field) work with the content links and return content links.
  • Media fields use a middle table implemented for the many to many relation between the fields and the media contents.
  • Media fields are available in the dynamic modules.

New Related Media and Related Data fields

  • The Related Media and Related Data fields are implemented to work only with the content links table, they do not use a middle table.
  • There are three new properties added to the content links, stored in the database that marks if this particular content link is available for Temp, Master, and Live versions of the related item:
    • available_for_temp
    • available_for_live
    • available_for_master
  • The GetValue of the property descriptor now returns the actual items (not the content links). GetValue also applies a filter for the Live items requested from the frontend and in this case returns only the Live and Visible items.
  • The Related Media and Related Data fields are available for custom fields of static modules (for example, Events, Blogs, Blog posts, List items, News, Pages), of dynamic modules, and Products.

Implementation changes

Implementation changes affect media content:

  • Backend: Media fields like ImageField, AssetsField, MultiImageField, ProductDocumentsAndFilesField, and so on now work with SingleMediaContentItemDialog selector dialog instead of the EditorContentManagerDialog. The old dialog EditorContentManagerDialog is left unchanged for backward compatibility.
    If you have customized the media fields listed above and are using the old EditorContentManagerDialog dialog, you may need to refactor your customizations.
  • Frontend: Image, Video, and Document widgets have new designers and designer views that also use the SingleMediaContentItemDialog selector dialog. Old designers and designer views are left unchanged for backward compatibility.
    Therefore, if you have custom widgets that use the old designers you will not encounter any issues.
  • Content block now works with SingleMediaContentItemDialog selector dialog instead of the EditorContentManagerDialog.

Pages API

Changes in the Pages API can cause compilation errors and unexpected behavior. Samples are provided for what alternative code to use in place of the removed and obsolete methods and properties. The most widely-used scenario that could be affected is the multilingual split pages. That is, split pages are pages which have different layout and widgets. For example, the English version of one page has different widgets or layout compared to the French or Chinese. As a result, the page internal structure is improved. There is a more well-defined separation between page metadata (PageNode) and page presentation – (PageData). The metadata information which was previously located in PageData is now located in PageNode. There is only one node containing the metadata and the page data items (one item per language). This improvement removes the limitations of the page tree structure. Therefore, it is now possible to have split and synchronized pages in all levels of the page tree. Previously, only split pages could be created under a split page.

An upgrade script runs upon first start of Sitefinity CMS 7.0 that copies specific data and deletes other data to comply with the API change.

PageNode – PageData reference

PageData now has a NavigationNode property that holds the reference to the page metadata (located in the PageNode). Previously, the PageNode had a Page property (of type PageData that is now obsolete). The main impact of this change is on Multilingual Split pages. You now get the PagaData of the PageNode in a different way.

Following is a description what code you need to change.

There are several cases when working with PageNode and PageData items that should be changed. The most common cases are searching for a PageNode based on some filter. Depending on the filter type, you might need to change the query (see code samples below). In other cases, you need to read or write some page information from or to the PageNode or PageData.

For properties that are migrated from PageData to PageNode there are two options:

  • Properties used to read or write the value: the PageNode’s property value is returned internally and the PageNode’s value is set, respectively.
  • Properties are part of LINQ expressions: an exception is thrown as this property is not mapped to thedatabase column anymore.

Samples below describe the different groups of changes that you need to implement.

Sample 1: Search for a PageNode based on properties moved from PageData to PageNode.

Stefinity 6.3 and older:

var nodesByTitle = PageManager.GetManager().GetPageNodes().Where(p => p.Page.Title == "home");

Sitefinity CMS 7.0 - the redundant usage of Page (PageData) is removed:

var nodesByTitle = PageManager.GetManager().GetPageNodes().Where(p => p.Title == "home");

Sample 2: Search for PageNode based on PageData properties that are not moved.

Sitefinity CMS 6.3 and older:

var nodesModifiedInLastDay = PageManager.GetManager().GetPageNodes().Where(p => p.Page.LastModified > DateTime.UtcNow.AddDays(-1));

Sitefinity CMS 7.0 - start from PageData items:

var nodesModifiedInLastDay = PageManager.GetManager().GetPageDataList().Where(pd => pd.LastModified > DateTime.UtcNow.AddDays(-1)).Select(pd => pd.NavigationNode).Distinct();

Sample 3: Get PageData for a specific node.

Sitefinity CMS 6.3 and older:

var nodeId = Guid.Parse("A4F6BAD9-B65D-6BD7-821E-FF00005B5385");
var pageData = PageManager.GetManager().GetPageNode(nodeId).Page;

Sitefinity CMS 7.0 - use the GetPageData() method of the PageNode (with optional culture parameter that is used for split pages for a given culture):

var pageData = PageManager.GetManager().GetPageNode(nodeId).GetPageData();
Content - inheritance removed from PageData

As of Sitefinity CMS 7.0, the PageData object stops to inherit Content. However, some interfaces are still inherited from PageData directly. The list of these inherited interfaces is:

  • IVersionSerializable
  • IExtensibleDataObject
  • IOwnership
  • IDynamicFieldsContainer
  • IScheduleable
  • IContent

Properties of PageData

Properties of PageData related to the page metadata are moved to PageNode. The PageData properties are marked as obsolete and they internally fallback to PageNode. Such properties are:

  • Crawlable
  • RequireSsl
  • LocalizationStrategy
  • IsBackendPage
  • UrlName
  • IsSplitPage
  • IsBackend

Removed properties:

  • Properties that are related to the language information of linked nodes are removed: PageLanguageLink
  • With the content inheritance removed there are some properties that are now missing from PageData. Such properties are: AllowComments, AllowTrackBacks, ApproveComments, AvailableLanguages, Comments, CommentsConfigPath, ContentState, DefaultPageId, DraftCulture, EmailAuthor, Organizer, OriginalContentId, PostRights.

Workflow API

In previous versions, the content workflow API implied using a property ApprovalTrackingRecordMap on all workflow enabled items, which gave access to the workflow publishing history. This property is made obsolete in Sitefinity CMS 7.0 and is replaced with an extension method. An upgrade script runs upon first start of Sitefinity CMS 7.0 that drops several tables that are no longer needed.
The projects that will be most affected as a breaking change are any Custom modules with Open Access data persistence with enabled approval workflow - we are providing instructions how to upgrade those in the document referred above. For the stock Sitefinity CMS modules and the modules implemented with the Module builder we are performing automatic upgrade.

Following is a list with the workflow API changes:

  • A new DeletePageActivity workflow activity is introduced in the PagesApprovalWorkflow.xamlx file. The new activity replaces the code activity for deleting a page. If you have a custom page workflows, we recommend that you use the new activity for deleting a page since the DeletePageActivity activity also checks for content relating to a page before deleting the page.
  • The ApprovalWorkflowRecordMap class is no longer mapped to the database. The ApprovalWorkflowRecordMap property of all content items (including dynamic ones) is no longer used and is marked as Obsolete.  
  • The Parents property of the ApprovalWorkflowRecord class is no longer used and is marked as Obsolete
  • An extension method of the IWorkflowItem interface is provided in the Telerik.Sitefinity namespace to get the approval records associated with an item. For Lifecycle items, the approval tracking record is associated with the master item.  

Events API

The event items now introduce a new property TimeZoneId that helps to accurately calculate recurring events. Upon upgrading to Sitefinity CMS 7.0, all events will have their TimeZoneId property set to the default timezone set by the Sitefinity CMS configuration. The upgrade script corrects and prevents potential errors in related to previously created recurring events.

There are also changes related to the Calendar widget.

Recurring events

The Event object contains information about the timezone in which the event was created. There a few new properties in that object:

  • EventStartUtcOffset
  • EventEndUtcOffset
  • TimeZoneId

The EventStart and EventEnd properties are now in UTC.

Other changes:

  • IRecurrenceDescriptor, RecurrenceRule and all derived types from the Event object now support TimeZoneId.
  • The IRecurrenceDescriptor Occurences and IRecurrenceDescriptor Exceptions are now retrieved in UTC related to the time zone.
  • IRecurrenceDescriptor EventStart and IRecurrenceDescriptor EventEnd are now with Unspecified Kind datetime objects, so there is no conversion for them.

Be aware that some custom functionality that is related to the Events module needs to be rewritten. All custom widgets created with scaffold info data need to be modified to use the ToSitefinityUITime() method. Here is an example for the EventEnd scaffoldinfo:

[ScaffoldInfo("<sitefinity:TextField runat=\"server\" DisplayMode=\"Read\" Value='<%# ((DateTime)Eval(\"EventEnd\")).ToSitefinityUITime() %>' />")]

The RecurrenceExpression property of the Event now stores the EventStart and EventEnd dates with values related to the time zone.

Calendar widget

The Calendar widget has some changes related to the daylight saving time:

  • IRadSchedulerService.cs: the GetAppointments() and UpdateAppointment() methods used to return IEnumerable<AppointmentData>. As of Sitefinity CMS 7.0, these methods return SitefinitySchedulerOperationResult.
  • RadSchedulerService.cs: the GetAppointments() and UpdateAppointments() methods used to return IEnumerable<AppointmentData>. As of Sitefinity CMS 7.0, these methods return SitefinitySchedulerOperationResult.
  • The SitefinitySchedulerOperationResult is a new class that inherits from Telerik.Web.UI.SchedulerOperationResult<AppointmentData> and has three additional properties – StartDST, EndDST, and DaylightDelta.

Ecommerce module

The CartOrder widget now has a property UserId that holds the ID of the user that was logged in when the cart was created. Thus, in case users switch, they are not able reuse old shopping carts. As a result, the configuration property KeepShoppingCartPerUser has a default value true.

Custom static modules

When upgrading custom static modules, you must remove from the

FluentMapping

of the content item the mapping association between the content item and the

ApprovalTrackingRecordMap

object. Remove the following code line:

ItemMapping.HasAssociation<Telerik.Sitefinity.Workflow.Model.Tracking.ApprovalTrackingRecordMap>(p => p.ApprovalTrackingRecordMap);

NOTE: If you do not delete the code above, all approval records are lost and information such as the Note text when rejecting a content item will not be available anymore.

The purpose of this step is to redirect the old approval records to point to the master version of the content item. If there are any OpenAccessProviders present, they must implement the IOpenAccessUpgradableProvider interface. When implementing an upgrade for the OpenAccess provider, take into account the following:

  • The table name of the content item, for example custom_products.
  • The ID of the foreign key.
    Usually, if you do not have any other relations to other persistent types, the ID is id or id2, for example.

Following is a sample implementation for the Products Sample module:

[ContentProviderDecorator(typeof(OpenAccessContentDecorator))]
public class OpenAccessProvider : ProductsDataProvider, IOpenAccessDataProvider, IOpenAccessUpgradableProvider
{
    public virtual int CurrentSchemaVersionNumber
    {
        get
        {
            return this.GetAssemblyBuildNumber();
        }
    }
 
    public virtual void OnUpgrading(UpgradingContext context, int upgradingFromSchemaVersionNumber)
    {
        if (upgradingFromSchemaVersionNumber < 5100) //5100 is the version number for sitefinity 7.0
        {
            var message = "{0} : Upgrade to {1}. Update approval records.".Arrange(this.GetType().Name, "5100");
            try
            {
                UpdateRecords(context, tableName, primaryKeyColumn);
                DropColumn(context, "custom_products", "id”);
                Log.Write(string.Format("PASSED : {0}", message), ConfigurationPolicy.UpgradeTrace);
            }
            catch (Exception ex)
            {
                Log.Write(string.Format("FAILED: {0} - {1}", message, ex.Message), ConfigurationPolicy.UpgradeTrace);
                if (Exceptions.HandleException(ex, ExceptionPolicyName.IgnoreExceptions))
                    throw;
            }
        }
    }
 
    private static void UpdateRecords(OpenAccessContext context, string tableName, string primaryKeyColumn)
    {
        var sql = @"update sf_approval_tracking_record
        set sf_approval_tracking_record.workflow_item_id = {0}.content_id
        from {0}
        join sf_pprvl_trckng_rcrd_mp_sf_ppr
        on {0}.{1} = sf_pprvl_trckng_rcrd_mp_sf_ppr.id
        join sf_approval_tracking_record
        on sf_pprvl_trckng_rcrd_mp_sf_ppr.id2 = sf_approval_tracking_record.id
        where {0}.status = 0".Arrange(tableName, primaryKeyColumn);
 
        context.ExecuteNonQuery(sql);
    }
 
    private static void DropColumn(OpenAccessContext context, string tableName, string columnName)
    {
        var sql = "DropColumn ALTER TABLE {0} DROP COLUMN {1}".Arrange(tableName, columnName);
        context.ExecuteNonQuery(sql);
    }
 
    public virtual void OnUpgraded(UpgradingContext context, int upgradedFromSchemaVersionNumber)
    {
         
    }

Content modules API

Telerik.Sitefinity.Modules.ContentServiceBase class

In older Sitefinity CMS versions, the GetAllAncestors method was a protected method in the ContentServiceBase class. The change affects only inheritors of the latter class in case they used to call or override the GetAllAncestors method.

Old code that no longer compiles:

public class CustomAlbumService : ContentServiceBase<Album, AlbumViewModel, LibrariesManager>
{
    ...
 
    public IQueryable<Album> GetDescendants(Guid parentGuid, string providerName)
    {
        return this.GetAllAncestors(parentGuid, providerName);
    }
 
    ...
}

Code introducing the new method:

public class CustomAlbumService : ContentServiceBase<Album, AlbumViewModel, LibrariesManager>
{
    ...
 
    public IQueryable<Album> GetDescendants(Guid parentGuid, string providerName)
    {
        return this.GetDescendants(parentGuid, providerName);
    }
 
    ...
}

Telerik.Sitefinity.Modules.LibrariesManager class

In older Sitefinity CMS versions, the GetAncestorItems method was a public method in LibrariesManager class. Only code that queries media items may be affected by the change.

Old code that no longer complies:

var manager = LibrariesManager.GetManager();
var library = manager.GetLibraries().First();
var descendants = manager.GetAncestorItems(library);

Code introducing the new method:

var manager = LibrariesManager.GetManager();
var library = manager.GetLibraries().First();
var descendants = manager.GetDescendants(library);

API changes in Sitefinity CMS 6.3

SiteMapBase

The following protected methods were removed:

  • protected virtual PageSiteNode FindAdditionalUrl(string[] urls, string rawUrl, out string[] parameters, out bool paramsMismatch)
  • protected internal PageSiteNode FindAdditionalUrl(string[] urls, string rawUrl, bool ignoreCulture, out string[] parameters, out bool paramsMismatch)

The new methods to be used instead are:

  • protected virtual PageSiteNode FindNodeByAdditionalUrl(string rawUrl, string[] urlSegments, out ISiteMapAdditionalUrl additionalUrlInfo)
  • protected virtual string[] GetAdditionalUrlParameters(PageSiteNode node, ISiteMapAdditionalUrl additionalUrlInfo, string rawUrl, out bool paramsMismatch) protected IList<AdditionalUrlProxy> GetAdditionalUrlsByRoot(string urlRoot)

Comments

  • All base interfaces related custom events in Sitefinity CMS are moved into a newly created assembly named Telerik.Sitefinity.Services.Events. As a result you can declare custom events without the need of referencing Telerik.Sitefinity CMS assembly. Note that you must add a reference to Telerik.Sitefinity.Services.Events.dll in each project that consumes/produces events otherwise you will get a compile-time error.
  • Use spam protection image setting in comments module configuration is now moved from Default settings and Commentable types into root level. The reason for this change is to easily enable/disable captcha protection on your web site instead of doing this per content type.
  • UpdateComment and UpdateThread methods of the CommentServise are modified to return the updated comment.

Ecommerce

  • Ecommerce Thumbnails
    To make use of the thumbnails, it is strongly recommended to update your css and Ecommerce widget templates if you use custom ones. Before version 6.3 system thumbnail was used on all ecommerce widgets. Now this thumbnail is used only if no thumbnail size, or if the thumbnails for the selected size are not generated. There are new css classes added for each default thumbnail profile as a fallback for css resize if one of the images doesn't have generated thumbnail.
  • DoNotSyncInventoryAfterInitialSync
    Before version 6.3 on site sync all content for a product was been synced from source to target server. In version 6.3 we added an advanced property defined in Catalog Config section called DoNotSyncInventoryAfterInitialSync which is TRUE by default which means that we will not override inventory for products that have been already synced at least ones. If you want to work as before and sync everything always (the inventory as well) you need to set this property to FALSE.

API changes in Sitefinity CMS 6.2 Ecommerce

Sitefinity CMS 6.2 Ecommerce has many enhancements and changes:

Taxes

Before version 6.2 the tax rate was verified against a regular expression which was allowing only 2 numbers after the floating point. However it turns out in some US states we have taxes like x.635. Because of that the regular expression now supports 3 digits after the floating point.

ShoppingCartAdder

ShoppingCartAdded class is responsible for adding a product to the user shopping cart. Before the class had a parameter of type ICartOrderManager. Since Sitefinity CMS 6.2 this type has been changed to IOrderManager. The IOrderManager extends the ICartOrderManager making the method more restrictive than before. The reason for that change is because we now support Offsite payments. Offsite payments may stay in state "Pending" for hours before the notification from the payment gateway is send and we want to make sure there is no pending orders.

API changes in Sitefinity CMS 6.1 Ecommerce

Here's a list of breaking changes for Sitefinity CMS 6.1:

Product types

Product Types in the Ecommerce module are now shared across all the sites of your Multi site installation of Sitefinity CMS. This means that you can just define product types once and use it on any of your sites unlike 6.0 where Product Types have to be defined for each site. Product Types are separated from rest of the catalog and moved to their own shared provider, hence the breaking change in 6.1.

Accessing Products Types before:

CatalogManager catalogManager = CatalogManager.GetManager();
 
            //Get All Product types
            var productTypes = catalogManager.GetProductTypes();
 
            //Get single product type
            var productType = catalogManager.GetProductType(Guid.NewGuid()); //pass the right id
 
            //Create product type, below steps + any meta data persistence
            var newProductType = catalogManager.CreateProductType();
 
            //delete product type
            catalogManager.DeleteProductType(productType);

Accessing Product Types since 6.1:

EcommerceManager ecommerceManager = EcommerceManager.GetManager();
 
            //Get All Product types
            var productTypes = ecommerceManager.GetProductTypes();
 
            //Get single product type
            var productType = ecommerceManager.GetProductType(Guid.NewGuid()); //pass the right id
 
            //Create product type, below steps + any meta data persistence
            var newProductType = ecommerceManager.CreateProductType();
 
            //delete product type
            ecommerceManager.DeleteProductType(productType);

You have to use the EcommerceManager and use  Telerik.Sitefinity.Modules.Ecommerce.Common namespace since Sitefinity 6.1.

There are also API Changes related to the product variations. For more information, see Sitefinity CMS 6.1 Ecommerce API changes

There are also issues that might occur in your Ecommerce module after upgrading to Sitefinity CMS 6.1. For more information, see Ecommerce Upgrade Instructions to Sitefinity CMS 6.1

Sitefinity CMS 6.1 Ecommerce API changes

Telerik.Sitefinity.Modules.Ecommerce.Orders.Web.UI.ShoppingCart.cs

Two obsolete properties are removed since they create issues when pages are duplicated. The IDs which link between pages are correctly copied however the specific JSON Data object still contains old data that you don’t need.

[Obsolete("Use CheckoutPageId instead")]
public string CheckoutData { get; set; }
[Obsolete("Use ContinueShoppingPageId instead")]
public string ContinueShoppingData { get; set; }

Telerik.Sitefinity.Modules.Ecommerce.Catalog.Web.UI.Args.ProductVariationChangedEventArgs.cs

The SelectedProductVariationDetails property is marked as obsolete and the setter is removed. Use the SelectedProductVariation property instead.

public List<ProductVariationDetail> SelectedProductVariationDetails {get;set;}

Telerik.Sitefinity.Ecommerce.Catalog.Model.OptionsDetails.cs

The ProductVariationDetails property is marked as obsolete and the setter is removed. Please use OptionsDetails.ProductVariation and OptionsDetails.ProductAttributeValues instead.

public List<ProductVariationDetail> ProductVariationDetails  {get; set;}

Single Product Details Template

A new control for “additional charge” is added and the additional charge for a variation is no longer shown in the dropdown. Because of that each client should upgrade his custom templates to contain the following in the template:

<sf:ProductAdditionalChargeControl id="productAdditionalChargeControl" ProductItem='<%# Page.GetDataItem() %>' runat="server" />

Telerik.Sitefinity.Modules.Ecommerce.Catalog.Model.ProductVariation.cs

The property Variant before was holding a JSON serialized AttributeValuePair object and now it holds a list of AttributeValuePair objects so any custom code that is using this Variant field should be updated.

[DataMember]
public string Variant {get;set;}

Images on Product Variations

Since Sitefinity CMS 6.2 product variations can have dedicated images. The images back-end functionality works and looks exactly like the images feature for products. On the front-end the variation images are shown on the product detail page after selection of attributes where the possible variations list may contains variations with custom images. The variation images are shown on the product detail page in front of the default product images.

Example :

Before selecting an attribute/variation:



After selecting attribute/variation:



Product Detail Page changes

Related to variations change the product detail page Add to Cart functionality was slightly changed as follows:

  1. Products without variations
    • The add to cart is enabled when you can buy the product
    • The add to cart is disabled when the product is out of stock
    • You can still make the button “hidden” instead of “disabled” by setting the advanced property on the product list widget called “HideAddToCartWhenOutOfStock” to true.
  2. Product with variations
    • Add to cart is enabled initially or when you can buy the product. If you hit the button without a variation is selected an error message saying “Please select from available product options
    • Add to cart button is disabled when the selected variation is out of stock
    • Additional price is shown next to the availability ones a variation is selected instead of being shown in the drop-down.
    • You can still make the button “hidden” instead of “disabled” by setting the advanced property on the product list widget called “HideAddToCartWhenOutOfStock” to true.

API changes in Sitefinity CMS 6.0 Ecommerce

Sitefinity CMS 6.0 Ecommerce has many enhancements and changes. In this article you can find many scenarios that might occur and how to resolve them the issues that might occur. Here is a listing of new Ecommerce features for Sitefinity CMS 6.0 (see published release notes for more):

  • Multisite Implementation - ability to define multiple sites for Ecommerce using three Ecommerce providers (Catalog, Shipping & Orders) and settings for each site.
  • Product Lifecycle & Workflow - products now have lifecycle (ability to exist in multiple states) and workflow support (ability to have workflows per product type)
  • Site Synchronization Implementation - ability to Sync Products and Variations (including attributes and values).
  • Shipping Provider Model - ability to have true pluggable online shipping providers. Existing providers have been moved to the new pluggable model.
  • Additional Multilingual Support - added support for a true multilingual store, by adding multilingual support for Shipping methods, Payment methods, Discounts, Product Types, Custom fields for product types, Discounts, Taxes and Tax classes.
  • Order Status History & Shipping Tracking Number - ability to have an order status log and enter shipping tracking number for an order.
  • Additional Enhancements - a new Top Selling Products report has been added. Also a number of user experience scenarios with backend screens have been addressed.
  • New Business Service Layer - two new business services have been added for developers to make modifications to the payment and shipping methods, this will be part of continuous ongoing effort where we will expose more services in coming releases.

CountryElement breaking changes

If you were using the Ecommerce country element - a configuration node which holds country specific information, you will have to use the Locations node instead. If you have not changed the default countries that were installed by the Ecommerce module, you do not have to do anything. Otherwise, follow the steps below:

  1. Open the EcommerceConfig.config file.
  2. Locate the node that starts with <countries>.
  3. Cut the entire node.
  4. Create a new file called LocationsConfig.config.
  5. Paste the countries as shown in the example below.

Here is the code example:

<?xml version="1.0" encoding="utf-8"?>
<locationsConfig xmlns:config="urn:telerik:sitefinity:configuration" xmlns:type="urn:telerik:sitefinity:configuration:type" config:version="6.0.4854.16513">
  <countries>
    <add isoCode="BG">
      <states>
        <add name="xxxxx" stateIsActive="True" latitude="0" longitude="0" abbreviation="xxxxx" />
      </states>
    </add>
  </countries>
</locationsConfig>

SendOrderPlacedEmailToShippingAddress breaking changes

The SendOrderPlacedEmailToShippingAddress field has been removed from the EcommerceConfig file to the Checkout widget. If you were using it, you have to set the property of the widget. To do it, click on the Edit button of the widget and select Advanced. Find the field for the SendOrderPlacedEmailToShippingAddress property and set it to the desired value.

In the Administration » Advanced Settings » Shipping node, the nodes ShippingCarrierProviders and ShippingServiceSettings are obsolete. The ShippingCarrierProviders node previously contained the configuration for shipping carriers such as FedEx, UPS, and USPS. The ShippingServiceSettings node previously contained the configuration for shipping services such as First Overnight, Priority Overnight, etc.

Shipping carriers and their services are now configured under Ecommerce » Shipping methods. For sites created before 6.0, the active shipping carrier and shipping service configuration data is moved to the Shipping Methods area. For example, if you had configured FedEx in the ShippingCarrierProviders node and it was marked as active, a new FedEx shipping method is created during the upgrade process. For possible issues arising during the upgrade process, please read the Troubleshooting article for Sitefinity CMS 6.0 Ecommerce.

EcommerceBasicSettingsView class changes

Because of the multi-site support and the fact that the settings now can be global and per site the fallowing changes have been made into the EcommerceBasicSettingsView abstract class:

  • New abstract method EnableSettingsInputs(bool settingsEnabled) is added.
    This method is used for the enabling/disabling of different inputs based on the “inherit” view state.
  • Two required components added.
    Each EcommerceBasicSettingsView implementation must have the following required components:
    • Component with ID equal to “Message”.
      The component is used for displaying messages.
    • Component with ID equal to “btnSave”.
      This component represents the save button.
    In case of different IDs, you can also override the SaveButton and the Message properties, and use the desired IDs.

API changes in Sitefinity CMS 5.4

This article contains changes in backward compatibility in the Sitefinity CMS 5.4 release. Here you can find the following:

  • Changes in the Ecommerce module

Read the whole article for detailed information about each of the changes.

Changes in the Ecommerce module

Orders API changes

The following changes were introduced:

  • The AddItemToShoppingCart method of the Telerik.Sitefinity.Modules.Ecommerce.Orders.Business.IShoppingCartAdder interface requires an additional argument of type nullable Guid. The argument represents the ID of the wish list of the user. If you are not using the Wish lists feature, set the argument to null.
  • The OrderCalculator class is now obsolete. The class will be removed in Sitefinity CMS 6.1. To override the calculations for the orders you have to use the IOrderCalculator interface. For more information, read Tutorial: Create a custom order calculator.
  • The OrderStatistic class has been added. It allows you to keep track of the statistics of the orders. If you are doing your own custom development (e.g. a custom checkout), you have to use the OrderStatisticUpdater class to calculate statistics of an order.

Exchange rates API changes

The ExchangeRateServiceCalculator class is no longer static and has its name corrected.

API changes in Sitefinity CMS 5.3

This article contains changes in backward compatibility in the Sitefinity CMS 5.3 release. Here you can find the following:

  • Changes in the Ecommerce module

Read the whole article for detailed information about each of the changes.

Changes in the Ecommerce module

Inventory changes

New inventory features are added to the product. A couple of methods that were previously marked as obsolete in Sitefinity CMS 5.1 have been removed. The methods are the following:

  • In OpenAccessOrdersDataProvider:
    • public override void SetDetailInventoryAmount(CartDetail cartDetail)
    • public override void SetDetailInventoryAmount(CartDetail cartDetail, Product product)
  • In OrdersDataProvderBase:
    • public abstract void SetDetailInventoryAmount(CartDetail cartDetail)
    • public abstract void SetDetailInventoryAmount(CartDetail cartDetail, Product product)

Discounts changes

A new feature has been added to the discounts. It allows you to track the usage of discounts. In the upgrade process all existing discounts will be converted to be used as unlimited. If you have any discounts that were not upgraded, you can use the following code snippet to upgrade them:

var discounts = ordersManager.GetDiscounts().Where(d => d.IsActive);
 
foreach (var discount in discounts)
{
    if (discount.Usage == 0 && discount.DiscountUsed == 0)
    {
        discount.Usage = -1; //Set usage to maximum
    }
}
 
ordersManager.SaveChanges();

For more information about discounts, read the For developers: Discounts.

Orders API changes

The following methods have been removed from the OrderCheckout class:

  • DeterminePaymentProcessor
    The method you must use instead is OrderProcessor.DeterminePaymentProcessor.
  • CapturePaymentResponse
    The method you must use instead is OrderProcessor.CapturePaymentResponse.

API changes in Sitefinity CMS 5.2

This article contains changes in backward compatibility in the Sitefinity CMS 5.2 release. Here you can find the following:

  • Changes in the Ecommerce module

Read the whole article for detailed information about each of the changes.

Changes in the Ecommerce module

New multicurrency fields

With the newly introduced Multi-Currency feature all money related fields now have a corresponding ExchangeRate* fields. These should be used in all front end widgets (be it stock or custom).

Fields that have changed in the process are:

Orders table

New Old
ExchangeRateDiscountTotal DiscountTotal
ExchangeRatePreTaxTotal PreTaxTotal
ExchangeRateShippingTotal ShippingTotal
ExchangeRateSubTotalDisplay SubTotalDisplay
ExchangeRateSubTotal SubTotal
ExchangeRateTax Tax
ExchangeRateTotal Total
DefaultCurrency Currency
DefaultCurrencyInfo CurrencyInfo

OrderDetails table

New Old
ExchangeRateBasePrice BasePrice
ExchangeRatePrice Price
ExchangeRateBasePriceIncludingTax  

OrderDiscounts table

New Old
ExchangeRateSavingAmount SavingsAmount

The ExchangeRate* fields are the values in the currency selected by the user. If multi-currency is not enabled on the site, then the ExchangeRate* fields are the values in the merchant’s currency. The “Old” properties are still being used. Their values are in the merchant’s default currency just as they were in the versions previous to 5.2.

New product fields

A new field in the product model has been introduced. It is called ClrType. Because this field will be used on the frontend for better performing queries, it is a mandatory field. To learn how to get the ClrType value for a product, see the following code snippet:

public void SetProductTypeClrType(Product contextProduct)
{
    Type contextProductsType = contextProduct.GetType();
    contextProduct.ClrType = contextProductsType.ToString();
}

API changes in Sitefinity CMS 5.1

This article contains all changes in backward compatibility in the Sitefinity CMS 5.1 release. The introduced changes are the following:

  • Several modules were decoupled into separate assemblies.
  • Properties of several modules were replaced with extension methods.
  • Changes in the Ecommerce module

Read the whole article for detailed information about each of the changes.

Decoupled modules

In Sitefinity CMS 5.1, some of the modules were decoupled, i.e. moved from Telerik.Sitefinity.dll to a separate assembly. News, Blogs, Lists and Events are moved to Telerik.Sitefinity.ContentModules.dll and Ecommerce is moved to Teletik.Sitefinity.Ecommerce.dll. All types are the same and the upgrades to the database and configuration are done automatically.

If you use custom controls or projects, that are using the API of the decoupled modules, you have to recompile them after applying the following changes:

  • Add a reference to the Telerik.Sitefinity.ContentModules.dll and/or Teletik.Sitefinity.Ecommerce.dll.
  • If you are using the Fluent API for News, Lists, Events or Blogs, add a Telerik.Sitefinity using, because the fluent methods for those modules are moved as extensions in the new assembly.

For example, this code won’t be working anymore, if there is no Telerik.Sitefinity using clause:

namespace MyCode
{
    public class MyClass
    {
        public void MyMethod()
        {
            var items = Telerik.Sitefinity.App.WorkWith().NewsItems().Where(i => i.Author == "Me");
        }
    }
}

 You must add a Telerik.Sitefinity CMS using:

using Telerik.Sitefinity;
 
namespace MyCode
{
    public class MyClass
    {
        public void MyMethod()
        {
            var items = App.WorkWith().NewsItems().Where(i => i.Author == "Me");
        }
    }
}

In case of using the fluent API in .ascx/.aspx files, the Telerik.Sitefinity namespace must be imported:

<%@ Control Language="C#" %>
<%@ Import Namespace="System.Linq" %>
<%@ Import Namespace="Telerik.Sitefinity.Model" %>
<%@ Import Namespace="Telerik.Sitefinity" %>
  
<script runat="server" type="text/C#">
        private void MyMethod()
        {
            var items = Telerik.Sitefinity.App.WorkWith().NewsItems().Where(i => i.Author == "Me");
        }
</script>

Properties replaced with extension methods

The Sitefinity CMS team have done code optimizations in order to decrease the consumed memory and in the same time to increase the overall performance of the product. This lead to the introducing of several breaking changes in the Sitefinity CMS API. In general several properties (in-memory collections) of given classes were replaced with extension methods that return the same data via IQueryable collections. The main advantage of using the IQueryable collections when working with remote data source, is that you could perform an Out-of-Process data manipulation (filtering, paging, etc.), i.e. without the need of loading large sets of data into the memory.

Here is a list of the removed properties:

  1. The Pages property of the PagesTemplate class.
    In case you want to get all pages based on given template, you must use the newly introduced Pages extension method of the PageTemplate class. For more information, see For developers: Query pages.

    Here is a code example:

    public static IQueryable<PageData> GetPagesByTemplate(Guid templateId)
    {
        PageManager pageManager = PageManager.GetManager();
     
        PageTemplate template = pageManager.GetTemplate(templateId);
     
        return template.Pages().Where(p => p.Status == ContentLifecycleStatus.Live);
    }
  2. The Images property of the Album class.

    In case you want to get all images in given album, you must use the newly introduced Images extension method of the Album class. For more information, see For developers: Query images.

    Here is a code example:

    public static IQueryable<Image> GetImagesByAlbum(Guid albumId)
    {
        LibrariesManager librariesManager = LibrariesManager.GetManager();
     
        Album album = librariesManager.GetAlbum(albumId);
     
        return album.Images().Where(i => i.Status == ContentLifecycleStatus.Live);
    }
  3. The Videos property of the VideoLibrary class.
    In case you want to get all videos in given video library, you must use the newly introduced Videos extension method of the VideoLibrary class. For more information, see For developers: Query videos.

    Here is a code example:

    public static IQueryable<Video> GetVideosByVideoLibraryNativeAPI(Guid videoLibraryId)
    {
        LibrariesManager librariesManager = LibrariesManager.GetManager();
     
        VideoLibrary videoLibrary = librariesManager.GetVideoLibrary(videoLibraryId);
     
        return videoLibrary.Videos().Where(v => v.Status == ContentLifecycleStatus.Live);
    }
  4. The Documents property of the DocumentLibrary class.

    In case you want to get all documents in given document library, you must use the newly introduced Documents extension method of the DocumentLibrary class. For more information, see For developers: Query documents.

    Here is a code example:

    public static IQueryable<Document> GetDocumentsByDocumentLibraryNativeAPI(Guid documentLibraryId)
    {
        LibrariesManager librariesManager = LibrariesManager.GetManager();
     
        DocumentLibrary documentLibrary = librariesManager.GetDocumentLibrary(documentLibraryId);
     
        return documentLibrary.Documents().Where(d => d.Status == ContentLifecycleStatus.Live);
    }

Changes in the Ecommerce module

The following changes and additions have been introduced in the Ecommerce module:

  1. A dependency between Customer class and CustomerProfile class was removed and replaced by the CustomerAddress class. During the upgrade process the customer profile information for each customer is copied to the CustomerAddress table. In the old code (before the CustomerAddress model was created), the CustomerProfile stored only the most recent values of the customer’s billing and shipping addresses.
  2. CustomerMoney and CustomerStatistic classes have been created to keep track of Customer related statistics, e.g. how much money has been spent by the customer, the last order number and date, etc. If using a custom checkout, you have to use the CustomerStatisticUpdater class to update the statistics of a customer. This class updates both the customer statistics and the customer money.
  3. During the upgrade process the customer first name, last name, and email are set equal to their corresponding values in the user profile for the customer. More specifically, the CustomerFirstName property of the Customer instance is set equal to the FirstName property of the UserProfile instance, the CustomerLastName property of the Customer instance is set equal to the LastName property of the UserProfile instance, and the CustomerEmail property of the Customer instance is set equal to the Email property of the UserProfile instance.

API changes in Sitefinity CMS 4.2 SP1

This article contains all changes in backward compatibility in the Sitefinity CMS 4.2 SP1 release

Compatibility changes between 4.2 and 4.2 SP1

Changed method signatures:

Item Previous Current
public method Telerik.Sitefinity.Web.UrlEvaluation.UrlEvaluator.GetPageNumber public static int GetPageNumber(System.Web.UI.Control, Telerik.Sitefinity.Pages.Model.UrlEvaluationMode, string) public static int GetPageNumber(System.Web.UI.Control, Telerik.Sitefinity.Pages.Model.UrlEvaluationMode, string, int, string)

Removed methods, classes and properties:

Item
public method Telerik.Sitefinity.Abstractions.VirtualPath.CompositeCacheDependency.ExpirePage
public method Telerik.Sitefinity.Configuration.ConfigPropertyCollection.Add
public method Telerik.Sitefinity.Configuration.ConfigPropertyCollection.Clear
public method Telerik.Sitefinity.Configuration.ConfigPropertyCollection.Contains
public method Telerik.Sitefinity.Configuration.ConfigPropertyCollection.CopyTo
public property Telerik.Sitefinity.Configuration.ConfigPropertyCollection.Count
public method Telerik.Sitefinity.Configuration.ConfigPropertyCollection.GetEnumerator
public property Telerik.Sitefinity.Configuration.ConfigPropertyCollection.IsSynchronized
public property Telerik.Sitefinity.Configuration.ConfigPropertyCollection.Item
public method Telerik.Sitefinity.Configuration.ConfigPropertyCollection.Remove
public property Telerik.Sitefinity.Configuration.ConfigPropertyCollection.SyncRoot
public method Telerik.Sitefinity.Localization.Resource.PrefixConcat
public property Telerik.Sitefinity.Localization.ResourceProperty.BuiltIn
public property Telerik.Sitefinity.ModuleEditor.Web.Services.Model.CustomFieldsContext.MetadataManager
public method Telerik.Sitefinity.Modules.ModuleIdAttribute.GetValue
public class Telerik.Sitefinity.Modules.Ecommerce.Orders.Web.UI.CheckoutViews.CreditCardInfo
public method Telerik.Sitefinity.Modules.Migration.OperationContext..ctor
public property Telerik.Sitefinity.Web.Configuration.ConfigDescriptions.ModuleNameDescription
public property Telerik.Sitefinity.Web.Configuration.ConfigDescriptions.ModuleNameTitle
public property Telerik.Sitefinity.Web.UI.LinkManagerDialog.UiCulture

API changes in Sitefinity CMS 4.2

This article contains all changes in backward compatibility in the Sitefinity CMS 4.2 release

Compatibility changes between 4.1 SP3 and 4.2

Item Previous Current
public method Telerik.Sitefinity.Configuration.ConfigCacheDependencyHandler.Notify public override System.Collections.Generic.List<Telerik.Sitefinity.Data.CacheDependencyNotifiedObject> Notify(System.Type, string) public override System.Collections.Generic.IList<Telerik.Sitefinity.Data.CacheDependencyKey> Notify(System.Type, string)
public method System.Web.UI.ControlExtensions.GetQueryStringParameters public static System.Collections.Generic.IDictionary<string, string> GetQueryStringParameters(System.Web.UI.Control) public static System.Collections.Specialized.NameValueCollection GetQueryStringParameters(System.Web.UI.Control)
public method Telerik.Sitefinity.Data.CacheDependency.Notify public static void Notify(System.Collections.Generic.List<Telerik.Sitefinity.Data.CacheDependencyNotifiedObject>) public static void Notify(System.Collections.Generic.IList<Telerik.Sitefinity.Data.CacheDependencyKey>)
public method Telerik.Sitefinity.Data.CacheDependency.NotifyAllInternal public static System.Collections.Generic.IEnumerable<Telerik.Sitefinity.Data.CacheDependencyNotifiedObject> NotifyAllInternal(System.Collections.Generic.IEnumerable<Telerik.Sitefinity.Data.ICacheDependencyHandler>) public static System.Collections.Generic.IList<Telerik.Sitefinity.Data.CacheDependencyKey> NotifyAllInternal(System.Collections.Generic.IEnumerable<Telerik.Sitefinity.Data.ICacheDependencyHandler>)
public method Telerik.Sitefinity.Data.CacheDependency.NotifyInternal public static System.Collections.Generic.IEnumerable<Telerik.Sitefinity.Data.CacheDependencyNotifiedObject> NotifyInternal(System.Collections.Generic.IEnumerable<Telerik.Sitefinity.Data.ICacheDependencyHandler>, System.Collections.Generic.List<Telerik.Sitefinity.Data.CacheDependencyNotifiedObject>) public static System.Collections.Generic.IList<Telerik.Sitefinity.Data.CacheDependencyKey> NotifyInternal(System.Collections.Generic.IEnumerable<Telerik.Sitefinity.Data.ICacheDependencyHandler>, System.Collections.Generic.IList<Telerik.Sitefinity.Data.CacheDependencyKey>)
public method Telerik.Sitefinity.Data.CacheDependency.NotifyInternal public static System.Collections.Generic.IEnumerable<Telerik.Sitefinity.Data.CacheDependencyNotifiedObject> NotifyInternal(System.Collections.Generic.IEnumerable<Telerik.Sitefinity.Data.ICacheDependencyHandler>, System.Object[]) public static System.Collections.Generic.IList<Telerik.Sitefinity.Data.CacheDependencyKey> NotifyInternal(System.Collections.Generic.IEnumerable<Telerik.Sitefinity.Data.ICacheDependencyHandler>, System.Object[])
public method Telerik.Sitefinity.Data.CacheDependency.NotifyWithoutSendingSystemMessage public static void NotifyWithoutSendingSystemMessage(System.Collections.Generic.List<Telerik.Sitefinity.Data.CacheDependencyNotifiedObject>) public static void NotifyWithoutSendingSystemMessage(System.Collections.Generic.IList<Telerik.Sitefinity.Data.CacheDependencyKey>)
public method Telerik.Sitefinity.Data.CacheDependencyHandler.Notify public virtual System.Collections.Generic.List<Telerik.Sitefinity.Data.CacheDependencyNotifiedObject> Notify(object) public virtual System.Collections.Generic.IList<Telerik.Sitefinity.Data.CacheDependencyKey> Notify(object)
public method Telerik.Sitefinity.Data.CacheDependencyHandler.Notify public virtual System.Collections.Generic.List<Telerik.Sitefinity.Data.CacheDependencyNotifiedObject> Notify(string) public virtual System.Collections.Generic.IList<Telerik.Sitefinity.Data.CacheDependencyKey> Notify(Telerik.Sitefinity.Data.CacheDependencyKey)
public method Telerik.Sitefinity.Data.CacheDependencyHandler.Notify public virtual System.Collections.Generic.List<Telerik.Sitefinity.Data.CacheDependencyNotifiedObject> Notify(System.Type, string) public virtual System.Collections.Generic.IList<Telerik.Sitefinity.Data.CacheDependencyKey> Notify(System.Type, string)
public method Telerik.Sitefinity.Data.CacheDependencyHandler.Notify public virtual System.Collections.Generic.List<Telerik.Sitefinity.Data.CacheDependencyNotifiedObject> Notify(System.Type) public virtual System.Collections.Generic.IList<Telerik.Sitefinity.Data.CacheDependencyKey> Notify(System.Type)
public method Telerik.Sitefinity.Data.CacheDependencyHandler.NotifyAll public virtual System.Collections.Generic.List<Telerik.Sitefinity.Data.CacheDependencyNotifiedObject> NotifyAll() public virtual System.Collections.Generic.IList<Telerik.Sitefinity.Data.CacheDependencyKey> NotifyAll()
public method Telerik.Sitefinity.Data.ICacheDependencyHandler.Notify public System.Collections.Generic.List<Telerik.Sitefinity.Data.CacheDependencyNotifiedObject> Notify(object) public System.Collections.Generic.IList<Telerik.Sitefinity.Data.CacheDependencyKey> Notify(object)
public method Telerik.Sitefinity.Data.ICacheDependencyHandler.Notify public System.Collections.Generic.List<Telerik.Sitefinity.Data.CacheDependencyNotifiedObject> Notify(string) public System.Collections.Generic.IList<Telerik.Sitefinity.Data.CacheDependencyKey> Notify(Telerik.Sitefinity.Data.CacheDependencyKey)
public method Telerik.Sitefinity.Data.ICacheDependencyHandler.Notify public System.Collections.Generic.List<Telerik.Sitefinity.Data.CacheDependencyNotifiedObject> Notify(System.Type, string) public System.Collections.Generic.IList<Telerik.Sitefinity.Data.CacheDependencyKey> Notify(System.Type, string)
public method Telerik.Sitefinity.Data.ICacheDependencyHandler.Notify public System.Collections.Generic.List<Telerik.Sitefinity.Data.CacheDependencyNotifiedObject> Notify(System.Type) public System.Collections.Generic.IList<Telerik.Sitefinity.Data.CacheDependencyKey> Notify(System.Type)
public method Telerik.Sitefinity.Data.ICacheDependencyHandler.NotifyAll public System.Collections.Generic.List<Telerik.Sitefinity.Data.CacheDependencyNotifiedObject> NotifyAll() public System.Collections.Generic.IList<Telerik.Sitefinity.Data.CacheDependencyKey> NotifyAll()
public method Telerik.Sitefinity.Modules.Lists.ListsNodeFilter.IsNodeAccessPrevented public bool IsNodeAccessPrevented(Telerik.Sitefinity.Pages.Model.PageNode) public bool IsNodeAccessPrevented(Telerik.Sitefinity.Web.PageSiteNode)
public method Telerik.Sitefinity.Web.ISitemapNodeFilter.IsNodeAccessPrevented public bool IsNodeAccessPrevented(Telerik.Sitefinity.Pages.Model.PageNode) public bool IsNodeAccessPrevented(Telerik.Sitefinity.Web.PageSiteNode)
public method Telerik.Sitefinity.Web.PageSiteNode..ctor public .ctor(Telerik.Sitefinity.Web.SiteMapBase, Telerik.Sitefinity.Pages.Model.PageNode) public .ctor(Telerik.Sitefinity.Web.SiteMapBase, Telerik.Sitefinity.Pages.Model.PageNode, string)
public method Telerik.Sitefinity.Web.SiteMapBase.FindSiteMapNode public virtual System.Web.SiteMapNode FindSiteMapNode(string, bool, bool, out System.Boolean&)

Increase your Sitefinity skills by signing up for our free trainings. Get Sitefinity-certified at Progress Education Community to boost your credentials.

Get started with Integration Hub | Sitefinity Cloud | Sitefinity SaaS

This free lesson teaches administrators, marketers, and other business professionals how to use the Integration hub service to create automated workflows between Sitefinity and other business systems.

Web Security for Sitefinity Administrators

This free lesson teaches administrators the basics about protecting yor Sitefinity instance and its sites from external threats. Configure HTTPS, SSL, allow lists for trusted sites, and cookie security, among others.

Foundations of Sitefinity ASP.NET Core Development

The free on-demand video course teaches developers how to use Sitefinity .NET Core and leverage its decoupled architecture and new way of coding against the platform.

Was this article helpful?