CAML-Abfrage, einschließlich Ordner im ResultSet
Ich versuche zu schreiben, die eine CAML-Abfrage, die ausgeführt wird, gegen eine bestimmte SPList, eingeschränkt auf einen bestimmten Ordner, rekursiv von diesem Punkt, und gibt alle ListItems (erfüllen Kriterien) und Ordner.
Hier ist der code für die Abfrage, die scheint, wie es funktionieren sollte (formatiert für bessere Lesbarkeit):
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();
So - Sie gibt nur die ListItems - keine Ordner.
Wenn ich entfernen die anderen Bedingungen aus der Abfrage, nur das verlassen der FSObjType=1
bekomme ich eine COM-Ausnahme "diese Aktion kann Nicht abgeschlossen werden. Bitte versuchen Sie es erneut."
Wenn ich dann entfernen Sie die ViewFields, so dass nur die Scope=RecursiveAll
und FSObjType=1
, bekomme ich ein leeres ResultSet zurück.
leider Nein, ich bekam nie diese, um korrekt zu arbeiten.
wenn Sie eine Lösung finden, bitte hier posten!
InformationsquelleAutor Rex M | 2009-10-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Jeder ist nah, aber nicht ganz richtig.
Erste von allen, mit dieser FieldRef ist falsch:
weil der Inhalt der Ordner, geben Sie vererbt werden können. Daher müssen Sie, um Vergleiche gegen den content-Typ-ID, wie diese:
Dann legen Sie die view-Attribut Scope zu RecursiveAll
Sollte Rückkehr ein beliebiges Element, dessen Inhaltstyp erbt von Ordner (0x0120)
InformationsquelleAutor Dave T.
Ich nicht meine dev-image zum testen gegen, so könnte ich überarbeiten müssen, das später; aber ich denke, Sie könnten versuchen,
Abrufen der Elemente ermöglichen die Nutzung
SPUtility.GetUrlDirectory(url)
um den Pfad des Ordners für ein bestimmtes Element, und durchsuchen Sie die Ordner-Hierarchie aus.Wenn ich Fragen darf, sind Sie mit diesem als ein Anbieter für einige UI-Elemente wie eine Baumstruktur, kann lazy loading verwenden? Oder Sie ziehen alles auf einen einzigen pass?
alles muss geholt werden, sobald
InformationsquelleAutor gn22
Könnten Sie versuchen, stützen Sie Ihre caml-Abfrage, die auf den Inhalt der Ordner, Geben Sie stattdessen
während der
Dieser arbeitete für mich. Ich war in der Lage, Abfrage vom Inhaltstyp Ordner für Ordner verschachtelt in Ordnern mit RecursiveAll.
InformationsquelleAutor Gavin Morgan
Habe ich das Problem gelöst setzen:
Als Abfrage-option
Fand ich meine Frage auf stack overflow:
Wie kann ich rekursiv Durchlaufen, obwohl eine sharepoint-Liste mit webservices?
Sollte es Ordner gibt, aber ich kann mich nicht erinnern jetzt. SPList ist sehr kompliziert und undurchsichtig webservice, manchmal ist Magie... 🙂 Wenn es nicht funktioniert, werde ich prüfen, meine docs hier.
InformationsquelleAutor Luca Molteni
Haben Sie entfernen die
<Or>
- tags, wenn Sie das getan hat? Wenn nicht wird es nicht korrekt ausgeführt.Unabhängig davon, daß Ihr problem nicht lösen. Haben Sie versucht, zu verlassen die Abfrage leer ist? Hat es etwas zurückkehren?
Ich habe auf etwas ähnliches, und lief in eine Problem als gut, vielleicht ist es etwas im Zusammenhang.
<Or>
. Dies ist nicht ein syntax-problem.Machen Sie ein Ergebnis erhalten Sie, wenn Sie die Abfrage leer lassen?
Sorry für die späte Antwort. Ich bekomme ein ResultSet der Elemente nur, wenn ich entfernen Sie alle Bedingungen.
So erhalten Sie alle Einträge im angegebenen Ordner? Auch haben Sie versucht, indem die 'FileRef' und 'FSObjType" Felder der Ansicht"? WSS ist schlecht dokumentiert und ziemlich inkonsistent. Oh, und stellen Sie sicher, dass die Ansicht, die Sie ausgeführt werden, dieses hat die option Ordner legen.
InformationsquelleAutor Mark
Dieser scheint immer noch ein Problem in SP 2010. Hier ist Abhilfe-code, der für 2007 oder 2010, basierend auf in diesem MSDN-Foren posten , verwendet web services:
InformationsquelleAutor Alex Angas
InformationsquelleAutor Devarajan S M