SharePoint: Crear programáticamente una conexión entre 2 Web Parts!

En este post os voy a explicar rápidamente como crear programáticamente una conexión entre 2 Web Parts:

  • En primer lugar, tenéis que agregar las directivas “using” necesarias:
    • Microsoft.SharePoint;
    • Microsoft.SharePoint.WebPartPages;
    • System.Web.UI.WebControls.WebParts;

   1: //Espacios de nombres necesarios

   2: using Microsoft.SharePoint;

   3: using SPWebPartPages = Microsoft.SharePoint.WebPartPages;

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

  • A partir de aquí, el objeto más importante que necesitáis es SPLimiteWebPartManager que como podéis comprobar a continuación nos permite entre otras cosas:
    • Acceder a la colección de Web Parts de la página en la que se encuentran las Web Parts a conectar. A partir de esta colección de Web Parts, podremos localizar rápidamente las Web Parts a conectar.
    • Acceder a la colección de “puntos de consumo” de la Web Part consumidora, es decir, la Web Part que recibe los datos de la conexión. Esta colección es de tipo ConsumerConnectionPointCollection. Dentro de la colección podremos encontrar el punto de consumo concreto que nos interesa.
    • Acceder a la colección de “puntos de provisión” de la Web Part que provee las conexiones. Esta colección es de tipo ProviderConnectionPointCollection. Dentro de la colección podremos encontrar el punto de provisión concreto que nos interesa.
    • A partir de aquí, para conectar las dos WebParts no tenemos más que hacer uso del método SPConnectWebParts() que recibe la Web Part proveedora, el punto de provisión, la Web Part consumidora y el punto de consumo…y listo, las dos Web Parts estarán conectadas de forma programática
   1: static void ConnectWebParts()

   2: {

   3:     using (SPSite spsSitio=new SPSite("http://demo2010a:200/"))

   4:     {

   5:         using (SPWeb spwWeb=spsSitio.OpenWeb())

   6:         {

   7:             //WebPart Manager

   8:             SPWebPartPages.SPLimitedWebPartManager spwpmWebPartManager =

   9:                 spwWeb.GetLimitedWebPartManager("Documentos%20compartidos/ConnectableWebpParts.aspx",

  10:                     PersonalizationScope.Shared);

  11:  

  12:             WebPart wpProveedor=null;

  13:             WebPart wpConsumidor=null;

  14:             //Nos recorremosd la colección de WebParts

  15:             foreach (WebPart wp in spwpmWebPartManager.WebParts)

  16:             {

  17:                 if (wp.Title.Contains("Listado"))

  18:                 {

  19:                     wpProveedor = wp;

  20:                 }

  21:                 if (wp.Title.Contains("Detalle"))

  22:                 {

  23:                     wpConsumidor=wp;

  24:                 }

  25:             }

  26:  

  27:             //Conectando las WebParts

  28:             

  29:             //Consumidor

  30:             ConsumerConnectionPointCollection ccConsumidor =

  31:                 spwpmWebPartManager.GetConsumerConnectionPoints(wpConsumidor);

  32:             ConsumerConnectionPoint ccp = 

  33:                 ccConsumidor[0];

  34:  

  35:             //Proveedor

  36:             ProviderConnectionPointCollection pcProveedor =

  37:                 spwpmWebPartManager.GetProviderConnectionPoints(wpProveedor);

  38:             ProviderConnectionPoint pcp = pcProveedor[0];

  39:  

  40:             //Conectamos las WebParts

  41:             spwpmWebPartManager.SPConnectWebParts(wpProveedor, pcp, wpConsumidor, ccp);

  42:  

  43:             //Liberamos el objeto

  44:             spwpmWebPartManager.Dispose();

  45:  

  46:         }

  47:     }

  48: }