El otro día me acordé del artículo que ya escribí acerca de como realizar personalizaciones rápidas en sharepoint. El ejemplo realizaba modificaciones en modo unghosted, lo que implicaba que cada que se consume las páginas se estaba accediendo a la bbdd para cargarla.
Como alternativa a las personalizaciones sobre la bbdd de contenidos debemos de realizar nuestras páginas como page templates o applications pages, e incluso podemos pensar en webparts antes de hacer que una página sea unghosted.
Las page templates consisten en páginas que están físicamente en el servidor frontal se ejecuta en «safe mode», es decir no permite ejecutar código en servidor, y permite customizarla.
Un caso real
En el proyecto se planteaba una solución sobre lista de wss3 la cual debía de mostrar una vista y comportamiento especial en las páginas de DispForm, NewForm y EditForm. Si huebiéramos modificado la página directamente desde Sharepoint Designer habríamos terminado rápidamente, pero a cambio habríamos acarreando otros problemas futuros como pueda ser el backup/restore del portal y el rendimiento.
Comenzamos haciendo la lista con la estructura, lo recomendable es hacerlo definiendo un contenttype. Una vez creada la lista, abriremos el sharepoint Designer y entraremos en el formulario a modificar, en este ejemplo en DispForm.
Una vez abierto lo modificaremos con la estructura que deseemos, tal y como explicaba en mi anterior artículo.
Una vez modificada, lo que haremos será quedarnos con el código fuente, pero ojo no guardaremos el fichero, solo lo utilizaremos para renderizar el resultado y hacernos una idea en tiempo de diseño.
Ahora crearemos un proyecto en blanco con la estructura adecuada para construir una feature de sharepoint. Añadiremos una nueva páginas aspx sin código y pegaremos el código generado por el designer.
Si nos fijamos en el código generado por el designer veremos que nos ha incrustado un DataFormWebPart y que tiene como datasource y parámetros referencias a la lista pero por ID. Esto significa que todo lo que hagamos no podremos moverlo a otro sitio ya que la instancia de la lista tendrá otro id distinto aunque tenga la misma estructura.
Para solucionarlo accederemos por nombre en lugar de id, por lo que cambiaremos todas las referencias de ListId por ListName y el guid de la lista por el nombre de la lista. También quitaremos el parámetro
<ParameterBinding Name=»ListID» Location=»None» DefaultValue=»{3C54AAE0-1C6F-4FFD-A3F9-F3BB6FEDA399}»/> por <ParameterBinding Name=»ListName» Location=»None» DefaultValue=»»/>
Para verificar que lo hemos hecho correctamente copiaremos el código y lo pegaremos desde el designer en la página que tomamos como ejemplo. PERO SIN GUARDAR DESDE EL DESIGNER!!!.
Ahora tendremos que indicar a sharepoint que la página que hemos hecho se utilizará como template. Crearemos un fichero xml en el que indicaremos lo siguiente:
<Elements xmlns=»http://schemas.microsoft.com/sharepoint/»>
<Module Path=»PagesTemplates» Url=»Notas de Gastos/Forms» >
<File Url=»NotasDeGastosDispForm.aspx» Path=»NotasDeGastosDispForm.aspx» Type=»Ghostable» />
<File Url=»NotasDeGastosEditForm.aspx» Path=»NotasDeGastosEditForm.aspx» Type=»Ghostable» />
<File Url=»EntregarNotasDeGastosForm.aspx» Path=»EntregarNotasDeGastosForm.aspx» Type=»Ghostable» />
</Module>
</Elements>
El atributo path indica la ruta física del directorio y de la página, y el atributo Url indica el path relativo de la url desde donde se accederá.
Ahora solo tendremos que terminar de configuar nuestra feature, instalarla y activarla.
Al activarla, si actualizamos nuestro explorador del designer veremos como ha aparecido nuestra página. Fijaros que no tienen ningún indicador de que es unghosted.
Ahora solo nos quedará indicar a la lista que utilice nuestra página cuando se acceda a la Vista de propiedades desde DispForm. Para ello podemos hacerlo desde el designer en caso de las lista, y para las librerías de documentos por código desde un SPFeatureReceiver, en el evento FeatureActivated.
Algunos enlaces adicionales:
http://sharepoint-insight.blogspot.com/2008/07/dataform-webpart-escape-from-hardcoded.html