martes, 14 de abril de 2009

Filtrado CASEINSENSITIVE por propietario para ListItems cargados masivamente

Objetivo:
Filtrar resultados por propietario de forma case insensitive, con sharepoint designer

Ingredientes:
Un parámetro que recoger la server variable del LOGON_USER
Dos variables auxiliares para hacer el uppercase en XSLT
Un translate XSLT para el UPPERCASE

Receta:
El parametro del webpart para obtener el usuario actual

<ParameterBinding Name="UID" Location="ServerVariable(LOGON_USER)" DefaultValue=""/>

No es fácil ni cómodo cambiar el creador de un ListItem ya que es de solo lectura, y si queremos hacer cargas masivas, el creator siempre es SYSTEM, para cambiarlo hay que hacerlo directamente contra la base de datos de contenidos, y no es recomendable.
Esto me hizo optar por usar un campo extra "propietario" (hay que crearlo) para así filtrar elementos por él e inyectarle mediante un integrador los ListItems de forma masiva.

Ahora con la lista cargada, solo tengo que filtrar.

aqui hacemoes el filtrado de Datasource por propietario CASE-INSENSITIVE

<xsl:variable name="lcletters">abcdefghijklmnopqrstuvwxyz</xsl:variable>
<xsl:variable name="ucletters">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>

Aquí hacemos la select XPATH filtrando por propietario

<xsl:variable name="Rows" select="/dsQueryResponse/Propuestas/Rows/Row[@Estado = 'SIN CUMPLIMENTAR' and translate(@Propietario,$lcletters,$ucletters) = translate($UID,$lcletters,$ucletters)]" />

Espero os resulte de utilidad, yo lo uso mucho en mis aplicaciones.
http://www.robertomarcos.com/

No hay comentarios:

Publicar un comentario