Pregunta

tengo un que muestra una variedad de elementos en un basado en SPView.

Además, he implementado un módulo de búsqueda que cuando se ingresa una palabra clave debe obtener todos los elementos que tienen un Título que contiene una parte de la palabra clave ingresada, usando SPQuery.

Usando SPList.GetItems() funciona bien cuando se usa el SPQuery =>

var itemCollection = SPList.GetItems(SPQuery);

El código anterior me proporciona los elementos que quiero, pero lamentablemente también todos los que no quiero.Lo que quiero es conseguir todos los artículos del SPView que coinciden con la palabra clave ingresada.

Descubrí que puedes usar SPQuery junto con SPView =>

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

Lo cual suena bastante bien, pero cuando se estudia más de cerca se revela que "viewName" en realidad debería ser el SPViewidentificación ToStringed.Y que si el SPQuery contiene una <Where> cláusula, "viewName" anula esa consulta y simplemente devuelve cada elemento en esa vista en particular.

Entonces mi pregunta, ¿existe alguna manera de consultar un SPView directamente o tengo que hacer una solución dolorosa?


Código de solución

Gracias, Simon Doy, por la pista.

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

El código anterior devuelve todos los elementos de la vista de lista especificada que coinciden con el param

¿Fue útil?

Solución

¿Qué tal crear el objeto SPQuery usando el constructor donde puede pasar el SPView apropiado?

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

Luego podría agregar una consulta para incluir los elementos apropiados, algo como:-

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

Otros consejos

Si SPQuery devuelve todos los elementos de la lista, en la mayoría de los casos QueryString simplemente es incorrecto.El comportamiento predeterminado (en mi opción, extraño) es que, en caso de QueryStrings incorrectos, Caml-Query devuelve TODOS los elementos.

Por ejemplo de un error común:QueryString para SPQuery.Query NO debe incluir la etiqueta "<Query>".Si es así, devuelve todos los elementos e ignora por completo la cláusula Where.

Licenciado bajo: CC-BY-SA con atribución
scroll top