Руководство разработчика по тестированию Optimize

Выпуск Optimizely CMS 13 знаменует собой значительный шаг вперед, охватывающий более компонуемую и безголовую архитектуру. Это открывает новые мощные возможности, но также вносит важные изменения в базовую структуру.

В этом руководстве представлено практическое руководство по обновлению стандартного начального сайта CMS 12 Alloy до предварительной версии CMS 13. Мы рассмотрим обновления зависимостей, миграцию кода для устаревших API и новую модель конфигурации приложений.

Шаг 1. Создайте базовый сайт CMS 12

Во-первых, давайте определим отправную точку. Создайте новый сайт CMS 12 Alloy, используя шаблоны Optimizely. Это гарантирует, что перед началом обновления у нас будет чистая и работающая установка.

# Create a new Alloy project
dotnet new epi-alloy-mvc -n alloy13preview

# Build and run the site
dotnet build
dotnet run

После запуска сайта зарегистрируйте новую учетную запись пользователя, чтобы вы могли войти в систему. Убедитесь, что сайт полностью работоспособен. Когда вы будете готовы, закройте приложение.

Шаг 2. Обновление зависимостей проекта

После установления базовых показателей следующим шагом будет обновление файла проекта и пакетов NuGet.

  1. Обновите целевую платформу: откройте файл .csproj и измените целевую платформу на

  2. Обновление пакетов NuGet: обновить все версии пакета EpiServer.* до 13.0.0-preview2.

  3. Добавить Аспнетидентити: CMS 13 отделяет управление идентификацией пользовательского интерфейса. Добавьте новую ссылку на пакет для EPiServer.CMS.UI.AspNetIdentity.

Шаг 3. Миграция кода и устранение устаревших API

CMS 13 проводит рефакторинг нескольких основных API. Компилятор теперь сообщит о серии предупреждений и ошибок, связанных с устаревшими членами. Давайте проработаем их.

Дружественный совет: Начиная миграцию, возьмите за привычку проверять предупреждения компилятора в вашей IDE или создавать выходные данные. Эти предупреждения — ваш путь к обнаружению каждого экземпляра устаревшего или устаревшего API в вашем конкретном проекте. Хотя в этом руководстве описаны общие изменения шаблона Alloy, в вашей кодовой базе могут быть и другие области, требующие внимания.

Используйте ContentReference и ContentLink.

Типы PageReference и PageData.PageLink устарели. Это изменение отражает более широкий сдвиг в сторону более общего подхода ко всему контенту. Исправление представляет собой простую замену вашего решения:

Read more:  Советы и ответы NYT Connections Sports Edition от 11 марта: Советы по решению Connections # 534

Замените SiteDefinition новой моделью приложения.

Концепция SiteDefinition заменена более гибкой. Модель приложения. Приложение связывает отправную точку в дереве контента с определенным режимом рендеринга (например, «В процессе» или «Безголовый») и именами хостов.

Чтобы решить эту проблему, вам необходимо внедрить IApplicationResolver в ваши контроллеры и службы, чтобы получить контекст текущего приложения (IApplication).

Вот пример рефакторинга StartPageController:

using alloy13preview.Models.Pages;
using alloy13preview.Models.ViewModels;
using EPiServer.Web;
using EPiServer.Web.Mvc;
using Microsoft.AspNetCore.Mvc;
using EPiServer.Applications;
using EPiServer.Shell.Security;
using EPiServer.Web.Routing;

namespace alloy13preview.Controllers;

public class StartPageController : PageControllerBase
{
  private readonly IApplicationResolver _applicationResolver;
  
  public StartPageController(IApplicationResolver applicationResolver)
  {
    _applicationResolver = applicationResolver;
  }

  public async Task Index(StartPage currentPage, CancellationToken cancellationToken)
  {
    var model = PageViewModel.Create(currentPage);
    var application = await _applicationResolver.GetByContextAsync(cancellationToken);

    var website = application as Website;
    
    if (website is not null && website.RoutingEntryPoint.CompareToIgnoreWorkID(currentPage.ContentLink))
    {
      // Connect the view models logotype property to the start page's to make it editable
      var editHints = ViewData.GetEditHints, StartPage>();
      editHints.AddConnection(m => m.Layout.Logotype, p => p.SiteLogotype);
      editHints.AddConnection(m => m.Layout.ProductPages, p => p.ProductPageLinks);
      editHints.AddConnection(m => m.Layout.CompanyInformationPages, p => p.CompanyInformationPageLinks);
      editHints.AddConnection(m => m.Layout.NewsPages, p => p.NewsPageLinks);
      editHints.AddConnection(m => m.Layout.CustomerZonePages, p => p.CustomerZonePageLinks);
    }

    return View(model);
  }
}

Вам нужно будет применить аналогичный шаблон к другим местам кода, ссылающимся на SiteDefinition.Current. Для SiteDefinition.Current.RootPage его можно заменить на ContentReference.RootPage.

Модернизация внедрения зависимостей

Расположение службы с использованием InitializationEngined.Locate устарело. Вместо этого используйте внедрение конструктора, чтобы получить экземпляр IServiceProvider.

  • До: context.Locate.Advanced.GetInstance()

  • После: внедрить IServiceProvider и вызвать serviceProvider.GetRequiredService.() В IInitializationModule вы можете получить к нему доступ через context.Services.

Другие небольшие изменения API

Шаг 4. Обновления конфигурации

Далее нам нужно внести несколько изменений в Startup.cs и appSetting.json.

  1. Включить обновление совместимости базы данных: в Startup.cs добавьте следующее, чтобы разрешить автоматическое обновление уровня совместимости базы данных.

    services.Configure(options =>
    {
        options.UpdateDatabaseCompatibilityLevel = true;
    });
  2. Настроить график контента: Content Graph включен по умолчанию в предварительной версии CMS 13 и не может быть отключен. Вероятно, это изменится в последующих выпусках. Вы должны добавить свои учетные данные в appSettings.json.

    "Optimizely": {
      "ContentGraph": {
        "GatewayAddress": "https://staging.cg.optimizely.com",
        "AllowSendingLog": "true",
        "SingleKey": "INSERT SINGLEKEY HERE",
        "AppKey": "INSERT APPKEY HERE",
        "Secret": "INSERT SECRET HERE"
      }
    }
  3. Установить группы посетителей: из-за известной проблемы в предварительной версии система меню не будет отображаться правильно, если не установлены группы посетителей. Добавьте это в Startup.cs

    services.AddVisitorGroups();

Шаг 5. Исправление ошибки 404 после обновления

После внесения всех изменений запустите приложение:

Read more:  Руководство для малого бизнеса по правилам отключения, достигнувшись в этом месяце

Вы заметите, что сайт возвращает 404 Не найден ошибка. Это ожидаемо. Перенесенная база данных по-прежнему имеет старую конфигурацию SiteDefinition, которая не соответствует новой модели приложения.

Выполните следующие действия, чтобы исправить это:

  1. Перейдите в интерфейс администратора CMS: https://localhost:5000/Optimizely/CMS.

  2. Перейти к Настройки > Приложения. Если страница не отображается, очистите кеш браузера и перезагрузите страницу. Вы увидите приложение «Headless» по умолчанию.

  3. Отредактируйте приложение и нажмите Удалить приложение.

  4. Нажмите Создать новое приложение.

  5. Отредактируйте только что созданное новое приложение «В процессе».

Ваш сайт Alloy теперь должен корректно отображаться во внешнем интерфейсе, а предварительный просмотр в режиме редактирования будет работать.

Заключение

Поздравляем! Вы успешно обновили свой сайт Alloy до CMS 13. Этот процесс подчеркивает ключевые архитектурные изменения в новой версии, в частности переход к составной модели приложения и модернизированным API. Теперь вы готовы изучить новые функции и возможности Optimizely CMS 13.

Важное примечание: шаги, описанные в этом руководстве, предназначены для разработчиков, желающих изучить предварительную версию CMS 13 с помощью шаблона Alloy. Это неполная предварительная версия, и эти инструкции не рекомендуется использовать в реальном проекте разработки и, тем более, на работающем производственном сайте. Мы расскажем больше по мере приближения к дате выпуска CMS 13.

23 января 2026 г.

Читайте также

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.