2010-06-21 74 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