2013-07-26 56 views
4

我使用初始化模塊訂閱到的DataFactory事件PublishingPage:EPiServer 7,比較頁面發佈時新的屬性值與以前的值?

DataFactory.Instance.PublishingPage += Instance_PublishingPage; 

void Instance_PublishingPage(object sender, PageEventArgs e) 
{ 
} 

參數PageEventArgs包含了新的一頁是beeing出版(e.Page) 有沒有辦法讓前面的保持這個頁面的版本,並將其屬性值與正在發佈的新版本進行比較?

回答

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. 
} 

注:這個答案並不需要本地化的帳戶。