2009-06-26 16 views
6

J'ai l'obligation de spécifier les connexions de composants Web dans le fichier onet.xml. Ainsi, lorsque le site est créé en utilisant cette définition de site, lesdites parties Web sont déjà connectées et prêtes à l'emploi. Quelles propriétés dois-je spécifier pour ce composant WebPart particulier dans onet.xml.Connexions de composants WebPart dans les définitions de site

Répondre

3

J'ai aussi frappé le mur sur celui-ci l'année dernière! Il semble que les connexions ne puissent plus être spécifiées sur les composants WebPart dans le nouveau format .webpart, contrairement à l'ancien format .dwp. J'ai fini par inclure une fonctionnalité personnalisée dans la définition du site, comme le suggère kpinhack. Mon code de connexion des composants WebPart est répertorié ci-dessous. La méthode est simplement conçue pour connecter deux composants WebPart de types différents: elle ne prend pas en charge plusieurs composants WebPart du même type sur la même page. Mais je suis sûr que vous allez attraper l'idée générale.

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

Merci d'avoir fourni le code de fonctionnalité. Cela a vraiment aidé –

0

Je voudrais configurer les WebParts dans la fonctionnalité SiteProvisioning, en implémentant le gestionnaire d'événements 'OnActivated'. Ainsi, le code sera exécuté lorsque le site Web est créé et vous pouvez gérer les erreurs comme vous le souhaitez (si les WebParts ne sont pas disponibles lors de la création du site Web, pour quelque raison que ce soit)

J'espère que cela aidera!

+0

Est-ce la seule façon de fournir une connexion de composant WebPart dans la définition de site? Je ne peux pas simplement spécifier les propriétés de connexion webpart dans onet.xml. Je pense que dans Sharepoint 2003 deux proeprties WebPart étaient là "connectionid" et "connections". Puis-je utiliser la même chose? si oui comment? –

+0

merci kpinhack pour la solution. –

0

vous devez utiliser la balise < AllUsersWebPart> pour déclarer vos parties Web, puis déclarer vos connexions dans les < clos éléments> webpart.

example