Frage

Ich habe eine das zeigt eine Vielzahl von Elementen in einem basierend auf einem SPView.

Zusätzlich habe ich ein Suchmodul implementiert, das bei Eingabe eines Schlüsselworts alle Elemente mit einem Titel abrufen soll, der einen Teil des eingegebenen Schlüsselworts enthält SPQuery.

Wobei SPList.GetItems() funktioniert gut bei Verwendung des SPQuery =>

var itemCollection = SPList.GetItems(SPQuery);

Der obige Code gibt mir die Artikel, die ich will, aber leider auch alle, die ich nicht will.Was ich möchte, ist, alle Gegenstände von der zu bekommen SPView die dem eingegebenen Schlüsselwort entsprechen.

Ich habe herausgefunden, dass Sie SPQuery zusammen mit SPView =>

var itemCollection = SPList.GetItems(SPQuery, "viewName");

Was ziemlich gut klingt, aber bei näherer Betrachtung zeigt sich, dass der "Ansichtsname" eigentlich der sein sollte SPViews-KENNUNG ToStringaufl.Und das, wenn der SPQuery enthält eine <Where> -Klausel überschreibt der "viewName" diese Abfrage und gibt nur jedes Element in dieser bestimmten Ansicht zurück.

Also meine Frage, gibt es eine Möglichkeit, a abzufragen SPView direkt oder muss ich eine schmerzhafte Arbeit machen?


Lösungscode

Danke, Simon Doy, für den Hinweis.

var query = new SPQuery(SPList.GetView(ListViewId))
{
    Query = string.Format(string.Concat(
            "<Where>",
                "<Or>",
                    "<Or>",
                        "<Contains>",
                            "<FieldRef Name='Title'/>",
                            "<Value Type='Text'>{0}</Value>",
                        "</Contains>",
                        "<Contains>",
                            "<FieldRef Name='FieldAutoGeneratedName'/>",
                            "<Value Type='Text'>{0}</Value>",
                        "</Contains>",
                    "</Or>",
                    "<Contains>",
                        "<FieldRef Name='FieldATTCode'/>",
                        "<Value Type='Text'>{0}</Value>",
                    "</Contains>",
                "</Or>",
            "</Where>"
            ), param)
};
var items = SPList.GetItems(query);

Der obige Code gibt alle Elemente aus der angegebenen Listenansicht zurück, die mit dem übereinstimmen param

War es hilfreich?

Lösung

Wie wäre es mit dem Erstellen des SPQuery-Objekts mit dem Konstruktor, in dem Sie die entsprechende SPView übergeben können.

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spquery.spquery.aspx

Sie könnten dann eine Abfrage hinzufügen, um die entsprechenden Elemente einzuschließen, etwa:-

var query = new SPQuery(spView); 

query.Query = String.Format("<Where><Eq><FieldRef Name='Title'/><Value Type='Text'>{0}</Value></Eq></Where>", keyword);

SPListItemCollection listItems = oList.GetItems(query);

Andere Tipps

Wenn die SPQuery alle Elemente der Liste zurückgibt, ist die Abfragezeichenfolge in den meisten Fällen einfach falsch.Das (in meiner Option seltsame) Standardverhalten ist, dass bei falschen Abfragezeichenfolgen eine Caml-Abfrage ALLE Elemente zurückgibt.

Zum Beispiel von einem häufigen Fehler:Die Abfragezeichenfolge für SPQuery.Die Abfrage darf NICHT das "<Query>"-Tag.Wenn ja, gibt es alle Elemente zurück und ignoriert die Where-Klausel vollständig.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top