c# – EPiServer 7,在发布页面时将新属性值与先前的值进行比较?

我正在使用初始化模块订阅DataFactory事件PublishingPage:

DataFactory.Instance.PublishingPage += Instance_PublishingPage;

void Instance_PublishingPage(object sender, PageEventArgs e)
{
}

参数PageEventArgs包含发布的新页面(e.Page)
有没有办法获取此页面的先前版本并将其属性值与正在发布的新版本进行比较?

最佳答案 最近在EPiServer 8中解决了这个问题:

在发布页面发布之前发布的事件(在您的示例中),只需使用ContentLoader服务进行比较就可以正常工作. ContentLoader将自动获取已发布的版本.

if (e.Content != null && !ContentReference.IsNullOrEmpty(e.Content.ContentLink))
{
  var contentLoader = ServiceLocator.Current.GetInstance<IContentLoader>();
  var publishedVersionOfPage = contentLoader.Get<IContent>(e.Content.ContentLink);
}

注意:仅适用于已存在的页面,IE.新页面将为空
e-argument中的ContentLink(ContentReference.Empty).

至于发布页面后发生的PublishedPage事件.
您可以使用以下代码段来获取之前发布的内容
版本(如果有):

var cvr = ServiceLocator.Current.GetInstance<IContentVersionRepository>();
IEnumerable<ContentVersion> lastTwoVersions = cvr
  .List(page.ContentLink)
  .Where(p => p.Status == VersionStatus.PreviouslyPublished || p.Status == VersionStatus.Published)
  .OrderByDescending(p => p.Saved)
  .Take(2);

if (lastTwoVersions.Count() == 2) 
{
   // lastTwoVersions now contains the two latest version for comparison
   // Or the latter one vs the e.Content object.
}

注意:此答案不考虑本地化.

点赞