Question

j'ai un qui affiche une variété d'éléments dans un basé sur un SPView.

De plus, j'ai implémenté un module de recherche qui, lorsqu'un mot-clé est saisi, doit obtenir tous les éléments dont le titre contient une partie du mot-clé saisi, en utilisant SPQuery.

En utilisant SPList.GetItems() fonctionne bien lorsque vous utilisez le SPQuery =>

var itemCollection = SPList.GetItems(SPQuery);

Le code ci-dessus me donne les éléments que je veux, mais malheureusement aussi tous ceux que je ne veux pas.Ce que je veux, c'est obtenir tous les éléments du SPView qui correspondent au mot-clé saisi.

J'ai découvert que vous pouviez utiliser SPQuery avec SPView =>

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

Ce qui semble plutôt bien, mais une étude plus approfondie révèle que le "viewName" devrait en fait être le SPViewpièce d'identité ToStringéd.Et que si le SPQuery contient un <Where> clause, le "viewName" remplace cette requête et renvoie simplement chaque élément de cette vue particulière.

Alors ma question, existe-t-il un moyen d'interroger un SPView directement ou dois-je faire un travail pénible ?


Code de solution

Merci, Simon Doy, pour l'indice.

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);

Le code ci-dessus renvoie tous les éléments de la liste spécifiée correspondant au param

Était-ce utile?

La solution

Que diriez-vous de créer l'objet SPQuery à l'aide du constructeur où vous pouvez transmettre le SPView approprié.

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

Vous pouvez ensuite ajouter une requête pour inclure les éléments appropriés, quelque chose comme : -

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);

Autres conseils

Si SPQuery renvoie tous les éléments de la liste, alors dans la plupart des cas, QueryString est tout simplement erroné.Le comportement par défaut (dans mon option bizarre) est qu'en cas de QueryStrings erronées, une requête Caml renvoie TOUS les éléments.

Par exemple d'une erreur courante :La QueryString pour SPQuery.Query ne doit PAS inclure la balise « <Query> ».Si tel est le cas, il renvoie tous les éléments et ignore complètement la clause Where.

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top