2010-06-21 87 views
1

我正在構建運行時動態連接Web部件的最佳方法原型。 Essentailly,該應用程序將允許多個不同的應用程序組創建將在SharePoint前端使用的Web部件。所有的Web部件都需要自動檢測使用者和提供者在運行時創建連接。動態SharePoint 2007 WebPart連接

我們要做的是讓webparts發現並自動連接到其他兼容的webparts。當用戶將兩個兼容的部件添加到頁面時,這些部件應該能夠創建適當的連接。我們有一個定義良好的界面用於在部件之間傳遞數據,所以唯一的問題是如何管理連接。要清楚,我們不希望用戶擔心必須自己創建連接。

對於我們的目的而言,「最佳方式」意味着最高效,優雅和/或標準。我們希望儘可能遵循已建立的共享點設計模式,但代碼效率有點重要。

我已經能夠在每個subclassed webpart的oninit事件中使用基礎Web部件類來完成概念驗證。該事件OnInit的抓取當前頁面的SPWebPartManager並通過各部分itereates每一個web部件從基類繼承創建消費者和供應商連接:

SPWebPartManager spManager = SPWebPartManager.GetCurrentWebPartManager(Page) as SPWebPartManager; 
foreach (BaseWebPart provider in parts) 
{ 
    foreach (BaseWebPart consumer in parts) 
    { 
     if (provider != consumer) 
     { 
      string connectionId = string.Format("WebPartConnection{0}{1}", consumer.ID, provider.ID); 
      SPWebPartConnection conn = spManager.SPWebPartConnections[connectionId]; 
      if (conn == null) 
      { 
       conn = new SPWebPartConnection() 
       { 
        ID = connectionId, 
        ConsumerID = consumer.ID, 
        ConsumerConnectionPointID = "WebPartConnectableConsumer", 
        ProviderID = provider.ID, 
        ProviderConnectionPointID = "WebPartConnectableProvider" 
       }; 
       spManager.SPWebPartConnections.Add(conn); 
      } 
     } 
    } 
} 

回答

1

我會強烈建議你重新考慮並放棄這一想法。

我知道可能很難教所有用戶連接Web部件,並且您可能會在有限的情況下工作。

但在更復雜的情況下,您只是要求麻煩,而且您正在限制優先用戶的可能性。

  • 如果您實現一個(或多個)Web部件,它可以使用並提供相同的接口。然後把兩個這樣的頁面=>無盡的循環
  • 如果你的用戶把兩個提供者和兩個消費者放在同一個頁面上,你沒有辦法根據用戶的需要配對。
  • ...

我的建議是,你發展你的Web部件,使他們能夠使用和不使用連接(也許隱藏,如果連接的用戶界面的一部分)工作,並教你的用戶使用連接

或者您可以半途而廢,並且在設計模式下顯示您的web部件時,列出它可以連接的Web部件作爲鏈接,用戶可以點擊鏈接進行連接。

+1

謝謝,這就是我問的原因!我有一些同樣的想法,並對整體共識感到好奇。在設計模式中顯示潛在的Web部件連接作爲鏈接的建議很有趣。你能指出我的方向嗎? – etc 2010-06-22 10:38:55