SharePoint 2010: Cómo añadir una WebPart programáticamente a una página!

Una de las posibilidades de las que disponemos, como casi siempre, a la hora de añadir una WebPart a una página es la de hacerlo de forma programática. El proceso es tan sencillo como:

  • Crear un proyecto de tipo “Empty SharePoint Project” en Visual Studio 2010.
  • Añadir una Feature al proyecto a través del explorador de soluciones. A través del diseñador de características de Visual Studio 2010, configuramos de forma adecuada las propiedades de la misma.
  • Añadir un Feature Event Receiver a la característica partiendo de nuevo del explorador de soluciones, seleccionando la feature y pulsando la opción correspondiente disponible en el menú contextual.
image image
  • Añadimos una referencia a System.Web y pasamos a codificarlo añadiendo las siguientes directivas using:
   1: //Espacios de nombres necesarios

   2: using SPWebPartPages= Microsoft.SharePoint.WebPartPages;

   3: using System.Web.UI.WebControls.WebParts;

   4: using System.Collections.Generic;

  • Descomentamos el método FeatureActivated() y lo codificamos como sigue:
   1: public override void FeatureActivated(SPFeatureReceiverProperties properties)

   2: {

   3:     SPWeb spwWeb = (SPWeb)properties.Feature.Parent;

   4:     //Lista a mostrar en la XsltListViewWebPart

   5:     SPList splLista = spwWeb.Lists["Documentos Compartidos"];

   6:  

   7:     //Configuración de la XsltListViewWebPart

   8:     SPWebPartPages.XsltListViewWebPart xsltvwListViewWebPart =

   9:         new SPWebPartPages.XsltListViewWebPart();

  10:     xsltvwListViewWebPart.ListId = splLista.ID;

  11:     xsltvwListViewWebPart.ViewGuid =

  12:         splLista.DefaultView.ID.ToString();

  13:     xsltvwListViewWebPart.Title = "Documentos Compartidos";

  14:     xsltvwListViewWebPart.AllowConnect = true;

  15:     xsltvwListViewWebPart.AllowEdit = true;

  16:     xsltvwListViewWebPart.AllowHide = false;

  17:     xsltvwListViewWebPart.AllowMinimize = false;

  18:         

  19:     //Añadiendo la WebPart a la página

  20:     SPWebPartPages.SPLimitedWebPartManager spwpmWebPartManager =

  21:         spwWeb.GetLimitedWebPartManager("SitePages/WebPartsTest.aspx", 

  22:             PersonalizationScope.Shared);

  23:  

  24:     spwpmWebPartManager.AddWebPart(xsltvwListViewWebPart, "Zone 1", 0);

  25:     spwpmWebPartManager.Dispose();

  26: }

   1: public override void FeatureDeactivating(SPFeatureReceiverProperties properties)

   2: {

   3:     SPWeb spwWeb=(SPWeb)properties.Feature.Parent;

   4:     SPWebPartPages.SPLimitedWebPartManager spwpmWebPartManager =

   5:         spwWeb.GetLimitedWebPartManager("SitePages/WebPartsTest.aspx",

   6:             PersonalizationScope.Shared);

   7:     foreach (SPWebPartPages.WebPart spWebPart in spwpmWebPartManager.WebParts)

   8:     {

   9:         if (spWebPart.Title == "Documentos Compartidos")

  10:         {

  11:             spwpmWebPartManager.DeleteWebPart(spWebPart);

  12:             spwpmWebPartManager.Dispose();

  13:             break;

  14:         }

  15:     }

  16: }

  • En este caso, el objeto de tipo SPWebPartManager nos permite acceder a la colección de WebParts disponible en la página y eliminar aquella que cumpla la condición que hemos añadido.
  • Desplegamos el proyecto desde Visual Studio 2010 y comprobamos que en la página especificada (SitePages/WebPartTest.aspx) se muestra la WebPart añadida. Si desactivamos la feature, comprobaremos que la WebPart ya no se muestra.

image

 

Finalmente os dejo un enlace sobre como hacer lo mismo, pero utilizando PowerShell:http://farhanfaiz.wordpress.com/2011/07/25/sharepoint-2010-powershell-script-to-add-display-list-as-webpart.