Это третья статья в серии, в которой я использую шаблон Alloy в качестве справочного материала для ознакомления с каждым предварительным просмотром CMS 13. первый пост охватывает обновление CMS 12 до Preview 2, а также второй рассмотрел ключевые изменения в предварительной версии 3. Если вы следите за текстом, продолжайте с того места, на котором мы остановились.
Превью 4 вышло. Удалить пакет достаточно просто, но есть изменение API, связанное с тем, как вы разрешаете стартовую страницу, которое будет проходить через ваш код. Вот что нужно изменить и о чем стоит знать.
Шаг 1. Обновите пакеты
Увеличьте ссылки на ваши пакеты с предварительного просмотра 3 до предварительного просмотра 4:
Известная проблема: обновление схемы базы данных со старых версий CMS 12
Если вы обновляетесь непосредственно со старой версии CMS 12 (например, 12.34.1 или более ранней) до предварительной версии CMS 13, а не от предварительной версии3 (что предполагается в этой статье), миграция схемы базы данных может завершиться неудачно с ошибкой, например:
Column names in each table must be unique. Column name 'Failed' in table 'dbo.tblNotificationMessage' is specified more than once.
Это происходит потому, что определенные столбцы были добавлены в более поздних выпусках CMS 12, а сценарии миграции CMS 13 не проверяют, существуют ли они, прежде чем пытаться их добавить.
Обходной путь: сначала обновите CMS 12 до последней версии, чтобы схема базы данных была полностью актуальной, а затем обновите ее до предварительной версии CMS 13. Это гарантирует, что все изменения промежуточной схемы будут применены до запуска миграции CMS 13.
Шаг 2. Решение проблемы со стартовой страницей
В предварительной версии 3 шаблон Alloy разрешал стартовую страницу путем приведения к веб-сайту и доступа к RoutingEntryPoint. В предварительной версии 4 самый простой подход — напрямую использовать ContentReference.StartPage — в большинстве случаев нет необходимости использовать IApplicationResolver.
До (превью 3)
var website = _applicationResolver.GetByContext() as Website;
var startPageContentLink = website?.RoutingEntryPoint;
После (превью 4)
var startPageContentLink = ContentReference.StartPage;
В шаблоне Alloy это упростило работу с несколькими файлами с помощью ContentReference.StartPage.
– PageViewContextFactory.cs — СоздатьLayoutModel
– ContentLocator.cs — Получитьконтактные страницы
– Предварительный просмотрконтроллер.cs — действие Индекс
– Стартпажеконтроллер.cs — действие Индекс
– Хлебные крошки.cshtml и Заголовок.cshtml — то же изменение
Если вам нужен больший контроль, в качестве альтернативы по-прежнему доступен IRoutableApplication со свойством EntryPoint.
Миграция SiteDefinition продолжает совершенствоваться. Проблемы с подготовкой приложений по умолчанию и разрешением имен хостов между режимами предварительного просмотра и просмотра из более ранних предварительных версий были устранены.
Шаг 3. Интеграция DAM (необязательно)
В предварительной версии 4 добавлен новый пакет для интеграции Optimizely DAM. Важно отметить, что, хотя DAM является фундаментальной частью CMS 13, его можно использовать и без него. CMS по-прежнему может хранить ресурсы в традиционном смысле.
Подобно CMS 12, конфигурация DAM обрабатывается с использованием параметров, напрямую требующих создания приложения в CMP, из которого можно получить учетные данные для настройки в CMS. Вам также понадобится идентификатор единого входа, который можно найти в разделе НастройкиОрганизацияОсновные в ЧМП.
Интеграция DAM больше не взаимодействует напрямую с CMP REST API. Вместо этого он построен на внешних источниках, а это означает, что ресурсы DAM необходимо индексировать в экземпляре Optimizely Graph, подключенном к вашей CMS. Поэтому, прежде чем подключать приведенный ниже код, убедитесь, что у вас настроен Optimizely Graph, а затем обратитесь в службу поддержки Optimizely, чтобы подключить DAM к вашему экземпляру Graph. Шаги по подключению — выбор экземпляра DAM, активация типов активов — следуют тому же процессу, что и CMS SaaS, и описаны в Встроенное руководство по переходу от DAM к CMS. Обновленная документация, относящаяся к CMS 13, будет доступна после выпуска. Как только это будет сделано, Content Manager можно будет использовать для обнаружения и выбора ресурсов DAM непосредственно из пользовательского интерфейса редактирования.
Добавьте пакет:
Зарегистрируйте пользовательский интерфейс DAM в Startup.cs:
services.AddDamUI();
Добавьте пространство имен помощников HTML DAM в Views/_ViewImports.cshtml:
@using EPiServer.Cms.DamIntegration.UI.Helpers
Это дает вам доступ к таким помощникам, как RenderTagWithMetadata(…) для рендеринга ресурсов DAM. Обратите внимание, что помощник тега эпи-свойства, который вы уже используете, взят из EPiServer.Cms.AspNetCore.TagHelpers, который уже должен быть зарегистрирован в вашем _ViewImports.cshtml через @addTagHelper.
Затем настройте свои учетные данные CMP (обратите внимание, что они имеют значения по умолчанию, включенные здесь для прозрачности) в appsettings.json:
"Optimizely": {
"Cms": {
"DamUI": {
"Endpoint": "https://cmp.optimizely.com",
"SsoId": "",
"NavigationUrl": "https://cmp.optimizely.com/cloud/library"
}
},
"Cmp": {
"Client": {
"TokenUrl": "https://accounts.cmp.optimizely.com/o/oauth2/v1/token",
"ApiUrl": "https://api.cmp.optimizely.com/v3/",
"ClientId": "",
"ClientSecret": ""
}
}
}
Средство выбора DAM теперь также поддерживает множественный выбор, что является хорошим улучшением для редакторов, работающих с большим количеством медиафайлов.
Переход с интеграции CMS 12 DAM
Для общедоступной версии CMS 13 будет доступен автономный пакет миграции, который преобразует интеграцию DAM в стиле CMS 12 в новую. Этот пакет будет обрабатывать миграцию существующих ссылок на активы DAM, чтобы они работали с новым пакетом EPiServer.Cms.DamIntegration.UI.
Первая версия пакета миграции будет поддерживать:
– Свойства ContentReference
– IList
Поддержка дополнительных типов свойств будет добавлена в будущих выпусках.
Использование ресурсов DAM в вашем контенте
Чтобы использовать ресурсы DAM на странице, добавьте свойство ContentReference с подсказкой UIHint.Image:
using EPiServer.Web;
using System.ComponentModel.DataAnnotations;
public class DamExamplePage : StandardPage
{
[Display(GroupName = Globals.GroupNames.Content)]
[UIHint(UIHint.Image)]
public virtual ContentReference Image { get; set; }
}
В представлении визуализируйте его с помощью вспомогательного тега epi-property — тот же шаблон, что и любое другое свойство CMS:
![]()
Шаг 4. Аудитории (необязательно)
Аудитории представляют собой отдельный пакет в CMS 13. Если вы использовали Services.AddVisitorGroups() в предварительной версии 3, вам необходимо добавить новый пакет NuGet и обновить регистрацию службы.
Добавьте пакет:
Затем обновите Startup.cs — старый вызов AddVisitorGroups() заменяется двумя отдельными регистрациями:
using EPiServer.Cms.UI.VisitorGroups;
services.AddVisitorGroupsMvc().AddVisitorGroupsUI();
Также было исправлено несколько ошибок, связанных с аудиторией: ошибка «политика не найдена», критерии географического местоположения работают, а расположение контекстного меню для персонализированных групп исправлено.
Что еще нового в предварительной версии 4
Несколько вещей, о которых стоит знать помимо этапов обновления:
Граф .NET SDK
Появился новый .NET SDK для Optimizely Graph с гибким API, охватывающим фасеты, кэширование, аутентификацию, отслеживание и сопоставление полей объекта с графиком. В ContentGraph.CMS также были добавлены точки расширения, чтобы вы могли подключиться к конвейеру индексирования.
Улучшенная миграция из SiteDefinition
Улучшен переход от SiteDefinition к модели приложения. Создание незавершенных веб-сайтов с помощью пользовательского интерфейса настроек снова работает, а типизированные типы контента теперь отображаются правильно при выборе стартовой страницы приложения.
Полный список изменений можно найти в официальных примечаниях к выпуску.
20 марта 2026 г.
Ещё по этой теме

