SharePoint 2010: Controles delegados (I)!

Los controles de tipo delegado están pensados para cambiar el look & feel de un sitio de SharePoint ya que actúan como contenedores que encapsulan contenido por defecto (un conjunto de controles hijos). Lo interesante de estos controles, que SharePoint utiliza de una forma “intensiva” es que tenemos la posibilidad de “machacar” el contenido por defecto y añadir controles específicos a partir de desplegar la correspondiente feature. Algunos ejemplos de controles delegados disponibles a nivel de página maestra son: To Navigation Data Source, Left Navigation Data Source, Search Box, etc. Si editamos la página maestra de un sitio de SharePoint convencional (la v4.master de un sitio de tipo sitio de grupo) veremos que hay numerosas instancias de tipo <SharePoint: DelegateControl />. Este es un control que define un contenedor con un atributo ControlId único en la página o en la página maestra y que será reemplazado durante el renderizado de la misma por el control de servidor adecuado:

   1: <SharePoint:DelegateControl runat="server" ControlId="AdditionalPageHead" 

   2: AllowMultipleControls="true"/>

   3: <SharePoint:DelegateControl runat="server" ControlId="GlobalNavigation" />

   4: <SharePoint:DelegateControl runat="server" ID="GlobalDelegate0" ControlId="GlobalSiteLink0" />

   5: <SharePoint:DelegateControl ControlId="GlobalSiteLink2" ID="GlobalDelegate2" Scope="Farm"

   6:  runat="server" />

   7: <SharePoint:DelegateControl runat="server" ControlId="PublishingConsole" 

   8: Id="PublishingConsoleDelegate">

   9: </SharePoint:DelegateControl><SharePoint:DelegateControl ControlId="GlobalSiteLink3" Scope="Farm" 

  10: runat="server" />

  11: <SharePoint:DelegateControl runat="server" ControlId="SmallSearchInputBox" Version="4" />

  12: <SharePoint:DelegateControl runat="server" ControlId="TopNavigationDataSource" 

  13: Id="topNavigationDelegate"/>

Si editamos la página maestra v4.master con SharePoint Designer 2010 (SPD 2010) podremos ver estas instancias. Por ejemplo, podemos localizar fácilmente la relativa al control de búsqueda típico de SharePoint:

   1: <SharePoint:DelegateControl runat="server" ControlId="SmallSearchInputBox" Version="4"/>

Para sobreescribir el comportamiento de un control delegado por defecto en tiempo de ejecución (por ejemplo el de búsqueda):

  • Por defecto este control delegado es reemplazado por el control nativo propio de SharePoint que en el caso de la versión server se encuentra definido en la clase Microsoft.SharePoint.Portal.WebControls.SearchBoxEx.
  • En Visual Studio 2010 creamos un proyecto de SharePoint 2010 de tipo vacío y elegimos como tipo de despliegue “Deploy as farm solution”.
  • Añadimos al proyecto un elemento de tipo vacío, de forma que se crea la correspondiente feature que configuramos de forma adecuada (título, descripción, propiedades, etc).
  • Configuramos el archivo Elements.xml de la siguiente forma:
   1: <?xml version="1.0" encoding="utf-8"?>

   2: <Elements xmlns="http://schemas.microsoft.com/sharepoint/">

   3:     <Control Id="SmallSearchInputBox"

   4:              Sequence="10"

   5:              ControlAssembly="$SharePoint.Project.AssemblyFullName$"

   6:              ControlClass="SPDelegateSearchControl.CustomSearchControl" />

   7:     <Control Id="SmallSearchInputBox"

   8:              Sequence="5"

   9:                ControlClass="Microsoft.SharePoint.Portal.WebControls.SearchBoxEx"

  10:                ControlAssembly="Microsoft.Office.Server.Search, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">

  11:         <Property Name="FrameType">None</Property>

  12:         <Property Name="DropDownMode">ShowDD</Property>

  13:         <Property Name="TextBoxWidth">200</Property>

  14:         <Property Name="ShowAdvancedSearch">true</Property>

  15:         <Property Name="QueryPromptString">Your search here...</Property>

  16:         <Property Name="SearchBoxTableClass">search-box</Property>

  17:     </Control>

  18: </Elements>

  • Como vemos, estamos añadiendo dos posibles controles delegados relativos a la caja de búsqueda de SharePoint (SmallSearchInputBox):
    • El primero de ellos haría referencia a una implementación propia del control de búsqueda.
    • El segundo, lo que hace es añadir configuraciones adicionales al control de búsqueda existente por defecto en la plataforma.
    • El atributo Sequence le va a indicar a SharePoint que control usar, teniendo en cuenta que considerará aquel control que tenga un valor mñas bajo para dicho atributo.

Hacemos el despliegue del proyecto y comprobamos que la personalización del control delegado se ha aplicado

image image image

 

Algunas referencias sobre controles delegados:

Publicado por

Juan Carlos González

Juan Carlos es Ingeniero de Telecomunicaciones por la Universidad de Valladolid y Diplomado en Ciencias Empresariales por la Universidad Oberta de Catalunya (UOC). Cuenta con más de 12 años de experiencia en tecnologías y plataformas de Microsoft diversas (SQL Server, Visual Studio, .NET Framework, etc.), aunque su trabajo diario gira en torno a SharePoint & Office 365. Juan Carlos es MVP de Office Servers & Services desde 2015 (anteriormente fue reconocido por Microsoft como MVP de Office 365 y MVP de SharePoint Server desde 2008 hasta 2015), coordinador del grupo de usuarios .NET de Cantabria (Nuberos.Net, www.nuberos.es), co-fundador y coordinador del Grupo de Usuarios de SharePoint de España (SUGES, www.suges.es), así como co-director de la revista gratuita en castellano sobre SharePoint CompartiMOSS (www.compartimoss.com). Hasta la fecha, ha publicado 8 libros sobre SharePoint & Office 365 y varios artículos en castellano y en inglés sobre ambas plataformas.

2 comentarios en “SharePoint 2010: Controles delegados (I)!”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *