Как получить все папки и элементы из списка sharepoint? - PullRequest
4 голосов
/ 31 октября 2011

У меня есть список, содержащий папки и элементы.Папки относятся к определенному типу содержимого, основанному на папке, но со свойствами.

Папка может содержать подпапки и подпункты.Подпапка может содержать подпапки и так далее.Мне уже удалось получить все элементы и папки следующим образом:

    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 не обязательно.Но есть забытое ограничение: я не могу пользоваться веб-сервисами из-за ограничений клиента.

Ответы [ 2 ]

6 голосов
/ 31 октября 2011
0 голосов
/ 25 сентября 2012
query.ViewAttributes="Scope='RecursiveAll'";
...