• Home
  • Release notes - Kentico 10

Release notes - Kentico 10

Kentico 10.0 (released November 30, 2016)

System requirement changes

  • Microsoft Azure SDK 2.9.5 or newer required for Microsoft Azure Cloud Services projects (no longer supported in Visual Studio 2012).
  • Added support for Microsoft SQL Server 2016.
  • Ended support of Internet Explorer 9 and 10 for the Kentico administration interface.

New features

Platform

  • Continuous integration – Added support for most types of objects in the system. See Object types supported by continuous integration.
  • Continuous integration – New option to exclude individual objects from continuous integration (based on code names for standard objects and alias paths for pages).
  • Smart search – New status for smart search indexes that indicates when an index requires a rebuild after configuration changes.
  • MVC – New Kentico.Membership integration package that provides an API for working with Kentico users and roles in MVC applications. See Working with users on MVC sites.
  • Passwords – New storage format for user passwords that utilizes the PBKDF2 key derivation function. Provides stronger security than the older password formats. If you wish to switch to the new format, you need to reset the passwords of all existing users. For more information, see Setting the user password format.
  • Export and Import – Added a search filter to the object selection step of the export and import wizards. The filter allows easy selection of specific objects in cases where a large number of objects is available.
  • Membership – The listings in the Users and Roles applications now provide mass actions for deleting multiple users or roles.
  • New Object types tab in the System application, which displays the “object type” identifiers and other details for the available object types in the system. Administrators and developers can use the information to identify Kentico objects in various scenarios (for example when preparing URLs for REST requests, defining cache dependencies, etc.).
  • Performance – Integrated CodeDOM providers that use the .NET Compiler Platform (“Roslyn”) compiler. This improves the compilation performance of the Kentico project and significantly speeds up the first load time of websites. The providers are not added automatically when upgrading existing projects – we recommend installing them manually after you perform the upgrade.
  • Performance – Significantly improved the speed of web requests that cause logging of synchronization tasks (Staging or Integration bus), trigger marketing automation processes or actions, or trigger advanced workflow actions.
  • Automated testing – New Kentico.Libraries.Tests integration package, which separately provides all functionality related to automated testing of the Kentico API. The testing API is no longer available directly within Kentico projects or the main Kentico.Libraries integration package.
  • Automated testing – Faked providers for unit tests now support methods that create or update faked data. See Faking Info and Provider objects in unit tests.
  • Event log – New global events that allow developers to customize how the system logs records into its event log. See Customizing event logging for more information and an example.
  • Staging – New global event that allows developers to customize how the system handles child data when processing incoming staging tasks. See Customizing staging of child and binding objects for more information and an example.
  • Microsoft Azure – When performing the upgrade for Microsoft Azure Cloud Services projects, the system now attempts to automatically update the Azure configuration files (ServiceConfiguration.cscfg, ServiceDefinition.csdef). In most cases, it is no longer necessary to manually transfer your configuration to new files.
  • Amazon S3 – Updated the Amazon Web Services SDK for .NET to version 3.1.9.0. Amazon S3 file storage can now be used with all Amazon data centers.
  • The styles of the Kentico administration interface can be extended or customized using the new App_Themes\Default\Bootstrap\custom.less file. See Customizing CSS for the administration interface.
  • The Kentico.Libraries integration package was reorganized to include only the API commonly required by external applications and reduced in size. Libraries containing controls and other web form presentation API were moved into the new Kentico.Libraries.Web.UI package, which can be installed separately.
  • UniGrid – Developers can now define mass actions within the configuration of UniGrid controls. Includes a predefined action for deleting Kentico objects displayed by the UniGrid.
  • Security – Added new methods to the API that allow developers to perform custom redirects with protection against unvalidated redirection attacks. See Unvalidated redirects.
  • DataQuery API (ObjectQuery, DocumentQuery) – The where condition methods in the DataQuery API now support column values of the long type (long integer number).
  • Email templates – Added preview functionality for email templates. You can now preview email templates by sending draft emails to specific email addresses.
  • Email templates – Added the option to set the “Reply-To” value for individual email templates.
  • Localization – Users with sufficient permissions can now edit global resource strings in the Localization application, even without the Global administrator privilege level.
  • Versioning – Reducing the value of the Version history length settings for object versioning and page versioning now automatically clears the version history for all objects or pages according to the new limit.

Content management

  • Responsive images – New feature for managing responsive images.
  • Forms – The Form builder interface now allows users to clone existing form components.
  • Forms – When a user creates a new field using the form builder interface and changes the Label text for the first time, the system automatically sets the field’s Field name identifier based on the given value.
  • DocumentQuery API – New WithTag method for selecting pages based on their tags.
  • MVC – New Kentico.MediaLibrary integration package that provides an API for working with media library files. See Working with media libraries on MVC sites.
  • MVC – New Kentico.Content.Web.Mvc integration package that provides an API for working with attachments, media library files, and preview mode. See Retrieving content on MVC sites.

On-line marketing

  • Performance – Improved the overall performance of the contact management functionality and other on-line marketing features. Websites using on-line marketing scale better to handle very heavy traffic loads. See Best practices for EMS performance.
  • Contact management – The contact managing interface now contains a new contact profile for displaying information that the system gathers about your contacts. See Working with contacts.
  • Contact management – The Contact has come to the landing page with the specified URLContact has visited a page with the specified URL in the last X days and Contact has visited a specified site in the last X days macro rules were added.
  • Contact management – The CMSCreateContactActionsLogWorker key can now be added to your web.config, so that you can improve performance by adjusting the Contact management settings.
  • Email marketing – The email marketing functionality was extended. You can now create template-based email campaigns which allow you to target and retarget every email based on the impact of the previous email communication. You can also still create template-based and page-based newsletters with a preset contact base. See Email marketing.
  • Campaigns – The whole campaign functionality was extended. You can now set different types of conversions (page visits, form submissions, e-commerce actions, and more), set an ideal campaign journey for a statistics funnel, and set a campaign objective as a goal of your campaign. You can also schedule campaigns so that you do not need to be at a computer during the campaign’s launch and finish. See Campaigns.
  • MVC – New Kentico.Activities integration package that provides an API for logging of Kentico activities. See Logging activities on MVC sites.
  • MVC – New Kentico.Activities.Web.Mvc integration package that provides an API for logging of the external search and page related activities. See Enabling tracking of activities on MVC sites.
  • MVC – New Kentico.ContactManagement integration package that provides an API for tracking contacts on MVC websites. See Tracking contacts on MVC sites.
  • MVC – New Kentico.CampaignLogging.WebMvc integration package that allows tracking of campaign conversions for pages hosted on external MVC sites. See Tracking campaigns on MVC sites.
  • MVC – The Kentico.Newsletters integration package now contains improvements to the subscription management API. See Email marketing on MVC sites.
  • MVC – New Kentico.Newsletters.Web.Mvc integration package that provides tracking of marketing emails on MVC sites. See Tracking marketing emails on MVC sites.
  • MVC – Improved the API for creating content personalization conditions within MVC code. See Content personalization on MVC sites.

E-commerce

Fixed issues (major)

  • WYSIWYG editor – UI personalization can now be applied to custom buttons added onto the editor toolbar. See Personalizing the editor toolbars and buttons.
  • Staging – Staging tasks representing resource strings no longer include translations for individual cultures (the text values of strings). The translation data is only included when synchronizing separate staging tasks of the “resource translation” type. This change prevents problems with resource string updates overwriting translations on the target instance.
  • Staging – The on-line marketing objects such as A/B tested marketing emails and A/B tested page variants can be staged now. The status of the staged A/B tested marketing emails changes to Draft.
  • Fields – The maximum size of all data fields (columns) used to store email address values was standardized to 254 characters for single addresses and 998 characters for fields expecting multiple addresses. The change represents a size increase for most email fields and a reduction for several fields that originally had a very large size.
  • Macros – The macro collections GlobalObjects.Scores, GlobalObjects.Classes, GlobalObjects.ScheduledTasks, SiteObjects.SKUs are now correctly accessible through the macro engine. A name conflict caused other identically named macro collections to take priority during evaluation. This made macros from these collections behave in a non-deterministic way.
  • Users – The system now performs validation of user names on the API level, in addition to input validation in registration web parts and the administration interface. As a result, user name validation applies when creating or updating users programatically, for example in custom code or through REST requests.

Additionally, all bugs fixed within the Kentico 9 hotfixes are included in version 10. See the Bugtracker on DevNet for a full list (click Fixed Bugs).

Breaking changes (functionality, data structure, API)

Platform

  • The forgotten password functionality of the administration interface sign-in page and the Logon form web part now always requires users to submit their email address. It is no longer possible to reset passwords by entering a user name. The Reset password requires email approval option in Settings -> Security & Membership -> Passwords has been removed. Password reset now always requires email approval. The Send email with reset password option in Settings -> Security & Membership -> Passwords has been removed.
  • The Submit support issue application was removed. Instead, you can use the Submit a question or bug link available on the help toolbar, which can be opened by clicking the question mark icon in the header of the administration interface.
  • Many of the default extender classes that adjust administration interface pages were moved from public files in the Kentico project’s App_Code (or Old_App_Code) folder into compiled libraries. If you have modified one of the moved extender files, your customizations will no longer apply after the upgrade. See the upgrade instructions to learn how to re-apply extender customizations in such scenarios.
  • The CMSApp_AppCode project was removed from web application installations. All files are moved into the main CMSApp project. For customizations, use the CMSApp project or custom Class Library projects instead. See the upgrade instructions for more information.
  • The AD import utility is no longer part of the default Kentico installation. The utility is now managed as an open source community project and can be downloaded from the Kentico ADImport GitHub page.
  • All AngularJS libraries used by the Kentico administration interface were updated to version 1.5.5.
  • Web farm server objects are no longer supported by the cloning, export/import and staging features.
  • The CMSModuleLoader partial class and the CMSLoaderAttribute class are now obsolete. The recommended approach for scenarios where you need to run custom code during the application’s initialization is to create and register custom module classes.
  • The system no longer evaluates macros recursively by default (if the result of a macro contains further macro expressions, they are not resolved).
    • If the result of a macro contains localization expressions in the {ResourceStringKey} format, these are automatically resolved recursively.

    • You can explicitly control recursive resolving for individual macro expressions by adding the recursive parameter.

      • Set the parameter to true to force recursive resolving: {% macroName|(recursive)true %}
      • If you have a custom macro resolver, you can configure recursion in the code: MacroResolver.Settings.AllowRecursion = true
    • The (notrecursive) macro parameter is now obsolete.

  • The Cache macro method now always adds the macrocachekey| prefix to the name of the cache key that stores the result of the specified macro expression. The prefix prevents conflicts with other cache keys used by the system.
  • The display name of forms can no longer be localized.
  • Kentico API executed within the body of automated tests that inherit from the CMS.Tests base classes now automatically has additional logging operations disabled by default. For example, this includes logging of staging tasks, web farm synchronization tasks, etc. To run these additional operations within tests, you need to explicitly enable them for blocks of code using the corresponding properties of CMSActionContext.
  • TheApp_Data/mimetypes.txt file used to register custom media types was removed. To register custom media types in Kentico 10, use the MimeTypeHelper.AddRule(string mimetype, string extension) API functionality.
  • The backward compatibility redirection to the administration interface from the /cmssitemanager and /cmsdesk URL paths was removed.
  • The Kentico.Web.Mvc MVC integration package’s logic for generating preview URLs, working with attachments, and managing media library files was transferred to a new Kentico.Content.Web.Mvc integration package. To continue using this functionality, you have to install the Kentico.Content.Web.Mvc integration package into your MVC solution.
  • The DB object schema setting was removed (originally in Settings -> System). Any problems with database object schemas need to be fixed manually on the database level, for example using SQL Server Management Studio.
  • The Report selector form control was removed. If necessary, the Report selector with parameters control can be used instead.
  • It is no longer possible to directly impersonate a different user while impersonating another user. You first need to cancel the first impersonation.

Content management

  • Favicons can now be set per site. If you used a custom favicon.ico file for your project, it will be renamed to favicon.ico.deleted and you need to set the favicon file manually in the Settings application.

  • Processing of page staging tasks now raises events from the DocumentEvents class by default. If you need to disable raising of the DocumentEvents when page tasks are processed, set the CMSStagingUseTreeCustomHandlers web.config key to false.

  • Events from the DocumentEvents class are now raised during a site import.

  • The system no longer converts URLs to absolute format in content sent for translation using the translation services. This prevents possible issues when, for example, synchronizing the translated content to a different domain by staging. If you need to use absolute URLs in translated content, set the CMSTranslationsUseAbsoluteLinks web.config key to true.

  • The AbstractHumanTranslationService base class definition was changed. If you have any custom human translation services inheriting from AbstractHumanTranslationService base class, you need to update the code of the service.

    • The IsLanguageSupported method used for setting up supported directions of translation was replaced by the IsSourceLanguageSupported and IsTargetLanguageSupported methods.
    • The DownloadCompletedTranslations method now has a required string parameter that provides the site name.
  • Namespace of page type and custom table objects is now included in the namespace names of generated classes to avoid ambiguity when referencing the classes in your projects. Classes generated for page types and custom tables are now in the CMS.DocumentEngine.Types.<PageTypeNamespace> and CMS.CustomTables.Types.<CustomTableNamespace> format respectively. If you used a generated class and re-generate the class code, you need to update the using statements in your projects manually.

  • The InCategory method used for filtering page data in custom code was removed. To retrieve pages in specific categories, you need to use the InCategories and InEnabledCategories methods.

  • The AttachmentInfo class used for accessing page attachment data was replaced by the new DocumentAttachment class.

    • The Attachment parameter of page attachment event handlers was changed. The Attachment parameter is now of the DocumentAttachment object type for all page attachment event handlers, i.e., SaveAttachment, DeleteAttachment, SaveAttachmentVersion, and RemoveAttachmentVersion.
    • The DocumentHelper methods for working with page attachments (for example, AddAttachment, GetAttachment, MoveAttachment, etc.) no longer require the parameter to specify a TreeProvider object. The information is now taken from the page instance.
  • The CSS.WebPartLayouts and GlobalObjects.WebPartLayouts macros were removed. To access web part layouts and their CSS stylesheets via macro engine, you need to use the GlobalObjects.WebParts[“<web part code name>”].WebPartLayouts[“<web part layout code name>”] and GlobalObjects.WebParts[“<web part code name>”].WebPartLayouts[“<web part layout code name>”].WebPartLayoutCSS macros respectively.

  • The CSS styling applied to calendar web parts (Calendar, Event calendar) and controls (BasicCalendar, CMSCalendar) was changed. These web parts and controls inherit from the ASP.NET Calendar class and now render a default inline CSS style for the selected day. If you need to override the inline styling, use the !important keyword in your CSS stylesheets.

  • The HTML editor CSS stylesheet property was removed from the Editable text web part. The web part now uses the stylesheet set via the Editor CSS stylesheet site property to style the HTML (WYSIWYG) editor.

  • The Show pan control property was removed from Google Maps web parts (Basic Google maps, Google maps, and Static Google maps). Google deprecated its panControl and panControlOptions settings in Google Maps API.

  • The Upload file form control can no longer be used for page type fields. If you used the Upload file form control in page type fields, it will be replaced by the Direct uploader form control.

  • The cms.blog object type was removed. If you used a custom UniSelector for selecting blogs, you have to manually change its object type to cms.document.cms.blog or use the BlogHelper.BLOG_OBJECT_TYPE constant in the code.

  • The BizForm server control that displays on-line forms was moved from the CMS.OnlineForms library to CMS.OnlineForms.Web.UI. If you have any custom pages or components that use the control, we recommend checking that they work correctly after upgrading.

  • The CMSContent server control, which was used for placing multiple placeholders in a page, was marked as obsolete without replacement.

  • The LanguageDataSource server control now replaces all query string parameters from the returned URLs with the lang query string parameter.

  • The code name of the Device profiles module was changed from CMS.DeviceProfile to CMS.DeviceProfiles. The change also affects related module folders within the project, such as CMS\CMSModules\DeviceProfiles.

  • The data of smart search results for pages no longer contains the imageClass field. If you need to display MIME type icons for file pages in your search transformations, use the GetFileIconClass(Eval<string>(“documentExtensions”)) method instead. See Displaying search results using transformations.

  • The Parent property of message board, blog comment, blog post subscription, personalization variant, MVT variant, and MVT combination objects in macros and the API no longer returns full data of the TreeNode class. Such Parent properties now return a partial set of data, typically only the data of a specific language version of the parent page.

REST service

  • The Kentico REST service no longer supports Forms authentication. All REST requests must now be authenticated using Basic authentication (HTTP header) or Hash parameter authentication. For manual testing of REST requests in a browser, most browsers provide a dialog where you can type in the credentials for Basic authentication.
  • The REST service no longer allows retrieval of TypeInfo data (describing the general behavior and properties of specific object types). The /typeinfo/<object type> resource path is no longer available.

On-line marketing

  • The functionality for logging bots as Kentico contacts is no longer supported. The CMSEnableContactBots web.config key was removed.
  • On-line marketing macros were moved from the OnlineMarketingContext namespace to the ContactManagementContext namespace. For example, the following macro expression: OnlineMarketingContext.CurrentContact.Orders.Exists(OrderTotalPrice > 500) should now be called as: ContactManagementContext.CurrentContact.Orders.Exists(OrderTotalPrice > 500)
  • The system now recalculates contact scores, contact groups, personas and marketing automation triggers with a slightly larger delay after logging activities (10 seconds by default). You can adjust the recalculation interval using the CMSProcessContactActionsInterval web.config key.
  • The new CMSLandingPageLoaded cookie is now used to determine when the Landing page activity should be logged for the current visitor. The cookie key expires after 20 minutes.
  • The Subscription to a newsletter activity now contains the ID of a subscribed recipient in the ActivityItemDetailID field.
  • The Abuse report, Accept initiated chat request, Accept automatically initiated chat request, Chat request support, Chat request support using offline form, Customer registration, Joining a group, Leaving a group and User contribution activity types were deleted. If you need to track these activities, it is possible to create them as custom activity types. They will still remain in your database and the corresponding activity type will be marked as a custom activity type.
  • The Activity ‘Leaving a group’ performed for group and Activity ‘Joining a group’ performed for group macro rules were deleted.
  • The Activity URLfield in activities now uses absolute paths including the protocol and domain name. Relative paths are no longer accepted. This change modifies creating rules for scoring and personas.
  • Notifications sent at specific scores now use a global email template with the scoring.notification code name.
  • Sender email address for notifications sent at specific scores is now set globally in the Settings -> System -> Send email notifications from setting.
  • When defining scoring or persona rules based on activities, the following fields are no longer available in the configuration of the activity details:
    • Query string – for Page visit and Landing page activities.
    • Search provider – for External search and Internal search activities. Can be replaced by adding conditions for the URL referrer field.
    • Search keyword – for External search and Internal search activities. Can be replaced by changing the Rule type to Macro and using the Contact has searched for specified keywords macro rule in the condition.

Campaigns

  • Conversions used by campaigns and personalization (A/B and MVT tests) are now used only for personalization. Campaigns use a new type of conversions based on activities.

    • If upgraded from Kentico 9, campaign reports from older Kentico versions are completely removed due to major changes in the campaign architecture. The upgrade procedure also stops all running campaigns and removes their reports.
    • Related database columns and tables were modified to reflect this change, see the Database section below.
    • You can find more information about conversions used by A/B tests and MVT tests under the name custom conversions. For example, Logging custom conversions on your website.
  • Campaign reports were removed from the Reporting application. Reports from campaigns are available directly only in the Campaigns application.

    • The upgrade procedure does not remove the reports in the Reporting application but only marks them as obsolete. You can delete them if wanted.
  • The Campaign hits widget for the Marketing overview dashboard was removed along with the campaign.dayreport.graph chart that was displayed by the widget without any replacement.

  • When a visitor comes to a page through a running campaign with two different UTM sources, the second visit is no longer logged to the first UTM source. In Kentico 10, if multiple visits use different sets of UTM parameters, each visit with a different set of UTM parameters is logged separately.

Contact management

  • The Account status, Contact status and Contact role tabs under the Configuration tab in the Contact management application now use a page-template based UI. If you have customized the related ASPX files, the changes will no longer apply to the new UI.

  • Contacts, accounts, account statuses, contact statuses, contact roles and contact groups are global objects now, which caused the following changes:

    • The Global data setting category with the following settings was removed from Settings -> On-line marketing -> Contact management -> Global data & merging

      • Allow global contacts; Automatically create global contact for user; *Automatically create unique global contacts from site contacts;**When merging global contacts, select; Allow global accounts; Allow global contact groups* and Allow global configuration.
    • The following settings are global only now:

      • All Inactive contacts settings under Settings -> On-line marketing -> Contact management -> Inactive contacts.
      • All Salesforce.com settings under Settings -> Integration -> Salesforce.com.
    • The SalesForce replication scheduled task is no longer site-specific, but global only.

    • The DisplaySiteOrGlobal property was removed from the Contact status selector and Account status selector form controls.

    • It is only possible to create a global email template of the Automation email type.

    • It is no longer possible to import account statuses, contact statuses and contact roles from the old import packages.

    • The Contact has opened specified email campaign in the last X days, Contact has visited the specified page in the last X days, Contact has voted in the specified poll, Contact is in community group, Contact is in role and Contact is subscribed to a specified email campaign macro rules no longer use code name parameters, but GUIDs.

      • The Contact has opened specified email campaign in the last X days macro rule was renamed to Contact has opened the specified email feed in the last X days.
      • The Contact is subscribed to a specified email campaign macro rule was renamed to Contact is subscribed to the specified newsletter.
    • The Opt-out list setting was removed from the General category under Settings -> On-line marketing -> Email marketing. Unsubscriptions from all email campaigns and newsletters now remove recipients from all marketing emails on all sites.

  • The Contact management module is now a part of the Kentico system and can no longer be separated by removing the On-line marketing module. As a result, contacts and static contact groups are available in the Kentico CMS edition.

  • The Log IP addresses setting was removed from the General category under Settings -> On-line marketing -> Contact management. After applying hotfix 9.0.13 or newer, the setting’s name changed to Log IP addresses and user agents.

    • The contact’s IP address can still be found on the Activities tab when editing a contact in the Contact management application.
    • The information on browsers used by all visitors can still be found in Browser capabilities -> Browser types in the Web analytics application.
    • It is no longer possible to clone IP addresses and user agents in Clone contact dialog in the Contact management application.
  • By default, the system only merges contacts automatically, which caused the following changes:

    • It is no longer possible to merge accounts and split the merged accounts in the Contact management application.

    • It is no longer possible to manually merge contacts and split the merged contacts in the Contact management application.

    • It is no longer possible to clone the merged accounts in the Clone account dialog and the merged contacts in the Clone contact dialog.

    • The Automatic merging of contacts setting category with the following settings was removed from Settings -> On-line marketing -> Contact management -> Global data & merging:

      • Merge contacts for identical E-commerce customers; Merge contacts for identical Email campaign subscribers; Merge contacts with identical email addresses and When a visitor has more contacts, use.
  • The permission model for the Contact Management module was simplified. Permissions for contacts, contact groups, and accounts are now merged into new Read and Modify permissions.

Email marketing

  • The display name of email campaigns and newsletters can no longer be localized.
  • The obsolete Unsubscription request web part was removed. To allow users to cancel their subscription, place the UnsubscribeLink macro {%UnsubscribeLink|(resolver)subscriber%} on the source page of the marketing email.
  • It is no longer possible to add personas, roles, subscribers, and users as recipients to a newsletter. You can now only add contacts and contact groups as newsletter recipients. Newsletter recipients other than contacts and contact groups are removed from the system during upgrade.
  • It is no longer possible to enable resending of email campaigns and newsletters in the Email marketing application. We recommend that you clone the marketing email that you want to send again.

E-commerce

  • Customers’ preferred currency, payment method and shipping option are no longer saved into the database but are set based on their last order.

  • The relationship between shipping options and payment methods was removed.

    • Since version 10, you cannot decide which shipping options are offered for specific payment methods out of the box.
    • The GetPaymentOptionsForShippingmethod from the PaymentOptionInfoProviderclass was therefore also removed.
    • To achieve the same functionality, see Making payment methods dependent on shipping options.
  • Flagging addresses as shipping, billing or company addresses was removed. Also, disabling addresses was removed.

    • Since version 10, all addresses are enabled and can be used for all purposes.
    • The Customer address web part now displays all addresses.
    • Related database columns and API methods were modified to reflect this change, see the Database and API sections below.
  • The Customers application now displays all customers (both global and site customers from all sites).

  • Store managers can no longer manage only specific departments because the functionality was not generally used. The related Access all departments e-commerce permission was also removed without any replacement.

  • The EcommerceTransformationFunctions class was moved to the CMS.Ecommerce.Web.UI library/namespace. If your website uses ASCX transformations that call methods from this class, you need to update the namespace in the transformation code.

  • Attachments of site invoices were removed. You can use files, for example, from the media library.

  • The Copy from global action that copied global settings to site settings is no longer available. The action was removed from currenciestax classesexchange ratesproduct internal and public statuses, and order statuses.

  • It is no longer possible to recalculate prices when changing the main currency.

  • The Address selector form control was removed without any replacement. The form control was not used by default since version 8.

  • Customers can no longer be subscribed to newsletters from the Customers application. Customers can be subscribed by adding their contacts when editing a newsletter in the Email marketing application.

Social & Community

  • The approach for creating custom forum layouts in the ~/CMSModules/Forums/Controls/Layouts folder was changed. See Customizing forum design for more information.
  • Custom content rating appearance modes defined through controls in the ~/CMSAdminControls/ContentRating/Controls/ folder are no longer supported. To create content rating components with a modified appearance, you now need to develop a custom copy of the Content rating web part.

Database

General

  • The default database collation of new Kentico databases is now Latin1_General_CI_AS. You may need to change the collation when migrating databases to Microsoft Azure SQL, which requires the SQL_Latin1_General_CP1_CI_AS collation. The collation is not changed when upgrading existing databases.
  • The UserIsEditor, UserIsGlobalAdministrator and UserSiteManagerDisabled columns were removed from the CMS_User database table. The privilege level of users is now stored as an integer value in the new UserPrivilegeLevel column.
  • The PageTemplateIsPortal column was removed from the CMS_PageTemplate database table. Instead, you can identify portal templates by checking the PageTemplateType column for the value ‘portal’.
  • The Staging_SyncLog database table was removed. Staging task error messages can instead be loaded from the SynchronizationErrorMessage column of the Staging_Synchronization table.
  • The TagCodeName column was removed from the CMS_Tag database table.

E-commerce

  • The CustomerEnabled column was removed from the COM_Customer database table without any replacement. The column has not been used by default since version 8.
  • The CustomerPreferredCurrencyIDCustomerPreferredPaymentOptionIDand CustomerPreferredShippingOptionID columns were removed from the COM_Customer database table without any replacement because customers’ preferred currency, payment method and shipping option are no longer saved in the database.
  • The AddressIsShippingAddressIsBilling and AddressIsCompany columns were removed from the COM_Address database table without any replacement because flagging addresses as shipping, billing and company addresses is no longer supported.
  • The AddressEnabled column was removed from the COM_Address database table without any replacement because enabling and disabling addresses is no longer supported.
  • The length of the following database columns was reduced to 26:
    • COM_Customer.CustomerPhone
    • COM_OrderAddress.AddressPhone
    • COM_Address.AddressPhone
  • The UserPreferredCurrencyIDUserPreferredPaymentOptionID and UserPreferredShippingOptionID columns were removed from the CMS_UserSite database table without any replacement because users’ preferred currency, payment method and shipping option are no longer saved in the database.
  • The COM_UserDepartment database table was removed without any replacement as the user–department relationship is no longer available.
  • The CategoryAllowEmpty column was removed from the COM_OptionCategory database table without any replacement. The column was not used by default.
  • The COM_PaymentShipping database table was removed without any replacement. The table was used for binding of payment methods and shipping options, which was removed in version 10.
  • The ShippingOptionCharge column was removed from the COM_ShippingOption database table without any replacement. The column was not used by default since version 9.
  • The CategoryOrder column was removed from the Reporting_ReportCategory database table, and the following category object views: *View_CMS_PageTemplateCategoryPageTemplate_Joined,**View_CMS_WebPartCategoryWebpart_Joined, View_CMS_WidgetCategoryWidget_Joined, View_Reporting_CategoryReport_Joined.* The column was not used by the default functionality.

On-line marketing

  • The RuleSiteID column was removed from the OM_Rule database table without any replacement because the objects presented in the table are no longer site-specific, but global only.

  • The ScoreSiteID column was removed from the OM_Score database table without any replacement because the objects presented in the table are no longer site-specific, but global only.

  • The PersonaSiteID column was removed from the Personas_Persona database table without any replacement because the objects presented in the table are no longer site-specific, but global only.

  • The TriggerSiteID column was removed from the CMS_ObjectWorkflowTrigger database table without any replacement because the objects presented in the table are no longer site-specific, but global only.

  • The AccountStatusSiteID column was removed from the OM_AccountStatus database table without any replacement because the objects presented in the table are no longer site-specific, but global only.

  • The ContactStatusSiteID column was removed from the OM_ContactStatus database table without any replacement because the objects presented in the table are no longer site-specific, but global only.

  • The ContactRoleSiteID column was removed from the OM_ContactRole database table without any replacement because the objects presented in the table are no longer site-specific, but global only.

  • The ContactGroupSiteID column was removed from the OM_ContactGroup database table without any replacement because the objects presented in the table are no longer site-specific, but global only.

  • The Analytics_ConversionCampaignSource database table was removed. Conversions for campaigns are now different from the original conversions.

  • The OM_IP and OM_UserAgent database tables were removed without any replacement.

  • The OM_PageVisit and OM_Search database tables were removed. The records are now stored as standard activities in the main OM_Activity table.

    • The OM_PageVisit table’s PageVisitABVariantName and PageVisitMVTCombinationName columns are replaced by the new ActivityABVariantName and ActivityMVTCombinationName columns in OM_Activity.
    • The values originally stored in the OM_Search.SearchKeywords column are saved in the OM_Activity.ActivityValue column.
    • The values originally stored in the OM_Search.SearchProvider column can be determined based on the value of the OM_Activity.ActivityURLReferrer column.
  • The following columns were removed from the OM_Contact database table without any replacement:

    • ContactIsAnonymous – It is possible to find out whether a contact is anonymous by checking that there is no user assigned to the contact in the OM_Membership table.
    • ContactSiteID – Contacts are no longer site-specific, but global only.
    • ContactGlobalContactID –** Contacts are no longer site-specific, but global only.
    • ContactMergedWithContactID – Manual contact merging and splitting are no longer supported.
    • ContactMergedWhen– Manual contact merging and splitting are no longer supported.
    • ContactTitleAfter – The contact editing interface no longer contains the field for collecting the Title after data.
    • ContactTitleBefore – The contact editing interface no longer contains the field for collecting the Title before data.
    • ContactHomePhone – The contact editing interface no longer contains the field for collecting the Home phone data.
    • ContactSalutation – The contact editing interface no longer contains the field for collecting the Salutation data.
    • ContactWebSite – The contact editing interface no longer contains the field for collecting the Web URL data.
    • ContactLastLogon – The system no longer displays the contact’s last logon in the contact editing interface.
    • ContactAddress2 – The contact editing interface no longer contains the field for collecting the Address 2 data.
  • The following columns were removed from the OM_Account database table without any replacement:

    • AccountSiteID – Accounts are no longer site-specific, but global only.
    • AccountGlobalAccountID – Accounts are no longer site-specific, but global only.
    • AccountMergedWithAccountID – Account merging and splitting are no longer supported.
  • The following columns were removed or renamed in the OM_Activity database table:

    • ActivityGUID – removed
    • ActivityOriginalContactID – removed
    • ActivityActiveContactID – renamed to ActivityContactID
  • The OriginalContactID column was removed, and the ActiveContactID column was renamed to ContactID in the OM_Membership database table.

  • The EmailUserID column was removed from the Newsletter_Emails database table without any replacement. The column was used for identifying users that were added to newsletters as recipients, which is no longer supported.

  • The UnsubscriptionSiteID column was removed from the Newsletter_Unsubscription database table without any replacement because unsubscriptions from all email campaigns and newsletters now remove recipients from all email feeds on all sites.

  • The following columns were removed or renamed in the Newsletter_Newsletter database table:

    • The NewsletterType column was renamed to NewsletterSource because the column distinguishes between template-based and page-based newsletters.
    • The NewsletterEnableResending column was removed without any replacement because it is no longer possible to enable resending of newsletters and email campaigns.

API

  • The following table summarizes the most significant changes made to public API namespaces/libraries in Kentico 10:

    Old namespace

    New namespace

    Change

    Comment

    CMS.ApplicationDashboard

    CMS.ApplicationDashboard.Web.UI

    Renamed

    You need to update your code if you use the API to Display data on application dashboard tiles.

    CMS.CKEditor

    CMS.CKEditor.Web.UI

    Renamed

    Contains components and API related to the WYSIWYG editor.

    CMS.Controls

    CMS.DocumentEngine.Web.UI

    Fully moved

    Includes the Kentico controls used to display content and related web form API.

    CMS.EcommerceProvider

    CMS.Ecommerce.Web.UI
    CMS.Ecommerce

    Separated

    Most of the CMS.EcommerceProvider classes can now be found in the new CMS.Ecommerce.Web.UI library and namespace. Some were moved to CMS.Ecommerce.

    CMS.ExtendedControls

    CMS.Base.Web.UI

    Fully moved

    Includes extended versions of standard controls used within the Kentico interface and related API.

    CMS.FormControls

    CMS.FormEngine.Web.UI

    Fully moved

    Includes web form components used by the Kentico form engine (for example the form control base class).

    CMS.Notifications

    CMS.Notifications.Web.UI

    Renamed

    Provides the API for notifications and notification gateways.

    CMS.OnlineMarketing

    CMS.ContactManagement

    Partially moved

    The API for Contact management was moved from the CMS.OnlineMarketing library and namespace into the new CMS.ContactManagement library and namespace (for example, the move includes the ContactInfo and ContactInfoProvider classes).

    CMS.PortalControls

    CMS.PortalEngine.Web.UI

    Fully moved

    Includes web form components used by the Kentico portal engine (web part base classes etc.).

    CMS.PortalEngine

    CMS.DeviceProfiles

    Partially moved

    The API for managing Device profiles was moved from the CMS.PortalEngine library and namespace into the new CMS.DeviceProfiles library/namespace (for example, the move includes the DeviceProfileInfo and DeviceProfileInfoProvider classes).

    CMS.Tests

    CMS.Tests

    Moved to NuGet

    The CMS.Tests library is no longer available within Kentico 10 projects and corresponding versions of the Kentico.Libraries NuGet package. To access the API for creating automated tests, you now need to separately install the Kentico.Libraries.Tests NuGet package.

    CMS.WebAnalytics

    CMS.Activities

    Partially moved

    The API for logging of activities was moved from the CMS.WebAnalytics library and namespace into the new CMS.Activities library and namespace (for example, the move includes the ActivityInfo and ActivityInfoProvider classes).

  • In general, API related to web form presentation logic was moved from the original libraries into new libraries with the Web.UI suffix.

  • Libraries containing controls and other web form presentation API were removed from the Kentico.Libraries integration package. If you use any of the moved API in an external application, you need to install the new Kentico.Libraries.Web.UI package.

  • The **MediaHelper, ScriptHelper and UIHelper classes were moved from the CMS.Helpers library into the new CMS.Base.Web.UI library/namespace.

  • The CMS.Helpers.CSSHelper class was separated into the following classes:

    • CMS.Helpers.CssHelper
    • CMS.Helpers.CssLinkHelper
    • CMS.Base.Web.UI.CssRegistration
    • CMS.Base.Web.UI.ModuleCssRegistration
  • The Stream and MemoryStream classes from the CMS.IO namespace are now obsolete. All Kentico API that worked with these types now accepts the standard Stream and MemoryStream types from System.IO.

  • The URLHelper.ResolveUrl method no longer works for URLs that are relative to a specific control or page. To resolve these types of URLs, call the .NET ResolveUrl method of the given Control or Page class.

  • The URLHelper.Redirect and RedirectPermanent methods no longer work for URLs that are relative to a specific control or page. To redirect to these types of URLs, you first need to resolve the URL by calling the .NET ResolveUrl method of the given Control or Page class.

  • CSSHelper methods that were moved to the CssLinkHelper class and accept a URL parameter (for example GetPhysicalCssUrl) no longer work for URLs that are relative to a specific page. You first need to resolve the URL by calling the .NET ResolveUrl method of the given Control or Page class.

  • The UIForm server control (class) was moved from the CMS.FormControls library to CMS.PortalEngine.Web.UI.

  • The CMSCheckoutWebPart class was moved from the Kentico web project to the CMS.Ecommerce.Web.UI library and is no longer customizable.

  • The UserInfo.SetPrivilegeLevel method was removed. To assign a privilege level to user objects, set the new SiteIndependentPrivilegeLevel property instead.

  • The URLRewritingEvents.PageNotFound global event no longer supports the Before and After event types, only Execute. Additionally, the parameter type of the event’s handler methods was changed to URLRewriterPageNotFoundEventArgs.

  • Code executed within handlers of the ApplicationEvents.PostStart, RequestEvents.RunEndRequestTasks and RequestEvents.Finalize global events can now affect the response sent to clients (the system no longer calls the HttpResponse.Flush method before the events). If you use custom handlers for these events, verify that they work correctly and do not seriously affect the response times of requests (after you perform the upgrade).

  • The AutomationEvents.ProcessTrigger global event no longer occurs separately for each processed contact, but instead periodically when bulk processing multiple contacts. The Options property of the AutomationProcessTriggerEventArgs event handler parameter is now a collection.

  • The RegExExcludeLogSource, RegExExcludeLogCode and RegExExcludeLogDescription properties were removed from the EventLogProvider class. To disable logging of specific types of events, prepare a custom handler for the new EventLogEvents.LogEvent.Before event. See Customizing event logging.

  • The UnitAverageDiscountInMainCurrency, UnitAverageDiscount and DiscountedUnits columns were removed from the DiscountsTable property in the ShoppingCartItemInfo class. The columns were intended for customization scenarios of discounts. Such scenarios were replaced with Buy X Get Y discounts introduced in Kentico 8.1.

    • UnitAverageDiscountInMainCurrency – its value equals to UnitDiscountInMainCurrency
    • UnitAverageDiscount – its value equals to UnitDiscount
    • DiscountedUnits – its value equals to Units
  • The AddressInfoProvider.GetAddresses method’s parameters were changed to int customerId, bool onlyEnabled because flagging addresses as shipping, billing and company addresses is no longer supported.

  • The OnlineMarketingFunctions class was removed from the Kentico web project. You can replace the removed class by implementing a custom class that uses the functionality of the ISubscriptionService, IUnsubscriptionProvider and ActivityInfoProvider classes.

  • The SynchronizedColumns property of the SynchronizationSettings class was removed. If you have a custom module class that used the SynchronizedColumns property in its type information, set the new ExcludedStagingColumns property instead. The new property has the same general purpose, but the field names in the value have the opposite meaning (blacklist instead of a whitelist).

  • Connection string name prefixes set by the CMSConnectionContext class now apply when using the CMSConnectionScope class to assign a connection string to blocks of code.

  • When assigning a connection string to a block of code using the CMSConnectionScope class, the system no longer switches the entire context of the application’s static data (hash tables, cached data, etc.) for the given database.

  • The following public static methods were removed from the ShoppingCartInfoProvider class. If you used these methods, you can still customize the info provider class using their protected virtual methods (named as <methodname>Internal).

    • SetContentTaxRow
    • FilterContentTable
    • CreateShippingTaxRow
    • CreateShippingTaxesTable
    • CreateContentTaxRow
    • CreateContentTaxesTable
    • CreateContentTable
    • CreateContentRow
  • The following public static methods were removed from the ShoppingCartItemInfoProvider class. If you used these methods, you can still customize the info provider class using their protected virtual methods (named as <methodname>Internal).

    • CreateDiscountsTable
    • CreateTaxesTable
    • CreateDiscountRow
    • CreateTaxRow

Search the API changes page on DevNet to find all possible breaking changes in the API.