Episerver - тип страницы становится недоступным для редактирования при перехвате события WebsiteContent
Я подключаюсь к событию Опубликованный контент в Episerver, поэтому, когда пользователь публикует определенный тип страницы, выполняется некоторая логика (создание PDF), и строковое значение сохраняется в одном из свойств (путь к PDF).
Это работает, PDF создается и путь к PDF также сохраняется.
Однако проблема, с которой я столкнулся, заключается в том, что после завершения публикации все свойства становятся доступными только для чтения, мне нужно щелкнуть другой узел, а затем снова щелкнуть этот узел, прежде чем я смогу его редактировать. - Это нормально, или это как-то связано с тем, как я делаю сохранение?
Это мой код:
public void Initialize(InitializationEngine context)
{
var events = ServiceLocator.Current.GetInstance<IContentEvents>();
events.PublishedContent += EventsPublishedContent;
}
private void EventsPublishedContent(object sender, ContentEventArgs e)
{
if (e.Content is myType)
{
var currentPage = e.Content as RatePlanPageType;
var pdfPath = businessLogic.CreatePdf(e.content);
var clone = currentPage.CreateWritableClone();
clone.Property["PdfFiles"].Value = pdfPath;
var contentRepository = ServiceLocator.Current.GetInstance<IContentRepository>();
contentRepository.Save(clone, SaveAction.Save);
}
}
и вот как все свойства выглядят в пользовательском интерфейсе после сохранения.
Если я щелкну другой узел в дереве, а затем снова щелкните этот узел, он вернется к нормальному состоянию и все данные будут сохранены правильно.
2 ответа
Я не понял, что меня зацепили неправильным методом, изменил
events.PublishedContent =
в
events.PublishingContent =
и это работает отлично.
Объяснение, которое я получил от мира Episerver:
Ваш код публикует новую версию контента (проверьте гаджет версий, чтобы подтвердить это). Это означает, что вы больше не смотрите на основной черновик, поэтому пользовательский интерфейс делает его доступным только для чтения. Вы можете подключиться к событию публикации, которое должно остановить это поведение или не публиковать новую версию контента в вашем методе Save.
Если вы хотите сохранить клонированные данные о свойствах в событии Опубликовано. Затем вы должны применить SaveAction.Patch вместо SaveAction.Save.
contentRepository.Save(clone, SaveAction.Patch);