2009-06-26 11 views
6

Tengo el requisito de especificar conexiones de elementos web en onet.xml. Por lo tanto, cuando el sitio se crea utilizando esta definición de sitio, dichos elementos web ya están conectados y listos para usar. Qué propiedades debo especificar para esas partes web en particular en onet.xml.Conexiones de elementos web en definiciones de sitios

Respuesta

3

¡También he golpeado la pared en este el año pasado! Parece que las conexiones ya no se pueden especificar en los elementos web en el nuevo formato .webpart, ya que podrían en el antiguo formato .dwp. Terminé incluyendo una característica personalizada en la definición del sitio como también sugiere kpinhack. Mi código para conectar los elementos web se enumera a continuación. El método está diseñado para conectar dos elementos web de diferentes tipos: no admite varios elementos web del mismo tipo en la misma página. Pero estoy seguro de que captarás la idea general.

private void ConnectWebParts(SPWeb web, string pageName, Type providerType, Type consumerType) 
{ 
    SPFile file = web.GetFile(pageName); 
    SPList list = null; 
    if (file.InDocumentLibrary) 
    { 
    list = file.Item.ParentList; 
    if (list.ForceCheckout) file.CheckOut(); 
    } 

    SPLimitedWebPartManager webPartManager = 
    web.GetLimitedWebPartManager(
     pageName, 
     System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared); 

    WebPart provider = null; 
    foreach (WebPart wp in webPartManager.WebParts) 
    { 
    if (wp.GetType() == providerType) 
    { 
     provider = wp; 
     break; 
    } 
    } 

    foreach (WebPart consumer in webPartManager.WebParts) 
    { 
    if (consumer.GetType() != consumerType) continue; 

    ProviderConnectionPointCollection providerConnections = webPartManager.GetProviderConnectionPoints(provider); 
    ProviderConnectionPoint providerConnection = providerConnections[0]; 

    ConsumerConnectionPointCollection consumerConnections = webPartManager.GetConsumerConnectionPoints(consumer); 
    ConsumerConnectionPoint consumerConnection = consumerConnections[0]; 

    SPWebPartConnection con = webPartManager.SPConnectWebParts(provider, providerConnection, consumer, consumerConnection); 
    webPartManager.SPWebPartConnections.Add(con); 
    } 

    if (list != null) 
    { 
    if (list.ForceCheckout) 
    { 
     file.CheckIn("Added Web Part Connections"); 
    } 

    if (list.EnableVersioning && list.EnableMinorVersions) 
    { 
     file.Publish("Added Web Part Connections"); 
    } 
    } 
} 
+0

Gracias por proporcionar el código de función. Realmente ayudó –

0

Configuraría las WebParts en la función SiteProvisioning-Feature, implementando el manejador de eventos 'OnActivated'. De esta forma, el código se ejecutará cuando se cree el sitio web y podrá manejar los errores de la manera que le guste (por ejemplo, si los WebParts no están disponibles cuando se crea el sitio web)

¡Espero que esto ayude!

+0

¿Es esta la única manera de proporcionar conexión de pieza web en la definición del sitio? ¿No puedo simplemente especificar las propiedades de conexión de webpart en onet.xml? Creo que en sharepoint 2003 dos proezas de partes web estaban allí "connectionid" y "connections". ¿No puedo usar lo mismo? Si es así, ¿cómo? –

+0

gracias kpinhack por la solución. –

0

que tendría que utilizar la etiqueta < AllUsersWebPart> declarar sus piezas de la tela, y luego declarar sus conexiones dentro de los < WebPart> elementos encerrados.

example

Cuestiones relacionadas