4

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

DataFactory.Instance.PublishingPage += Instance_PublishingPage;

void Instance_PublishingPage(object sender, PageEventArgs e)
{
}

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

4

1 回答 1

2

最近在 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。新页面在电子参数中将有一个空的 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.
}

注意:此答案未考虑本地化。

于 2016-02-01T15:15:35.530 回答