• Home
  • Release notes - Kentico 9

Release notes - Kentico 9

Kentico 9.0 (released November 23, 2015)

System requirement changes

  • The minimum required version of Microsoft .NET Framework is now 4.5
  • The Kentico application in IIS must now use an Application Pool with Managed Pipeline Mode set to Integrated. Classic mode is no longer supported.
  • Microsoft Azure SDK 2.7.1 required for Microsoft Azure projects.
  • Removed support for Microsoft SQL Server 2008.

New features


  • Continuous integration - New feature that helps developers cooperate when developing sites and applications in a team environment.
  • Staging - Users can now define groups for organizing staging tasks and switch to the context of a specific task group when working in the administration interface. The system then categorizes any staging tasks logged for the user’s changes under the given group.
  • Staging - The data of each staging task now includes the name of the user who performed the change represented by the task.
  • Staging - Added filtering to the lists of tasks in the Staging application. The filtering options include the user footprint and task groups.
  • Module installation packages - Added support for automatic installation of database objects. When a custom module is installed from a NuGet package, the required database objects are now imported automatically during the next web request.
  • Module installation packages - Modules installed from NuGet packages can now be updated to newer versions or uninstalled, including database objects.
  • Module installation packages - Page types can now be assigned to a module, which includes them in the module’s installation packages.
  • Module export - Developers can choose whether modules become sealed during export. Allows further development of the module after import.
  • Web farms - Improved and streamlined the web farm synchronization mechanism.
  • Object listings - Drag and drop support added to the listing interface for most object types that have a defined order.
  • Localization - Added support for site-specific resource strings.
  • Form controls - New interface that allows users to find all objects in the system that use a given control in their form.
  • Application dashboard - The interface now allows pinning (adding) of individual objects to the application dashboard, for example Forms or Campaigns.
  • Security - The system now uses security tokens to protect pages against Cross site request forgery attacks.
  • The Cache files (minutes) setting now specifies the caching interval for Microsoft Azure CDN.
  • DataQuery API (ObjectQuery, DocumentQuery):
    • The WhereIn method can now work with collections of GUID values.
    • Improved how the WhereIn method works with parameters containing nested queries. The type of the nested query is automatically determined based on the returned column.
    • Added advanced options for identifying target database tables using QuerySourceTable objects. Allows you to specify aliases and SQL Hints.
    • New method for performing CAST operations for database columns (QueryColumn objects).
    • New method for performing the ISNULL function for columns.
    • New methods for working with XML data stored within columns.

Content management

  • Performance - Improved performance for:

    • Loading of page data by listing and menu web parts.
    • Displaying of data on multilingual sites that use the Combine with default culture setting.
    • Other page-related operations.
  • Page types - You can now create “Content only” page types. Content only page types are suitable for pages on MVC sites whose only task is to hold content, such as individual news articles. Content only pages aren’t based on page templates and don’t contain presentation properties and tabs. This allows content editors to use the pages without unnecessary distractions. These page types have a URL pattern property that allows you to specify their presentation URL pattern. This way, you can allow content editors to view the content of content only pages via the administration UI.

  • Pages - You can now add ‘Page’ fields to specific page types. Such fields allow you to create content structures consisting of not only standard fields, but also the data of other pages.

  • Attachment history - Page attachment history is now saved according to the ‘Settings (application) -> System -> Files -> Store files in’ setting. This allows you to lower the overall size of the system database. The settings are shared with published versions of attachments. You can force the system to ignore the setting for attachment history and keep storing the data in the database.

  • Site management - You can now add a ‘Presentation URL’ when editing your site. Use this property if you’re running your site on a different domain than the domain you run your Kentico application on. This is useful, for example, when using a separate MVC application for your site that you host on a different domain.

  • Smart search - The SearchResultUrl transformation method now contains an optional addLangParameter bool parameter. The parameter adds a culture specific query parameter to the returned URL if more than one culture version of the page exists. True by default.

  • MVC - You can now use a new site template to create sites that use an MVC application for their presentation.

  • Web parts - New interface that allows users to find all locations where a given web part is used.

  • Forms - The Form builder interface now displays status messages whenever the system automatically saves changes made to the form’s fields.

  • Localization - New Language data source web part.

  • Editable text regions - The Editable text web part has a new property that determines whether HTML encoding is used for the text value when working in Text box or Text area mode.

  • 51Degrees library - Upgraded to version

On-line marketing

  • Campaigns - The campaign tracking cookie expiration time was increased. The cookie is now valid for a long enough interval that campaign tracking is active until the cookie is deleted by the visitor or overwritten by a different campaign tracking cookie.
  • Campaigns - The Campaigns application was completely redesigned. You can now add pages as campaign assets. The assets are then automatically tracked and form a campaign funnel, which allows you to better track visitor progress in your campaigns.
  • Contact management - The way Kentico recognizes contacts on the site has changed to best accommodate the most typical B2C and B2B scenarios.
  • Contact management- The automatic contact deletion settings were simplified. The settings now cover the most typical scenarios. Also, to preserve the performance of a website, the system now deletes only 1000 contacts at a time and reschedules the rest to off-peak hours (between 2 and 6 a.m. by default).
  • Email marketing - Recipients can now opt-out of all email marketing communication. You can configure the opt-out to work across all sites or a single site only.
  • Email marketing - Unsubscription links sent via the Unsubscription request web part are no longer affected by the ‘Opt-out list’ site setting as they don’t expire anymore.
  • Email marketing - You can now specify UTM parameters that will be used in links in your campaign emails.
  • Online marketing macros - A new FilledFormFieldWithValue macro method was added. The macro evaluates whether a visitor entered a specific text value into a form field. The method is used in Scoring, Persona and Contact group condition builders.
  • A/B tests - How-to videos were added to the main screen of the A/B tests application and to the Overview tab of a specific test. The videos were added to help users when using the functionality for the first time.
  • Contact management - How-to videos were added to Contact management -> Contact import. The video was added to help users when using the functionality for the first time.
  • Marketing automation - You are now able to delete running marketing automation processes. Previously, you had to remove all contacts from a process before deleting it.


  • Abandoned cart marketing automation - Kentico now enables store managers and marketers to automate marketing processes related to abandoned shopping carts. For example, the system can send email notifications to all customers who abandon their carts. That leads to customers repeatedly visiting the store and possibly completing their orders.

Fixed issues (major)

  • Macros - The timeout limit for resolving of macros now applies correctly (by default 1 second). If you encounter problems with timed out macros, you can set a longer timeout by adding the |(timeout) parameter to individual expressions, for example |(timeout)10000.
  • Scheduled tasks - Fixed the sliding of scheduled task run times. The system now calculates the next run time based on the time for which the previous run was originally scheduled. The actual start time of the task and the execution duration no longer have any effect.
  • Email queue - The retry policy for sending emails (both regular and campaign emails) changed to minimize the chances that failed emails get stuck in the queue. The Email queue keeps attempting to send failed emails every minute for the first hour after the first failed attempt.
  • Geomapping - The Bing and Google map web parts now work with protocol-relative URLs.
  • E-commerce - The ECommerceContext.CurrentCustomer property now always points directly to the CurrentShoppingCart.Customer property. Previously, the ECommerceContext.CurrentCustomer property could have lead to different properties in certain cases.
  • API - Fixed exceptions that could occur when calling the ValidationHelper.GetBoolean method with unconvertible input.
  • Field editor - Added validation for the names of primary identifier fields (for custom Classes, Page types, Custom tables, Forms, etc.).
  • Portal engine - The HTML head section no longer combines head sections from multiple master pages before the closest master page in the tree is saved on the Master page tab for the first time.
  • Pagination - When using a query string parameter for pagination, the system now hides the parameter on the first page.

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

Breaking changes (functionality, data structure, API)


  • Web farm synchronization mechanisms were removed, including the Synchronize web farm changes scheduled task. Instead, web farms can now be disabled, run automatically, or configured manually. See Configuring web farm servers for more information.
  • The backward compatibility of the Import feature is now restricted to the previous major version or newer (i.e. only packages created on Kentico 8 or newer can be imported on Kentico 9).
  • The Deploy to Azure function of the Kentico Installation Manager utility was removed. Use the Publish feature in Visual Studio to deploy Azure projects.
  • The markup of the Logon form web part was changed from a table to a DIV based layout.
  • Certain resource strings used by the Logon form web part were moved from the code behind to the markup to improve customization options.
  • Postbacks no longer add the .aspx extension to the URL by default. If you need to force adding of the extension, set the CMSUseExtensionOnPostback web.config key to true. The related property in the code became obsolete.
  • The ~/CMSMessages/Error.aspx and ~/CMSMessages/Information.aspx system pages now only display content if the URL contains a valid hash. Custom links to these pages will no longer work. However, you can use the API in your custom code to generate valid links – call the UIHelper.GetErrorPageUrl or UIHelper.GetInformationUrl methods respectively.
  • The object type order used during export/import can no longer be overridden using the ~/App_Data/CMSModules/ImportExport/objecttypes.txt file.
  • Removed all API example files from the ~/CMSAPIExamples folder of projects. You can now view the example code online, or in the CodeSamples\APIExamples folder within your setup file directory.

Content management

  • Removed GetAmazonFile.aspx, GetAzureFile.aspx, GetCSS.aspx, GetFile.aspx, GetMetaFile.aspx, GetResource.ashx, and GetMediaFile.aspx files, which were used to retrieve data. Modification of the these files is no longer possible because their implementation was moved into internal libraries.
  • Removed support for several web parts and widgets that were present in previous versions of Kentico (for example the Document library and Drop-down menu web parts). See the complete list of abandoned web parts and widgets.
  • The Trackback and Meta Weblog API features for blogs were removed.
  • The recommended approach for creating MVC sites is now different. Make sure you see the upgrade instructions if you use the CMSApp_MVC project for your MVC development.
  • Kentico 9 supports only ASP.NET MVC 5.2 and higher versions for pages that have a controller and action specified in the Kentico administration interface. Pages served by .NET Routing (routes defined in RouteConfig.cs) still support all versions of ASP.NET MVC.
  • Default page type and custom table transformations are no longer generated automatically. The default transformations now only contain code for evaluating the fields in the object without any additional markup.
  • The system no longer converts URLs inside CSS stylesheets from relative to absolute by default when serving the CSS code to browsers. If your application had the CMSUseAbsoluteCSSClientURLs web.config key set to false, your physical stylesheets may contain relative URLs that start from a different folder path than the actual location of the stylesheet file. Such URLs are no longer valid – use the file location as the starting point for relative URLs.
  • The Parent property of page child objects (for example attachments) in macros no longer returns full data of the TreeNode class. Such Parent macro properties now return a partial set of data, typically only the data of a specific language version of the page.
  • The CMSProcessTrailingSlashForFile web.config key is no longer necessary and was removed. The system now processes attachment URLs both with and without the trailing slash.
  • All controls with the ResourcePrefix property were unified to contain a resource string prefix in their name. For example, control.somestring is now prefix.control.somestring. This was done to unify the behavior and avoid potential collisions when a prefix was replaced.
  • The application no longer processes URL routes with custom extensions (anything other than extensionless or .aspx) by default. If you use custom extensions in Route or MVC type URL paths of pages or in routes registered using custom code, you need to add the <modules runAllManagedModulesForAllRequests=“true”> configuration to your web.config file. See Extensionless and custom URLs for details.
  • Kentico no longer supports the following URLs for retrieving files and images: /getimage/node/alias/path/filename.extension{.aspx} and /getfile/node/alias/path/filename.extension{.aspx}.
  • The CMSStoreFilesInFilesystem and CMSStoreFilesInDatabase settings were removed. You may use new the CMSFilesLocationType setting with its CMS.Helpers.FilesLocationTypeEnum enumeration. The removed settings are converted into the new one when performing an upgrade or an import from an older version.
  • The \CMS\CMSModules\Categories\Controls\Categories.ascx control used in the Categories application, User categories administration interface and in the My profile web part on the live site changed its output HTML in the menu part of the layout. A new <div> tag with the category-main-menu ID was added.
  • Removed the Include all translations into one submission option from the Send for translation advanced workflow action step. Each target language is translated in a separate submission.
  • The File import application was removed. See Managing files for information on how to work with files in the system.
  • The obsolete Microsoft SharePoint integration web parts were removed. See the Integrating SharePoint chapter to learn how to display SharePoint content without the obsolete web parts.

REST service

  • The Kentico REST service now returns date and time values within JSON data using the ISO 8601 format (2013-10-21T14:20:12.293+02:00) instead of the original Microsoft JSON format (\/Date(1299419802000)\/). Both date and time formats are accepted when processing incoming POST or PUT requests.
  • The macro resolving functionality of the REST service (/macro/<expression> resource path) now uses the global macro resolver instead of the dedicated ServiceResolver. The ServiceResolver was removed from the system.
  • REST requests for getting multiple pages without specifying a page type, for example /rest/content/all, now by default return pages without coupled (type specific) data. To get pages with coupled data, add the coupleddata=true query string parameter to the request URL.
  • REST requests for getting pages without coupled data now return data containers with the general cms.document name, instead of names based on specific page types. Requests that include coupled data use the page type class names.

Social & Community

On-line marketing

  • The Subscribers -> Subscribers tab in the Email marketing application was renamed to Subscriber management -> All subscribers.

  • The Templates tab in the Email marketing application was renamed to Template management.

  • Generating of links in email campaigns was changed to improve security. As a consequence, the Opened campaign email and Clicked email campaign link activities from campaign emails sent in a previous version of Kentico will not be logged in Kentico 9.

  • The Remember contacts permanently, Automatically recognize visitors by user agent, and Automatically recognize visitors by IP address settings were removed. Kentico no longer recognizes anonymous visitors as contacts based on their IP address and browser user agent. The system also remembers contacts until their cookies are deleted or another contact is determined by the system.

  • The Track campaigns and Track conversion settings were removed. Campaigns and conversions are now tracked automatically when the Enable web analytics setting is selected.

  • The Campaign tracking URL parameter setting was removed. Now, the standardized utm_campaign query parameter in the URL is used by default.

    • Campaign tracking for already existing links with different parameters in the URLs will no longer work after the upgrade.
  • The functionality for tracking campaigns via page aliases was removed.

  • The functionality for defining marketing campaign goals was removed.

  • The Campaigns tab was removed from conversions. Logging conversions in campaigns is now configured directly when editing a specific campaign.

  • If a visitor arrives on a page via a link containing a utm_campaign parameter, the system doesn’t log the conversion in the campaign unless the page is explicitly assigned to the campaign.

  • The CMSEnableAutomaticCampaignCreate web.config key was removed. The functionality to automatically create new campaigns by visiting the site using an unspecified campaign URL parameter is no longer supported.

  • The SiteObjects.EmailTemplate macro doesn’t retrieve campaign email templates anymore. Use Newsletter.EmailTemplate to retrieve campaign email templates.

  • The macro for retrieving campaign emails has been renamed to Newsletter.Email.


  • The values of customer properties are now synchronized with the content of user properties and vice versa.

    • This replaces copying of customer information to user information when registering without any later synchronization.
    • The email, first name, last name, full name and phone properties are synchronized by default.
    • To manually synchronize customers and users, or to change synchronization, see Synchronizing customer and user properties.
  • The obsolete Bundle items selector form control was removed. Use the universal Multiple object binding control form control instead.

  • The Building your on-line store and E-commerce settings checker widgets were removed without any replacement (also removed from the default content of the Store overview application).

  • The obsolete Product filter web part was removed. You can replace the web part with the built-in smart search, see more information in Configuring product listings with filtering.

  • The obsolete Shopping cart preview web part was removed. You can replace the web part with macros, see more information in Displaying the shopping cart preview on pages.

  • The obsolete e-commerce macros in the ##MACRONAME## format are no longer supported. To achieve the same results as with the removed macros, see the upgrade instructions.

  • Flat taxes (tax classes with a fixed tax) are no longer supported. Only percentage taxes are supported.

  • Legacy field mapping of product page types for backward compatibility is no longer supported without any replacement.

  • The Registration conversion name and Registration conversion value e-commerce settings, which take effect only when using the obsolete Checkout process web part, were hidden as well as other hidden settings related to the Checkout process web part. To display the hidden settings, see the upgrade instructions.


  • All page related views and the View_COM_SKU views were removed with the exception of View_CMS_Tree_Joined, which is used as the base for querying of page data. PLEASE NOTE: The resulting view (View_CMS_Tree_Joined) no longer includes SKU data. You need to join the data manually in a custom query. Based on this change, the SQL search functionality does not include SKU data in search results. To include the SKU data you need to modify the searchdocuments and searchattachments queries of the Root page type.
    • The selectdocuments query for page types is no longer used to query page data.
    • The SQL search implementation no longer uses the searchtree page type query unless it is explicitly defined by the page type. The functionality now uses DocumentQuery to retrieve search results.
  • The SiteName column was removed from the View_CMS_Tree_Joined view.
    • Use the NodeSiteID column instead (for example in Columns and WhereCondition web part properties).
  • The NodeOwnerFullName, NodeOwnerUserName, NodeOwnerEmail columns were removed from the View_CMS_Tree_Joined view.
    • Use the NodeOwner column instead, which stores the ID of the given user.
  • The Published column was removed from page views. The published status is now evaluated using an extra where condition through DocumentQuery. If you used the ‘Published = 1’ where condition to query for published pages, you need to use the following condition instead:
    ([DocumentCanBePublished] = 1 AND ([DocumentPublishFrom] IS NULL OR [DocumentPublishFrom] <= GETDATE()) AND ([DocumentPublishTo] IS NULL OR [DocumentPublishTo] >= GETDATE()))
  • The automatic translation of the SKUName, SKUDescription and SKUShortDescription database fields in the COM_SKU table to the corresponding DocumentSKUName, DocumentSKUDescription and DocumentSKUShortDescription fields in the CMS_Document table is no longer supported without any replacement.
  • The SKUInheritsTaxClasses, SKUInheritsDiscounts and SKUAllowAllVariants columns of the COM_SKU database table were removed without any replacement.
  • The ManufacturerIsImportant field was removed from the Manufacturer class. If you need a replacement, you can create a custom field with the same function (in the Modules application).
  • The OrderContentTaxes property was removed from the OrderInfo class. Every order item keeps the information about taxes by itself.
  • The TotalClicks database column was removed from the Newsletter_Link database table. Clicked links are now stored in the Newsletter_ClickedLink table.
  • The Newsletter_SubscriberLink database table was removed. Clicked links are no longer stored based on the subscriber but based on the subscriber’s email address in the Newsletter_ClickedLink table.
  • The Proc_Analytics_GenerateSampleData stored procedure was removed. Sample web analytics data is now generated internally in code.
  • The CategoryOrder column was removed from the CMS_PageTemplateCategory table as it wasn’t used.
  • The ScopeExcluded column is now required in the CMS_WorkflowScope table.
  • The following columns were removed from the CMS_Document table:
    • DocumentLastVersionType
    • DocumentLastVersionMenuRedirectUrl
    • DocumentLastVersionName
    • DocumentMenuStyleOver
    • DocumentMenuClassOver
    • DocumentMenuItemLeftImageOver
    • DocumentMenuItemImageOver
    • DocumentMenuItemRightImageOver
    • DocumentCampaign
  • The following columns were removed from the CMS_Tree table:
    • NodeWireframeTemplateID
    • NodeWireframeComment
    • NodeWireframeInheritPageLevels
  • A new NodeOriginalNodeID column was introduced in the CMS_Tree table. This column is used to join culture specific data in the main database view.


  • The CMSList collection was removed. Use standard .NET collections instead.

  • The TreeNodeDataSet class was removed. Use InfoDataSet<TreeNode> instead.

  • DocumentQuery objects no longer reflect site settings by default (especially the settings related to culture parametrization). The settings are only taken into account when the TreeProvider.SelectNodes() or DocumentHelper.GetDocuments() methods are used. This is also the preferred way to directly create instances of the DocumentQuery class. Also, to only retrieve published pages only, use methods from the TreeProvider class.

  • The CurrentUserInfo.PreferredCultureCode property now returns the value of the user’s Preferred content culture field. To get the code of the content culture currently selected by the user for the website, use LocalizationContext.PreferredCultureCode.

  • URL rewriting now occurs during a different event within the Kentico request handling life cycle. The URL rewriting logic was moved from the RequestEvents.MapRequestHandler event to the new RequestEvents.PostResolveRequestCache event, which occurs earlier.

  • The WebSyncHelper.OnProcessCustomTask event is no longer available. See Creating custom web farm synchronization tasks to learn how to work with custom web farm tasks in the new API.

  • Large parts of the web farm API were made private or internal (not intended for public use).

  • The CMS.IO.Stream class declares a new CanSeek abstract property, which must be implemented in all derived classes.

  • When serializing CMS.Helpers.XmlData objects to string values using the GetData() or ToString() methods, the resulting XML now has all elements in alphabetical order and no longer converts element names to lower case. For example, XmlData is used in the MediaFileInfo.FileCustomData and UserSettingsInfo.UserCustomData fields.

  • Email marketing subscription/unsubscription API was replaced with the API provided in the ISubscriptionService interface.

  • The OpenEmailTracker.OnLog virtual method was removed. We recommend using the NewsletterEvents.SubscriberOpensEmail event to perform custom logging.

  • The LinkTracker.OnLog virtual method was removed. We recommend using the NewsletterEvents.SubsciberClicksTrackedLink event to perform custom logging.

  • The SetLanguageSetCampaignRebasePathSiteName and PermanentRedirect public properties in the CMS.URLRewritingEngine.UrlRewritingAction class were removed as they were no longer necessary.

  • When creating a new Workflow scope from code, you now need to include a value for the ScopeExcluded property.

  • The ToString method of DataQuery where conditions (WhereConditionBase objects) now returns String.Empty instead of null for empty conditions.

  • The DataQueryBase.NextPageAvailable property no longer throws an exception when accessed for a non-paged query. Null is returned instead.

  • The left node object binding in RelationshipInfo was moved from the “Other bindings” collection to the “Binding” collection.