Share via


Uso de un origen de datos personalizado para navegación

Última modificación: lunes, 01 de noviembre de 2010

Hace referencia a: SharePoint Foundation 2010

El cromo de un sitio web de Microsoft SharePoint Foundation incluye varios controles de navegación enlazados a controles de origen de datos. En cada caso, la función del control de origen de datos consiste en recuperar nodos de mapa del sitio u otros datos de navegación de un proveedor de navegación y, a continuación, pasar dichos datos al control de navegación para que los muestre.

Puede reemplazar algunos de los controles de origen de datos que se encuentran tras los controles de navegación integrados por controles de diseño propio. Este tipo de personalización no requiere el cambio de páginas principales ni la implementación de páginas de contenido personalizadas. El mecanismo para la sustitución se controla completamente mediante instrucciones declaradas en una característica de SharePoint Foundation. Para obtener información acerca de la creación e implementación de características, vea Uso de características.

Orígenes de datos que se pueden personalizar

En las páginas principales que se instalan con SharePoint Foundation, los controles de origen de datos que se encuentran detrás de tres importantes controles de navegación se declaran como controles delegados, lo que convierte a los orígenes de datos en elegibles para la sustitución de delegados. Puede sustituir un origen de datos personalizado por cada uno de los siguientes controles de navegación:

  • Barra de vínculos superior

  • Inicio rápido

  • Vista de árbol

Para reemplazar el origen de datos predeterminado por alguno de estos controles, debe crear una característica e implementarla en una solución de conjunto o granja de servidores. El sustituto puede ser uno de los controles de origen de datos suministrados por SharePoint Foundation o Microsoft .NET Framework, o bien puede ser un control de origen de datos personalizado de diseño propio. Si escribe su propio control de origen de datos, el ensamblado compilado debe instalarse en la memoria caché global de ensamblados mediante la característica que declara la sustitución de delegados o mediante algún otro proceso. El control personalizado también debe tener una entrada SafeControl en el archivo web.config. Para obtener más información, vea Procedimiento para personalizar un control delegado.

Funcionamiento de la sustitución de controles

Al igual que un control de marcador de posición, un control delegado define una región de una página principal que puede sustituirse por algún otro contenido. En este caso, el control de origen de datos es contenido predeterminado que puede sustituirse por un control sustituto en tiempo de ejecución.

Por ejemplo, el siguiente extracto de v4.master declara un control AspMenu para la barra de vínculos superior y un DelegateControl como el origen de datos para el menú. El contenido predeterminado para el delegado es un control SiteMapDataSource.

<SharePoint:AspMenu
    ID="TopNavigationMenuV4"
    Runat="server"
    EnableViewState="false"
    DataSourceID="topSiteMap"
    AccessKey="1"
    UseSimpleRendering="true"
    UseSeparateCss="false"
    Orientation="Horizontal"
    StaticDisplayLevels="2"
    MaximumDynamicDisplayLevels="1"
    SkipLinkText=""
    CssClass="s4-tn"/>
<SharePoint:DelegateControl 
    runat="server" 
    ControlId="TopNavigationDataSource" 
    Id="topNavigationDelegate">
    <Template_Controls>
        <asp:SiteMapDataSource
            ShowStartingNode="False"
            SiteMapProvider="SPNavigationProvider"
            id="topSiteMap"
            runat="server"
            StartingNodeUrl="sid:1002"/>
    </Template_Controls>
</SharePoint:DelegateControl>

Al igual que con un control de marcador de posición, el contenido predeterminado de un control delegado puede sustituirse por contenido personalizado, en este caso por otro control. La diferencia con un control delegado consiste en que no se invalida el contenido predeterminado mediante la adición de marcado a una página de contenido, como ocurriría con un marcador de posición. En su lugar, se realiza la sustitución mediante la implementación de una solución de granja de servidores que incluye una característica que identifica el control que se desea reemplazar y el control por el cual se desea reemplazarlo.

El procedimiento para implementar una característica para la sustitución de delegados se describe en detalle en Procedimiento para personalizar un control delegado. En resumen, se agrega un manifiesto de elemento a la característica y, en el manifiesto, se declara un elemento Control que identifica el control delegado, así como el ensamblado y la clase de los candidatos de sustitución.

Por ejemplo, el siguiente XML sustituye el origen de datos para la barra de vínculos superior por un control de origen de datos personalizado denominado Contoso.NavigationDataSource.

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="https://schemas.microsoft.com/sharepoint/">
  <Control Id="TopNavigationDataSource"Sequence="50"
    ControlClass="Contoso.NavigationDataSource"
    ControlAssembly="Contoso, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <Property Name="SiteMapProvider">SPNavigationProvider</Property>
    <Property Name="ID">topSiteMap</Property>
  </Control>
</Elements>

El valor del atributo ControlId del control delegado es TopNavigationDataSource. Por lo tanto, el valor del atributo Id del elemento Control también debe ser TopNavigationDataSource. Esto vincula el control personalizado con el delegado de destino.

Los atributos ControlClass y ControlAssembly del elemento Control indican a SharePoint Foundation dónde buscar el control candidato. El ensamblado firmado que contiene el código para el control debe instalarse en la memoria caché global de ensamblados.

Una parte fundamental del marcado de ejemplo es el elemento Property que establece el atributo ID del control candidato en topSiteMap. Este es el mismo valor que usa el control AspMenu para su atributo DataSourceID. En tiempo de ejecución, el control de menú se enlaza a un control de origen de datos con ese identificador. El plan consiste en que busque el control personalizado en lugar del control predeterminado. El control personalizado, por supuesto, debe derivar de la clase HierarchicalDataSourceControl, ya que eso es lo que el control AspMenu espera en un origen de datos.

Puede suceder que varias características estén destinadas al mismo control delegado. Para solucionar los conflictos, cada una de ellas debe especificar un número de secuencia para su candidato de sustitución a fin de establecer la prioridad de un candidato sobre otro. En tiempo de ejecución, el control delegado acepta la unión de elementos de control declarada en la granja de servidores, la aplicación web, la colección de sitios y los niveles de sitio web. El control con el número de secuencia inferior se agrega al árbol de controles. En el caso de una coincidencia de secuencia, el orden de los controles es arbitrario.

En el marcado de ejemplo para el control Contoso.NavigationDataSource, el valor del atributo Sequence es 50. Aunque el marcado no revela el número de secuencia del control de origen de datos predeterminado, es seguro suponer que se encuentra por encima de 100. Si el control Contoso es el único candidato para la sustitución, reemplazará el origen de datos predeterminado.

Vea también

Tareas

Procedimiento para personalizar un control delegado

Procedimiento para personalizar la visualización de Inicio rápido

Conceptos

Controles de navegación

Control delegado (creación de plantillas de control)

Procedimiento para compartir la barra de vínculos superior entre sitios