2009-06-26 5 views
6

Ich habe die Anforderung, Webpart-Verbindungen in onet.xml anzugeben. Wenn die Website mit dieser Websitedefinition erstellt wird, sind die Webparts bereits verbunden und können sofort verwendet werden. Welche Eigenschaften muss ich für diese bestimmten Webparts in onet.xml angeben?Webpart-Verbindungen in Website-Definitionen

Antwort

3

Ich habe auch irgendwann im letzten Jahr die Wand angeschlagen! Es sieht so aus, als könnten Verbindungen in Webparts im neuen .webpart-Format nicht mehr wie im alten .dwp-Format angegeben werden. Ich habe schließlich eine benutzerdefinierte Funktion in der Website-Definition wie kpinhack auch vorgeschlagen. Mein Code zum Verbinden der Webparts ist unten aufgeführt. Die Methode wurde nur für die Verbindung zweier Webparts unterschiedlicher Typen entwickelt - sie unterstützt nicht mehrere Webparts desselben Typs auf derselben Seite. Aber ich bin sicher, Sie werden die allgemeine Idee verstehen.

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

Danke für die Bereitstellung des Feature-Codes. Es hat wirklich geholfen –

0

Ich würde die WebParts in der SiteProvisioning-Funktion konfigurieren, indem ich den 'OnActivated'-Eventhandler implementiere. Auf diese Weise wird der Code ausgeführt, wenn die Website erstellt wird, und Sie können Fehler wie gewünscht behandeln (d. H. Wenn die WebParts nicht verfügbar sind, wenn die Website erstellt wird - aus welchen Gründen auch immer)

Ich hoffe, das hilft!

+0

Ist dies die einzige Möglichkeit, eine Webpartverbindung in der Websitedefinition bereitzustellen? Kann ich Webpartverbindungseigenschaften in onet.xml nur nicht angeben. Ich denke, in Sharepoint 2003 waren zwei Web-Part-Projekte "connectionid" und "connections". Kann ich das nicht verwenden? wenn ja wie? –

+0

danke kpinhack für die Lösung. –

0

müßten Sie den < AllUsersWebPart> Tag verwenden, um Ihre Web-Teile zu erklären, und dann Verbindungen innerhalb der geschlossenen < WebPart> Elemente deklarieren.

example