Procedimiento para implementar recursos en vistas de lista personalizadas

Última modificación: viernes, 15 de octubre de 2010

Hace referencia a: SharePoint Foundation 2010

Esta tarea de programación muestra cómo crear una vista personalizada para obtener una lista de Microsoft SharePoint Foundation estándar. En el ejemplo siguiente, se crean dos recursos personalizados: un recurso especifica texto para introducir un vínculo personalizado que se proporciona en la sección de pie de página y el otro modifica el texto que se muestra cuando la lista no contiene ningún elemento. El ejemplo XSLT invalida la plantilla predeterminada de FreeForm para definir una sección de pie de página especial con un vínculo a otra ubicación en la colección de sitios. También rinvalida la plantilla de ViewEmpty para modificar el texto que se representa para listas vacías.

Esta tarea de programación muestra los siguientes pasos para crear una vista personalizada e implementar recursos en ella:

  1. Cree una definición de lista personalizada en Microsoft Visual Studio 2010.

  2. Agregue un archivo XSLT al proyecto y cambie el valor XslLink en Schema.xml para que haga referencia al archivo XSLT.

  3. Agregue un archivo de recursos al proyecto que define las cadenas de recursos.

  4. Agregue enlaces de parámetros al archivo Schema.xml de la lista y agregue declaraciones al archivo XSLT para consumir los parámetros.

Para obtener una tarea de programación que muestre cómo personalizar la representación de los campos en las vistas de lista, vea Procedimiento para personalizar la representación de un campo en una vista de lista.

Para crear una definición de lista personalizada

  1. En Visual Studio 2010, en el menú Archivo, elija Nuevo y, a continuación, haga clic en Proyecto.

  2. En el cuadro de diálogo Nuevo proyecto, en Plantillas instaladas, expanda el nodo Visual Basic o el nodo Visual C#.

  3. Expanda el nodo SharePoint y seleccione 2010.

  4. En Tipo de proyecto, seleccione Definición de lista.

  5. Escriba un nombre para el proyecto de la definición de lista y, a continuación, haga clic en Aceptar.

  6. En el Asistente para la personalización de SharePoint, especifique un sitio para usar en la depuración. En el nivel de confianza de la solución, seleccione Implementar como solución de granja de servidores y, a continuación, haga clic en Siguiente.

  7. En el cuadro de diálogo Elegir configuración de definición de lista, especifique un nombre para mostrar para la definición de lista, seleccione el tipo de lista de base que desea usar para la definición y haga clic en Finalizar. El nombre para mostrar especificado es el nombre que aparece en la página Crear.

Para agregar y hacer referencia a un archivo XSLT

  1. En el Explorador de soluciones, haga clic con el botón secundario en el proyecto, elija Agregar y, a continuación, haga clic en Carpeta asignada de SharePoint.

  2. En el cuadro de diálogo Agregar carpeta asignada de SharePoint, seleccione la carpeta {SharePointRoot}\TEMPLATE\LAYOUTS\XSL y, a continuación, haga clic en Aceptar.

  3. En el Explorador de soluciones, haga clic con el botón secundario en la nueva carpeta XSL, elija Agregar y, a continuación, haga clic en Nuevo elemento.

  4. En el cuadro de diálogo Agregar nuevo elemento, expanda el nodo Visual C# para C# o en el nodo Elementos comunes para Visual Basic.

  5. Seleccione Datos y, a continuación, seleccione Archivo XSLT. Especifique un nombre para el archivo y, a continuación, haga clic en Agregar.

  6. En el Explorador de soluciones, haga doble clic en el archivo Schema.xml para abrirlo en el Editor de código.

  7. Busque la definición de vista Todos los elementos o Todos los documentos en el archivo Schema.xml. Puede identificar esta definición mediante el atributo DefaultView en el elemento View, que se establece en TRUE.

  8. De forma predeterminada, el elemento XslLink en la vista especifica main.xsl como archivo XSLT. Cambie este valor para el nombre asignado al archivo XSLT que agregó en el paso 5.

Para agregar recursos de la vista personalizada

  1. En el Explorador de soluciones, haga clic con el botón secundario en el proyecto, elija Agregar y, a continuación, haga clic en Carpeta asignada de SharePoint.

  2. En el cuadro de diálogo Agregar carpeta asignada de SharePoint, seleccione la carpeta {SharePointRoot}\CONFIG\Resources y, a continuación, haga clic en Aceptar.

  3. En el Explorador de soluciones, haga clic con el botón secundario en la nueva carpeta Recursos, elija Agregar y, a continuación, haga clic en Nuevo elemento.

  4. En el cuadro de diálogo Agregar nuevo elemento, expanda el nodo Visual C# o en el nodo Elementos comunes, seleccione General y, a continuación, seleccione Archivo de recursos. Escriba un nombre para el archivo y, a continuación, haga clic en Agregar.

  5. En el Editor de recursos, escriba un nombre y un valor para el recurso. El valor es una cadena para mostrar cuando la lista está vacía. En este ejemplo se especifica "EmptyListResource" como el nombre del recurso para el valor "Agregue información a esta lista lo antes posible" y "WikiResource" para el valor "Para obtener información sobre el contenido de esta lista, vea" .

  6. En el archivo Schema.xml, agregue enlaces de parámetros a la sección de <ParameterBindings> de la vista. Esta opción agrega los recursos especificados en el paso anterior.

    Estas etiquetas tienen los siguientes formatos: <ParameterBinding Name=”EmptyListString” Location=”Resource(Resource1,EmptyListResource)” /> y <ParameterBinding Name=”TeamWiki” Location=”Resource(Resource1,WikiResource)” />. En este ejemplo, "EmptyListString" y "TeamWiki" son los nombres de parámetro que se pueden implementar en el archivo XSLT, "Resource1" es el nombre del archivo de recursos sin la extensión y "EmptyListResource" y "WikiResource" son los nombres de recurso proporcionados en el archivo .resx.

Para implementar los recursos en el código XSLT

  1. Para invalidar las plantillas predeterminadas de FreeForm y EmptyTemplate que se definen en vwstyles.xsl, importe el archivo main.xsl al archivo XSLT.

    <?xml version="1.0" encoding="utf-8"?>
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
    >
    
    <xsl:import href="/_layouts/xsl/main.xsl"/>
    

    La importación de main.xsl también importa vwstyles.xsl y fldtypes.xsl al archivo, ya que de forma predeterminada ambos se importan a main.xsl.

    Debido a que anteriormente se modificó el valor del elemento XslLink y se agregaron enlaces de parámetros al archivo Schema.xml, las cadenas de recursos definidas están disponibles para su uso en el archivo XSLT.

  2. Declare los parámetros de la siguiente forma.

    <xsl:param name="MyEmptyListString" />
    <xsl:param name="TeamWiki" />
    
  3. Copie la plantilla de FreeForm en el archivo XSLT y agregue una sección que defina la representación especial de la sección de pie de página en la vista de todos los elementos, como se indica a continuación.

    <xsl:template name="Freeform">
      <xsl:param name="AddNewText"/>
      <xsl:param name="ID"/>
      <xsl:variable name="Url">
        <xsl:choose>
          <xsl:when test="List/@TemplateType='119'">
            <xsl:value-of select="$HttpVDir"/>/_layouts/CreateWebPage.aspx?List=<xsl:value-of select="$List"/>&amp;RootFolder=<xsl:value-of select="$XmlDefinition/List/@RootFolder"/>
          </xsl:when>
          <xsl:when test="$IsDocLib">
            <xsl:value-of select="$HttpVDir"/>/_layouts/Upload.aspx?List=<xsl:value-of select="$List"/>&amp;RootFolder=<xsl:value-of select="$XmlDefinition/List/@RootFolder"/>
          </xsl:when>
          <xsl:otherwise>
            <xsl:value-of select="$ENCODED_FORM_NEW"/>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:variable>
      <xsl:variable name="HeroStyle">
        <xsl:choose>
          <xsl:when test="Toolbar[@Type='Standard']">display:none</xsl:when>
          <xsl:otherwise></xsl:otherwise>
        </xsl:choose>
      </xsl:variable>
      <xsl:if test="$ListRight_AddListItems = '1' and (not($InlineEdit) or $IsDocLib)">
        <table id="Hero-{$WPQ}" width="100%" cellpadding="0" cellspacing="0" border="0" style="{$HeroStyle}">
          <tr><td colspan="2" class="ms-partline">
            <img src="/_layouts/images/blank.gif" width="1" height="1" alt="" />
          </td></tr>
          <tr><td class="ms-addnew" style="padding-bottom: 3px">
            <span style="height:10px;width:10px;position:relative;display:inline-block;overflow:hidden;" class="s4-clust">
             <img src="/_layouts/images/fgimg.png" alt="" style="left:-0px !important;top:-128px !important;position:absolute;"  /></span>
        <xsl:text disable-output-escaping="yes" ddwrt:nbsp-preserve="yes">&amp;nbsp;</xsl:text>
          <xsl:choose>
            <xsl:when test="List/@TemplateType = '115'">
              <a class="ms-addnew" id="{$ID}-{$WPQ}" href="{$Url}"
                onclick="javascript:NewItem2(event, &quot;{$Url}&quot;);javascript:return false;"
                target="_self">
                <xsl:value-of select="$AddNewText" />
              </a>
            </xsl:when>
    
    <!—Define a special footer section for the custom list definition, which has 10000 as template type.-->
            <xsl:when test="$XmlDefinition/List/@TemplateType ='10000'">
              <a class="ms-addnew" id="{$ID}-{$WPQ}" href="{$Url}"
                onclick="javascript:NewItem2(event, &quot;{$Url}&quot;);javascript:return false;"
                target="_self">
              <xsl:value-of select="$AddNewText" />
            </a>
            <p>
              <xsl:value-of select="$TeamWiki"/>
              <a href="{$RootSiteUrl}/TeamWiki">Team Wiki</a>.
            </p>
          </xsl:when>
    
          <xsl:otherwise>
            <a class="ms-addnew" id="{$ID}"
              href="{$Url}" onclick="javascript:NewItem2(event, &quot;{$Url}&quot;);javascript:return false;"
              target="_self">
              <xsl:value-of select="$AddNewText" /></a>
          </xsl:otherwise>
        </xsl:choose>
        </td></tr>
        <tr><td><img src="/_layouts/images/blank.gif" width="1" height="5" alt="" /></td></tr></table>
        <xsl:choose>
          <xsl:when test="Toolbar[@Type='Standard']">
            <script type='text/javascript'>
              if (typeof(heroButtonWebPart<xsl:value-of select="$WPQ"/>) != "undefined")
              {
                <xsl:value-of select="concat('  var eleHero = document.getElementById(&quot;Hero-', $WPQ, '&quot;);')"/>
                  if (eleHero != null)
                    eleHero.style.display = "";
                  }
            </script>
          </xsl:when>
          <xsl:otherwise></xsl:otherwise>
        </xsl:choose>
        <xsl:if test="List/@TemplateType = '115'">
          <script type='text/javascript'>
                if (typeof(DefaultNewButtonWebPart<xsl:value-of select="$WPQ"/>) != "undefined")
                {
                  <xsl:value-of select="concat('  var eleLink = document.getElementById(&quot;', $ID, '-', $WPQ, '&quot;);')"/>
                  if (eleLink != null)
                  {
                    DefaultNewButtonWebPart<xsl:value-of select="$WPQ"/>(eleLink);
                  }
                }
          </script>
        </xsl:if>
      </xsl:if>
    </xsl:template>
    

    En el ejemplo se aplica representación especial en la sección de pie de página de la vista mediante el parámetro XmlDefinition para recuperar el TemplateType de la definición de lista, que es de 10000. Además, en el ejemplo se usa el parámetro "TeamWiki" para devolver la cadena "WikiResource" y el parámetro global "RootSiteUrl" para devolver el sitio web raíz de la colección de sitios que contiene el sitio web primario de la lista. En el ejemplo se asume la existencia de una biblioteca wiki en el sitio web raíz que se denomina "TeamWiki".

  4. Agregue el código siguiente al archivo XSLT, que invalida la definición de EmptyTemplate para modificar el texto que aparece.

      <xsl:template name="EmptyTemplate">
        <tr>
          <td class="ms-vb" colspan="99"  style="color:red;font-weight:bold">
            <xsl:value-of select="$MyEmptyListString"/>
          </td>
        </tr>
      </xsl:template>
    </xsl:stylesheet>
    
  5. En el menú Generar, haga clic en Generar solución y, a continuación, haga clic en Implementar solución para implementar la lista personalizada para el sitio de SharePoint Foundation.

    Nota

    Al implementar el proyecto, Visual Studio 2010 coloca el archivo de recursos que se crea en la carpeta asignada especificada (%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\CONFIG\Resources). Cuando se crea una nueva aplicación web, SharePoint Foundation copia el archivo .resx en la carpeta \inetpub\...\App_GlobalResources creada para la aplicación web, que es donde el archivo debe ubicarse para que los recursos surtan efecto. Sin embargo, para que el archivo surta efecto en las aplicaciones web existentes al implementar el proyecto, se debe copiar manualmente el archivo en la carpeta App_GlobalResources de la aplicación web.

Vea también

Referencia

Elemento ParameterBinding

Conceptos

XsltListViewWebPart y vistas de lista personalizadas

Enlaces de parámetros XSLT

Información general del sistema de representación de vistas de listas XSLT