У меня есть список, содержащий папки и элементы.Папки относятся к определенному типу содержимого, основанному на папке, но со свойствами.
Папка может содержать подпапки и подпункты.Подпапка может содержать подпапки и так далее.Мне уже удалось получить все элементы и папки следующим образом:
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();
}
}
}
Проблема в этом решении заключается в том, что мне приходится отправлять новый запрос для каждой папки, которая становится неэффективной по мере роста списка.Есть ли способ получить весь список одним вызовом, не теряя структуру папок / элементов?
Спасибо, что прочитали это!
Редактировать: использование CAML не обязательно.Но есть забытое ограничение: я не могу пользоваться веб-сервисами из-за ограничений клиента.