Crear Query CAML a partir de un parámetro variable

Hace unos meses ya comente la existencia de algunas herramientas que nos permiten realizar Querys sobre listas SharePoint de manera sencilla, entre ellas CAMLQueryBuilder de u2u. Recientemente me ha tocado trabajar con ella y la verdad que para ser una herramienta gratuita es bastante completa…pero también tiene sus agujeros.

Tratando de realizar un filtrado en una de nuestras listas a partir de un parámetro variable, en lugar de un valor concreto, hemos tenido bastantes complicaciones, ya que dicha herramienta no nos permitía introducir un parámetro definido externamente por código. En concreto queríamos filtrar un campo de nuestra lista llamado “Dia” de tipo DateTime, para poder volcar aquellos elementos que coincidieran con una fecha variable seleccionada a partir de un calendario. Dado los problemas que nos ocasionaba que el campo de nuestra lista fuera de tipo DateTime (ya que no sabíamos exactamente con que formato interpreta SharePoint estos elementos) decidimos cambiarlo a tipo Texto. De esta manera conseguimos que nuestra consulta funcionara de la siguiente manera:

SPQuery oQueryHoras = new SPQuery();
        oQueryHoras.Query = "<Where><Eq><FieldRef Name=’Dia’/><Value Type=’Text’>" + CalendarioTrabajo.SelectedDate.ToString("dd/MM/yyyy")
            + "</Value></Eq></Where>"; //Pasamos el parámetro (fecha seleccionada en el calendario) transformado a formato "dd/MM/yyyy" y utilizamos (+) para concatenar

Por otro lado, cuando creamos vistas personalizadas en SharePoint, podemos hacer filtros para que cada usuario sólo pueda ver aquellos elementos de una lista que han sido creados o modificados por el. Para ello lo único que tenemos que hacer es indicar:

filtrouserme

Pero si realizamos este mismo filtrado mediante una Query CAML, esto no funciona. ¿Cómo solucionamos esto? Buscando información en la red encontré dos sitios donde explicaban como tenía que ser nuestra Query para que esto funcione correctamente:

http://www.davehunter.co.uk/Blog/Lists/Posts/Post.aspx?ID=123

http://vspug.com/mirjam/2009/07/16/creating-a-custom-view-that-filters-on-the-current-user-or-me/

Y el código necesario es el siguiente siguiente:

<Where><Eq><FieldRef Name=’Author’/><Value Type=’Integer’><UserID Type=’Integer’/></Value></Eq></Where>

De forma que nuestra consulta final, que filtra por dia y persona, quedó de la siguiente manera:

"<Where><And><Eq><FieldRef Name=’Dia’/><Value Type=’Text’>" + CalendarioTrabajo.SelectedDate.ToString("dd/MM/yyyy")
            + "</Value></Eq><Eq><FieldRef Name=’Author’/><Value Type=’Integer’><UserID Type=’Integer’/></Value></Eq></And></Where>";

Espero que os haya resultado de ayuda esta información 😉

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *