Próbuję napisać kwerendę CAML, która wykonuje wobec określonego SPList, zakres do określonego folderu, rekursywne od tego punktu i zwraca wszystkie ListItems (które spełniają kryteria) i foldery .Kwerenda CAML, która zawiera foldery w zestawie wyników
Oto kod dla zapytania, które wydaje się, że powinna pracować (sformatowany dla czytelności):
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();
Tak - to tylko zwraca ListItems - żadnych folderów.
Jeśli usunę inne warunki z kwerendy, tylko pozostawiając FSObjType=1
, otrzymuję wyjątek COM "Nie można wykonać tej czynności. Proszę spróbuj ponownie."
Jeśli następnie usunę ViewFields, pozostawiając tylko Scope=RecursiveAll
i FSObjType=1
, otrzymam pusty zestaw wyników.
Czy kiedykolwiek rozwiązałeś to? Mam ten sam problem i jeśli nie ma rozwiązania, będę musiał napisać funkcję rekursywną, aby to zrobić. – jeremcc
@codeflunky niestety nie, nigdy nie działałem poprawnie. –
@codeflunky, jeśli znajdziesz rozwiązanie, proszę opublikuj tutaj! –