我想知道是否可以订购从SharePoint返回的列表项(使用客户端对象API),以便它们按层次排序,而不是按照它们的创建顺序排序。
这需要保持文件夹结构不变。例如,如果这是一个结构:
folder001
-folder001_sub001
--item001
--item002
-folder002_sub002
--folder002_sub002_sub001
---item003
--item004
-item005
将以相同的顺序或至少以这种方式返回(首先是项目,然后是文件夹):
folder001
-item005
-folder001_sub001
--item001
--item002
-folder002_sub002
--item004
--folder002_sub002_sub001
---item003
这可以通过CAML查询吗?默认是按照创建顺序(通过列表中的索引号)返回事物
提前谢谢!
答案 0 :(得分:1)
在这种情况下,我宁愿使用客户端对象模型而不是caml。你可以这样做(未经测试!):
void RecursiveListFolder(Folder folder, int indent = 0)
{
clientContext.Load(folder.Folders);
clientContext.ExecuteQuery();
foreach (Folder folder in folder.Folders)
{
Console.WriteLine(new string(' ', indent) + folder.Name);
RecursiveListFolder(folder, indent + 1);
}
clientContext.Load(folder.Files);
clientContext.ExecuteQuery();
foreach (File file in folder.Files)
{
Console.WriteLine(new string(' ', indent) + file.Name);
}
}
此方法将以这种方式使用:
string siteUrl = "http://MyServer/sites/MySiteCollection";
ClientContext clientContext = new ClientContext(siteUrl);
Web web = clientContext.Web;
clientContext.Load(web.Lists);
clientContext.ExecuteQuery();
List list = web.Lists["MyList"];
RecursiveListFolder(list.RootFolder);