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. 新しいページには、e 引数内に空の 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 に答える