CAML-запрос для получения ListItems в иерархическом порядке - PullRequest
1 голос
/ 10 сентября 2011

Мне было интересно, можно ли упорядочить списочные элементы, возвращающиеся из 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?По умолчанию все предметы возвращаются в порядке их создания (по номеру индекса в списке)

Заранее спасибо!

1 Ответ

1 голос
/ 10 сентября 2011

Я бы предпочел использовать объектную модель клиента вместо 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...