Невозможно получить все папки и файлы (на всех уровнях) внутри главной папки, используя CAML - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть следующий CAML-запрос внутри моего удаленного приемника событий sharepoint, в котором я пытаюсь получить все файлы и папки, которые прямо и косвенно добавляются в папку с именем FolderA: -

camlQuery6.ViewXml = "<View Scope=\"RecursiveAll\"><Query><Where><Eq><FieldRef Name=\"FileDirRef\" /><Value Type=\"Text\">" + context.Web.ServerRelativeUrl + "/ArchDocs/FolderA"</Value></Eq></Where></Query></View>";
ListItemCollection collListItem6 = context.Web.GetList(context.Web.ServerRelativeUrl + "/ArchDocs").GetItems(camlQuery6);
context.Load(collListItem6, items => items.Include(
      item => item.Id,
      item=>item["FileDirRef"],
      item => item["Title"],
      item => item["DealStage"]));

the выше CAML вернет только основную папку в / sites / projects / ArchDocs / FolderA, но не вернет ни одну из подпапок и файлов .. поэтому любой может посоветовать, как мне нужно изменить CAML, или CAML не поддерживает это

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

Запрос только возвращает элементы непосредственно в этой папке, потому что ваш CAML настроен на возврат только элементов, где FileDirRef (или путь к папке) равен /sites/projects/ArchDocs/FolderA, все, что находится в подпапке, будет иметь другой FileDirRef, например /sites/projects/ArchDocs/FolderA/SubFolder1, который не будет равным указанному вами пути. То, что вы хотите сделать, это вместо элемента оператора <Eq>, вы хотите использовать <BeginsWith>.

Примечание , у вас также появляется синтаксическая ошибка при конкатенации строк context.Web.ServerRelativeUrl + "/ArchDocs/FolderA"</Value>

Попробуйте:

camlQuery6.ViewXml = "<View Scope=\"RecursiveAll\"><Query><Where><BeginsWith><FieldRef Name=\"FileDirRef\" /><Value Type=\"Text\">" + context.Web.ServerRelativeUrl + "/ArchDocs/FolderA" + "</Value></BeginsWith></Where></Query></View>";
ListItemCollection collListItem6 = context.Web.GetList(context.Web.ServerRelativeUrl + "/ArchDocs").GetItems(camlQuery6);
context.Load(collListItem6, items => items.Include(
      item => item.Id,
      item=>item["FileDirRef"],
      item => item["Title"],
      item => item["DealStage"]));
0 голосов
/ 27 февраля 2020

Используйте приведенное ниже решение:

var _List = context.Web.Lists.GetByTitle("MyDoc3");
                CamlQuery camlQuery = new CamlQuery();
                camlQuery.ViewXml = @"<View Scope='RecursiveAll'>
                                     <Query>
                                     </Query>
                                 </View>";
                Folder folder = context.Web.GetFolderByServerRelativeUrl("/sites/lee/MyDoc3/ParentFolder");
                context.Load(folder);
                context.ExecuteQuery();
                camlQuery.FolderServerRelativeUrl = folder.ServerRelativeUrl;
                ListItemCollection listItems = _List.GetItems(camlQuery);
                context.Load(listItems, items => items.Include(
                      item => item.Id,
                      item => item["FileDirRef"],
                      item => item["FileRef"],
                      item => item["Title"]));

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