2009-12-09 37 views
1

我剛剛遇到了SharePoint中似乎非常煩人的「功能」(可能是設計,但範圍可能超出此問題) 。在Sharepoint中爲文件版本獲取「Correct」創建的字段

我正在幫助開發一個應用程序,該應用程序檢索存儲在SharePoint上的特定文件的文件及其版本歷史記錄。這些信息上傳到數據倉庫,我們需要捕獲的關鍵字段之一是文件版本最初上載(即創建)到SharePoint的時間。

最初,這似乎是相當簡單的,使用(Web服務的SharePoint)版本服務(versions.asmx),我們稱之爲:

SPVersion.GetVersions(fullpath); 

它返回我們類似於下面的XML結果(包括一個名爲場「創建」):

 
<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
    <GetVersionsResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/"> 
     <GetVersionsResult> 
     <results xmlns="http://schemas.microsoft.com/sharepoint/soap/"> 
      <list id="{guid}"/> 
      <versioning enabled="1"/> 
      <settings url="http://SITE/_layouts/LstSetng.aspx?List={guid}"/> 
      <result version="@6.0" url="http://SITE/PATH/FILENAME" created="12/8/2009 11:58 AM" createdBy="DOMAIN\USER" size="149504" comments=""/> 
      <result version="1.0" url="http://SITE/_vti_history/id/PATH/FILENAME" created="12/7/2009 4:10 PM" createdBy="DOMAIN\USER" size="148992" comments=""/> 
      <result version="2.0" url="http://SITE/_vti_history/id/PATH/FILENAME" created="12/8/2009 11:32 AM" createdBy="DOMAIN\USER" size="149504" comments=""/> 
      <result version="3.0" url="http://SITE/_vti_history/id/PATH/FILENAME" created="12/8/2009 11:45 AM" createdBy="DOMAIN\USER" size="149504" comments=""/> 
      <result version="4.0" url="http://SITE/_vti_history/id/PATH/FILENAME" created="12/8/2009 11:49 AM" createdBy="DOMAIN\USER" size="149504" comments=""/> 
      <result version="5.0" url="http://SITE/_vti_history/id/PATH/FILENAME" created="12/8/2009 11:58 AM" createdBy="DOMAIN\USER" size="149504" comments=""/> 
     </results> 
     </GetVersionsResult> 
    </GetVersionsResponse> 
    </soap:Body> 
</soap:Envelope> 


一切都很好,直到你在創建現場仔細觀察 - 版本5 & 6具有完全相同的創建日期。進一步的調查顯示,該文檔的所有版本都具有創建的日期時間,該日期時間與下一版本文檔的實際創建日期時間相匹配。 I.E.當我檢查SharePoint並查看版本歷史記錄時,我可以看到版本2實際上是在16:10處創建的,此時版本1顯示爲上述時間。

我假設創建的字段實際上不是創建的字段,但它是一個修改後的字段,它考慮到文件被修改並做成「舊」版本的時間。

有沒有人遇到過這個問題,並找到一種可靠的方法來讓版本服務返回創建文件的實際時間,或者 - 使用上述信息 - 是否有可靠的機制來獲取文件上的時間?

請注意,我們不能在此項目中使用SharePoint API/DLL。

感謝 克里斯

回答

0

如果你沒有訪問API,就不會得到最小版本的創建領域滿足您的規則?在你的情況下,版本1.0。

只需在您的消費者中記錄您爲什麼需要這樣做,以及設計行爲如何決定如何獲得此價值。

您還可以檢查訪問實際文檔/項目是否會給您正確的創建日期,而不是訴諸歷史系統。

+0

我正在考慮類似的東西,然後配對項目關閉前代產品獲得的價值 - 但這似乎是一個不合理的黑客。如果需要的話,我可以做到 - 但肯定是更好的方法,想要知道何時創建版本並不罕見。 – Chris 2009-12-09 16:31:31

+0

在我的經驗,該版本系統出問題在許多方面,例如,如果您重命名文件的所有舊版本得到新的擴展,即:你以一個Report.docx,然後用戶了幾個版本後發現excel的奇蹟並在文件(此處爲自定義系統)上載Report.xslx,現在所有以前的版本都是.xslx,即使內容是docx文件。 – 2009-12-09 17:04:22

+0

哈哈,真的嗎?哦親愛的....是的,你的經驗聽起來像我認爲我的想法路線圖...我正在探索一個選項使用lists.GetVersionCollection來獲得我想要的信息,但已經有一個不好的感覺。如果我碰壁,會給你的方法一個嘗試 – Chris 2009-12-09 17:39:39

1

這是一箇舊帖子,但覺得額外的評論將有助於未來的觀點。

您可以使用文檔庫上的lists.asmx web services/GetListItems方法來檢索第一個版本的原始創建日期。

將結果與來自GetVersions響應的結果進行比較,並獲得關於文件/記錄所需的全部信息。

由versions.asmx/GetVersions響應顯示的創建日期是版本歷史列表中的版本的創建日期而不是源列表。版本歷史列表與源列表不同。

此外,您還可以拉動版本歷史上自定義列表使用versions.asmx/GetVersions方法爲好。你不僅僅限於文件。

相關問題