2013-06-05 73 views
1

我想使用GetFolderByServerRelativeUrl函數檢索文件夾的「修改日期」和「創建日期」,我該如何做?Sharepoint客戶端GetFolderByServerRelativeUrl文件夾修改日期

我只能得到relativeUrl和文件夾名稱。下面是我做的檢索文件夾。請幫忙。

FolderCollection folderCollection = rootweb.GetFolderByServerRelativeUrl("/Shared Documents/test2").Folders; 
spClientContext.Load(folderCollection); 

foreach (Folder folder in folderCollection) 
     { 

     } 
+1

嘗試尋找在['ListItemAllFields'(HTTP:// 「Folder」對象上的msdn.microsoft.com/en-us/library/microsoft.sharepoint.client.folder.listitemallfields.aspx)屬性。我對客戶端對象模型不是很熟悉,所以你可能不得不做另一個'Load'來獲取它,但它可能包含你之後的字段。 – Rawling

+0

@Rawling謝謝你的回覆。我正在使用GetFolderByServerRelativeUrl傳遞給我的文件夾而不是ListItem/List。我無法在FolderCollection中找到ListItemAllFields。任何想法可能在哪裏? –

+0

我已經把代碼放在一起來向你展示我的意思。 – Rawling

回答

0

我不認爲有任何直接的方式來獲取文件夾的修改後的數據。但是,您可以先獲取文件夾相關項目,然後獲取項目的修改數據。

但您仍然無法使用JavaScript Object Model獲取與文件夾相關的項目。您可以嘗試通過caml query獲取內容類型爲文件夾的項目,然後獲取相關文件的服務器相對url等於文件夾的服務器相對url的項目,然後您可以從項目中獲取詳細信息。

var folder = rootweb.GetFolderByServerRelativeUrl("/Shared Documents/test2"); 

var query = new SP.CamlQuery(); 
query.set_folderServerRelativeUrl(「/Shared Documents」); 
var items = list.getItems(query); 
context.load(items, 「Include(Title, FileSystemObjectType, File)」); 
context.executeQueryAsync(function(){ 
    var itemEnum = items.getEnumerator(); 
    while(itemEnum.moveNext()){ 
     var item = itemEnum.get_current(); 
     if(item.get_fileSystemObjectType()==」1」 && item.get_file().get_serverRelativeUrl()==」Shared Documents/test2」){ 
    //do something to get the modified data 
} 
} 
}, function(){}) 
+0

謝謝你的回覆。對不起,我從下往上閱讀這篇文章。我想我也需要詢問有關組件的事情。我只是添加了Microsoft.SharePoint和Microsoft.SharePoint.Client.Runtime,但我仍然沒有在我的VS 2010中顯示「set_folderServerRelativeUrl」方法。 –

4

通過檢索和訪問您的Folder S的ListItemAllFields屬性,您可以訪問創建和修改日期如下:

using (ClientContext spClientContext = new ClientContext("http://whatever")) 
{ 
    var rootweb = spClientContext.Web; 

    FolderCollection folderCollection = 
     rootweb.GetFolderByServerRelativeUrl("/Shared Documents/test2").Folders; 

    // Don't just load the folder collection, but the property on each folder too 
    spClientContext.Load(folderCollection, fs => fs.Include(f => f.ListItemAllFields)); 

    // Actually fetch the data 
    spClientContext.ExecuteQuery(); 

    foreach (Folder folder in folderCollection) 
    { 
     // This property is now populated 
     var item = folder.ListItemAllFields; 

     // This is where the dates you want are stored 
     var created = (DateTime)item["Created"]; 
     var modified = (DateTime)item["Modified"]; 
    } 
} 
+0

感謝您的幫助,對於遲到的回覆感到抱歉。你介意告訴我除了Microsoft.Sharepoint.Client之外還有其他正在使用的程序集嗎?
我正在使用VS 2010中的Vista客戶端VM將所有這些東西學習到遠程服務器。而VS保持提示沒有ListItemAllFields和方法的擴展。我也得到了「fs.Include(f => f.ListItemAllFields));」== [不能將lambda表達式轉換爲類型'system.linq.expressions.expression

+0

@tangfire我也有'Microsoft.SharePoint.Client.Runtime'的引用;添加這個幫助嗎? – Rawling

+0

沒有。我添加了參考,但我仍然無法獲得該方法。我的Microsoft.SharePoint.Client.dll和Microsoft.SharePoint.Client.Runtime.dll位於「C:\ Program Files \ Microsoft Visual Studio 10.0 \ Visual Studio Tools for Office \ PIA \ Office12 \ Microsoft.SharePoint.Client.dll 」。我是否指向正確的文件夾? –

相關問題