如何使用CSOM
從特定的SharePoint library
獲取所有子文件夾的列表?當用戶點擊「選擇文件夾」時,我想提供與SharePoint中相同的功能。使用CSOM從特定的SharePoint 2013庫獲取所有子文件夾
我發現這篇文章CAML and the Client Object Model,我認爲是相當不錯的,但我發現,當我嘗試了以下錯誤:
using (ClientContext clientContext = new ClientContext(this.SpSite))
{
var web = clientContext.Web;
var list = web.Lists.GetByTitle('Contracts');
var query = new CamlQuery();
query.FolderServerRelativeUrl = "/Contracts";
query.ViewXml = "<View Scope='RecursiveAll'>"
+ "<Query>"
+ " <Where>"
+ " <Eq><FieldRef Name='FSObjType' /><Value Type='Integer'>1</Value></Eq>"
+ " </Where>"
+ "</Query>"
+ "</View>";
var folderItems = list.GetItems(query);
clientContext.Load(folderItems);
clientContext.ExecuteQuery();
foreach (ListItem item in folderItems)
{
// item[ "..." ];
}
}
我也嘗試了不同的CALM查詢但無濟於事:
query.ViewXml = "<View Scope=\"RecursiveAll\"> " +
"<Query>" +
"<Where>" +
"<Eq>" +
"<FieldRef Name=\"FileDirRef\" />" +
"<Value Type=\"Text\">" + title + "</Value>" +
"</Eq>" +
"</Where>" +
"</Query>" +
"</View>";
任何幫助,將不勝感激。
謝謝。
UPDATE-1:
我發現問上StackExchange
一個問題How to traverse SharePoint Library in Client Object Model?這是非常接近我所需要的,但仍然有它幾個問題:
它使用遞歸這意味着如果你有很多關卡,它最終會產生很多請求,並且可能會顯示非常慢。
返回的數據沒有排序。基於我提供的快照,而不是返回01,02,03等等......它以隨機順序返回值。
我希望,我將能夠使一個單一的電話,得到的所有文件夾和子文件夾列表,但我想這也可能最終耗費時間。
我想我有兩個選擇:
棒的遞歸方法,並找出如何理清數據,但我還需要弄清楚後者。
僅在最高級別請求文件夾,並且只有在展開文件夾時才請求子文件夾。理想情況下,如果使用這種方法,很高興知道文件夾是否有任何子文件夾,這意味着也必須弄清楚。
到達那裏但尚未完成。
所以,如果任何人都可以提供給我額外的反饋,片段,任何事情,請做。
謝謝。
感謝您抽出寶貴的時間來發布此。以後我會再次看到這一點,因爲按需加載肯定是一種方式,因爲我同意我使用的方法可能會在圖書館中存在大量文件夾的情況下創建瓶頸,但我只是在構建這是目前用於示範目的的原型,所以現在就可以做到這一點。 – Thierry