Я пытаюсь написать запрос CAML, который выполняется против определенного SPList, привязанный к определенной папке, рекурсивный с этой точки, и возвращает все ListItems (которые соответствуют критериям) и Folders.
Здесь код для запроса, который, похоже, должен работать (отформатирован для удобочитаемости):
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
, я получаю пустой результат.