SharePoint - объектная модель клиента - получение элементов подпапок - PullRequest
4 голосов
/ 19 февраля 2012

каждый 'listItem' содержит элементы, как их получить? Я пытаюсь некоторое время, но только провал,

помогите, спасибо

camlQuery из некоторых тестов и примеров из Интернета, не помогло (было много изменений)

            ClientContext clientContext =  new ClientContext("http://xxx.xxx.com");
            List list = clientContext.Web.Lists.GetById(new Guid("{F91A0F26-2826-4B3B-AF30-ED7DE4494C7B}"));
            clientContext.Load(list);

            clientContext.ExecuteQuery();
            CamlQuery camlQuery = new CamlQuery();
            camlQuery.ViewXml = @"<queryOptions><QueryOptions><ViewAttributes Scope='RecursiveAll'/><Folder></Folder></QueryOptions></queryOptions>";
            ListItemCollection listItems = list.GetItems(camlQuery);
            clientContext.Load(listItems);
            clientContext.ExecuteQuery();

            foreach (ListItem listItem in listItems)
            {
              each lisItem has children/items , how to get them?!

            }

Ответы [ 3 ]

10 голосов
/ 20 февраля 2012

Я нашел ответ, спасибо за помощников ... :) Items - это мой объект, который я создал. чтобы получить значение "folderServerRelativeUrl", вы можете получить его из (string)listItem ["FileRef"] при переходе по папкам сверху foreach

  public Items GetFolderItems(string folderServerRelativeUrl, List list, ClientContext clientContext)
        {
            try
            {
                var result = new Items();  <-- my class
                var query = new CamlQuery();

                query.FolderServerRelativeUrl = folderServerRelativeUrl;

                query.ViewXml = "<View Scope=\"RecursiveAll\"> " +
                    "<Query>" +
                    "<Where>" +
                                "<Eq>" +
                                    "<FieldRef Name=\"FileDirRef\" />" +
                                    "<Value Type=\"Text\">" + folderServerRelativeUrl + "</Value>" +
                                 "</Eq>" +
                    "</Where>" +
                    "</Query>" +
                    "</View>";

                var folderItems = list.GetItems(query);
                clientContext.Load(folderItems);
                clientContext.ExecuteQuery();

                foreach (ListItem item in folderItems)
                {
                    // item[ "..." ];
                }

                return result;
            }
            catch (Exception)
            {
                return null;
            }
        }
3 голосов
/ 22 июля 2015

Другой способ получить все элементы списка папок:

camlQuery.ViewXml = @"<View Scope='RecursiveAll'>
                         <Query>
                            <Where>
                                <Eq>
                                   <FieldRef Name='FSObjType' />
                                   <Value Type='int'>0</Value>
                                 </Eq>
                             </Where>
                          </Query>
                       </View>";
1 голос
/ 29 января 2013

Спасибо за этот отличный ответ.Просто чтобы вы знали, что переменная folderServerRelativeUrl должна быть из корневого URL-адреса (кроме http://server).У меня был список «Продавцы» внутри документ-центра.То есть siteUrl равен http://server/documentcenter, а имя списка - Vendors.Мне пришлось передать "/ documentcenter / Vendors / ..." как мой folderServerRelativeUrl.Но это нормально.Я все еще благодарен вам.

Ребята из переполнения стека, это так грустно, что я не смог добавить комментарий под его ответом.Я должен был представить этот комментарий как ответ.Помогите мне, если это можно сделать по-другому.Я не хочу редактировать его ответ.

~ Шармин

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...