Я пытаюсь написать CAML-запрос, который выполняется к определенному SPList, ограничивается определенной папкой, рекурсивен с этой точки и возвращает все ListItems (которые соответствуют критерию) и папки.
Вот код запроса, который, похоже, должен работать (отформатирован для удобства чтения):
SPQuery query = new SPQuery();
query.Query = "
<Where>
<Or>
<Contains>
<FieldRef Name=\"FileRef\" />
<Value Type=\"Text\">foo</Value>
</Contains>
<Eq>
<FieldRef Name=\"FSObjType\" />
<Value Type=\"Lookup\">1</Value>
</Eq>
</Or>
</Where>";
query.ViewFields = "
<FieldRef Name=\"CustomField1\" Nullable=\"TRUE\" />
<FieldRef Name=\"CustomField2\" Nullable=\"TRUE\" />
<FieldRef Name=\"CustomField3\" Nullable=\"TRUE\" />
";
query.RowLimit = 500;
query.ViewAttributes = "Scope=\"RecursiveAll\"";
query.Folder = startingFolder;
DataTable dt = myList.GetItems(query).GetDataTable();
Итак - это возвращает только ListItems - без папок.
Если я удаляю другие условия из запроса, оставляя только FSObjType=1
, я получаю исключение COM «Не удается выполнить это действие. Пожалуйста, попробуйте еще раз».
Если я затем удалю ViewFields, оставив только Scope=RecursiveAll
и FSObjType=1
, я получу пустой набор результатов обратно.