martes, 24 de febrero de 2009

MOSS y los archivos de recursos

Los archivos de recursos son la vía nativa que usa MOSS para localizar sus elementos. Siendo como es una plataforma basada en .NET Framework 2.0, no es de extrañar que use lo que sus clases nos proporcionan para localizar de manera estándar cualquier artefacto que contenga. Veamos un par de ejemplos:

\12\TEMPLATE\SiteTemplates\BLANKINTERNET\XML\ONET.XML (Línea 4)

<Project Revision="3" Title="$Resources:cmscore,IPPT_Project_Title;" ... >

12\TEMPLATE\CONTROLTEMPLATES\Welcome.ascx (Línea 3)

<SharePoint:PersonalActions AccessKey="<%$Resources:wss,personalactions_menu_ak%>"
    ToolTip="<%$Resources:wss,open_menu%>" runat="server" id="ExplicitLogout" Visible="false">

Como se puede apreciar, el formato de las referencias a archivo de recursos contiene dos elementos básicos: el nombre del fichero y la clave dentro del archivo de recursos. Veamos el formato de uno de estos archivos de recursos para entender a qué nos referimos cuando hablamos de clave.

<root>
  ...
  <Data Name="IPPT_Project_Title">
    <Value>Home</Value>
  </Data>
  ...
</root>

La elección de estos los dos ejemplos anteriores no ha sido totalmente al azar. He buscado dos tipos diferentes de referencias a archivos de recursos para ilustrar el hecho de que tenemos dos grandes categorías en este apartado:

  • De tiempo de provisión: los utiliza MOSS únicamente en tiempo de creación de elemento (sitio, lista, item, etc.)
  • De tiempo de ejecución: los utiliza MOSS (y .NET en general) en tiempo de cargado de página.

La diferencia parece clara pero, ¿en qué afecta esto a mis desarrollos sobre MOSS? Bien, afecta en la ubicación donde tengo que desplegar mis archivos de recursos. Los archivos del primer grupo deben desplegarse en la carpeta 12\Resources mientras que los del segundo grupo deberían acabar desplegándose en la carpeta App_GlobalResources del sitio web correspondiente a cada aplicación web desde la cual se quiera utilizar (por ejemplo, C:\INETPUB\WWWROOT\WSS\VirtualDirectories\80\App_GlobalResources). De todos modos, dejaremos de lado por ahora el despliegue de este tipo de elementos para centrarnos en su uso.

¿Són éstas todas las ubicaciones de archivo de recursos con las que me puedo encontrar? La respuesta es NO. Podemos encontrar ensamblados que contienen recursos incrustados, por ejemplo. Se englobarían en el segundo grupo de los de más arriba, pero estarían más protegidos ante modificaciones no autorizadas. Se pueden encontrar en la GAC o en las carpetas bin de los sitios web que las utilicen.

También podemos encontrar un tipo de artefacto de los que, personalmente, soy muy partidario: los archivos de recursos de característica. La idea es simple. Se crea una carpeta llamada Resources dentro de la carpeta de una característica concreta, y se añade un archivo de recursos con el nombre Resources.resx y, si se desea, uno para cada idioma que se quiera tener disponible, con el siguiente formato: Resources.es-ES.resx (donde es-ES correspondería al código del idioma en cuestión). Así, podremos hacer referencias a estos ficheros de la siguiente forma, sin necesidad de especificar un nombre de archivo:

<?xml version="1.0" encoding="utf-8"?>
<Feature  Id="5150eba6-eaf0-4cc6-95de-71629956d623"
          Version="1.0.0.0"
          DefaultResourceFile="_Res"
          Title="$Resources:feature_title;"
          Description="$Resources:feature_description;"
          Hidden="FALSE"
          Scope="Site"
          xmlns="http://schemas.microsoft.com/sharepoint/">
  <ElementManifests>
    <ElementManifest Location="elements.xml"/>    
  </ElementManifests>
</Feature>

Este tipo de fichero estaría englobado dentro del primer grupo de los comentados previamente, pero nos sirve para encapsular perfectamente todo aquello que está ligado a una característica concreta.

El próximo post hablará sobre cómo se desplegan todos estos ficheros de recursos en una granja de servidores MOSS.

0 comentarios: