我有一个包含文件夹和项目的列表。这些文件夹是基于文件夹的特定内容类型,但具有属性。如何获取共享点列表中的所有文件夹和项目?
文件夹可以包含子文件夹和子项目。子文件夹可以包含子子文件夹等。我已经设法利用这种方式,所有项目和文件夹:
void TraverseList(SPList list)
{
Trace.WriteLine("Traversing list: " + list.Title);
Trace.WriteLine("Base type: " + list.BaseType.ToString());
TraverseListFolder(list.RootFolder);
}
void TraverseListFolder(SPFolder folder)
{
SPQuery qry = new SPQuery();
qry.Folder = folder;
Trace.WriteLine("Foldername: " + folder.Name);
SPWeb web = null;
try
{
web = folder.ParentWeb;
SPListItemCollection ic = web.Lists[folder.ParentListId].GetItems(qry);
foreach (SPListItem subitem in ic)
{
SPFieldLookupValue temp = new SPFieldLookupValue(subitem["TargetPage"].ToString());
Trace.WriteLine("TargetPage: " + temp);
Trace.WriteLine("ItemName: " + subitem.Name);
if (subitem.Folder != null)
{
TraverseListFolder(subitem.Folder);
}
}
}
catch (Exception ex)
{
Trace.WriteLine(ex.Message);
throw;
}
finally
{
if (web != null)
{
web.Dispose();
}
}
}
在这个解决方案的问题是,我要送一个新的查询每个文件夹,这是越来越imperformant当名单还在不断增加。有没有办法通过一个调用来获取整个列表,而不会丢失文件夹/项目结构?
感谢您阅读本文!
编辑:这不是要求使用CAML。但是我忘记了一个限制:由于客户的限制,我无法使用网络服务。
这很简单:)非常感谢你! –