2010-02-26 42 views
9

SPFileVersionCollection和SPListItemVersionCollection版本控制似乎與我不一致。不一致對我來說不是問題,但排序順序是。SPFileVersionCollection - 爲什麼版本按混合順序排序?

SPListItemVersionCollection

我能理解listItems中的版本,因爲它們是存儲在降序排列:

SPContext.Current.ListItem.Versions.Count -> 5 
SPContext.Current.ListItem.Versions[0].VersionId -> 1026 (2.2 latest version) 
SPContext.Current.ListItem.Versions[1].VersionId -> 1025 (2.1) 
SPContext.Current.ListItem.Versions[2].VersionId -> 1024 (2.0) 
...        [4].VersionId ->  (oldest version) 

SPFileVersionCollection

但是我不明白的版本號是如何保存的文檔庫item:

SPContext.Current.ListItem.File.Versions.Count -> 4 
SPContext.Current.ListItem.File.Versions[0].ID -> 512 (1.0 oldest one) 
SPContext.Current.ListItem.File.Versions[1].ID -> 513 (1.1) 
SPContext.Current.ListItem.File.Versions[2].ID -> 1025 (2.1 latest version) 
SPContext.Current.ListItem.File.Versions[3].ID -> 1024 (2.0 (EDIT: IsCurrentVersion = True)) 

他們既不是升序,也不是降序,而是混合。

是否有任何理由 SharePoint團隊決定存儲這樣的SPFile版本?他們是否期望我編寫自己的方法來獲取最新版本,或者是否有內置版本?

注意:讓我指出SPListItem.File文檔庫項目不爲空。

回答

6

以爲我會輸出約SPFileVersionCollection在控制檯應用程序的一些信息和事實證明:

  • 最後指數將保持電流(不 起草,但出版)版本 (SPFileVersion.IsCurrentVersion 屬性爲TRUE此)
  • 0索引保持最舊版本
  • (最後一個索引 - 1)具有最後起草版本(例如2.7)和(最後一個索引 - 2)成立2.6等
  • SPFile.Versions.Count = 0如果您剛剛上傳全新文檔(次版本,在發佈之前)。
  • 如果您繼續上傳新文檔版本並且尚未發佈新文檔版本,那麼它們將添加到SPFileVersionCollection,但是直到您發佈一個IsCurrentVersion屬性纔會設置爲true。

啊,我有一個錯誤的假設,最後一個文檔草案版本應該算作最新的一個。當然,最後一個PUBLISHED版本是最新版本!

不過,要小心不一致性。

+0

你最後的兩點似乎與我矛盾 - 如果'Count'爲0,直到一個被髮布,它們如何被添加到'SPFileVersionCollection'? – Nacht 2013-07-24 00:05:20

+0

@Nacht感謝您的評論。很長一段時間,因爲這已經過測試,懶得去SharePoint確保,但[這個答案](http://social.msdn.microsoft.com/Forums/sharepoint/en-US/24486a73-bfe0-4ed9- bf6f-32b416cbaf16 /什麼是關係之間的spfileversions和splistitemversions)可以說明一點:「'SPListItem.Versions.Count'總是比'SPFile.Versions.Count'多1,原因是' SPFile'認爲最新版本是當前版本,因此不包括在它的版本集合中「 – 2013-07-25 07:26:10